¿Cuáles son las relaciones entre procesos, hilos de kernel, procesos ligeros e hilos de usuario en Unix? [cerrado]

12

Unix Internal de Vahalia tiene cifras que muestran las relaciones entre procesos, hilos de kernel, procesos livianos e hilos de usuario. Este libro presta más atención a SVR4.2, y también explora 4.4BSD, Solaris 2.x, Mach y Digital UNIX en detalle. Tenga en cuenta que no estoy preguntando sobre Linux.

  1. Para cada proceso, ¿hay siempre uno o más procesos ligeros subyacentes al proceso? La figura 3.4 parece decir que sí.

    ¿Por qué la Figura 3.5 (a) muestra los procesos directamente encima de las CPU, sin procesos ligeros en el medio?

  2. Para cada proceso ligero, ¿hay siempre exactamente un hilo del núcleo subyacente al proceso ligero? La figura 3.4 parece decir que sí.

    ¿Por qué la Figura 3.5 (b) muestra procesos livianos directamente encima de los procesos, sin ningún hilo del núcleo en el medio?

  3. ¿Los hilos del núcleo son las únicas entidades que pueden programarse?

  4. ¿Se programan procesos livianos solo indirectamente a través de la programación de los hilos subyacentes del kernel?

  5. ¿Se programan los procesos solo indirectamente a través de la programación de los procesos ligeros subyacentes?

Figura 3-4.  Procesos ligeros

Figura 3-5.  Implementaciones de hilos de usuario


Actualizar:

Hice una pregunta similar para Linux ¿Se adjunta un proceso ligero a un hilo del núcleo en Linux? Supuse que podría deberse a que el libro Conceptos del sistema operativo presenta los conceptos implícitamente usando Unix, y Unix y Linux pueden diferir, así que leí sobre el núcleo de Unix.

Agradezco la respuesta actual, pero espero volver a abrir la publicación para poder aceptar otras respuestas.

Tim
fuente
¿Por qué esa pregunta se marcaría como demasiado junta? En realidad es una buena pregunta sobre el concepto de Linux. Los documentos generalmente no son lo suficientemente detallados, la explicación será una gran respuesta
炸鱼 薯条 德里克
Re moderador: No es el número puro de preguntas sino la naturaleza de las preguntas lo que importa. Pregunto las relaciones entre varios conceptos estrechamente relacionados y confusos. Supongo que las personas sin entenderlo podrían pensar que el conteo de preguntas es importante.
Tim

Respuestas:

12

Ver: Comprender el kernel de Linux , 3a edición por Daniel P. Bovet, Marco Cesati

  • Editorial: O'Reilly
  • Fecha de publicación: noviembre de 2005
  • ISBN: 0-596-00565-2
  • Páginas: 942

En su introducción, Daniel P. Bovet y Marco Cesati, dijeron:

Técnicamente hablando, Linux es un verdadero núcleo de Unix, aunque no es un sistema operativo completo de Unix, ya que no incluye todas las aplicaciones, como las utilidades del sistema de archivos, sistemas de ventanas y escritorios gráficos, comandos de administrador del sistema, editores de texto, compiladores, etc. en. Lo que lee en este libro y ve en el kernel de Linux, por lo tanto, puede ayudarlo a comprender también las otras variantes de Unix.

En los siguientes párrafos, trataré de abordar sus puntos de vista basados ​​en mi comprensión de los hechos presentados en "Comprender el kernel de Linux", que en gran medida son similares a los de Unix.

¿Qué significa un proceso? :

Los procesos son como los seres humanos, se generan, tienen una vida más o menos significativa, opcionalmente generan uno o más procesos hijos y, finalmente, mueren. Un proceso tiene cinco partes fundamentales: código ("texto"), datos (VM), pila, E / S de archivos y tablas de señales

El propósito de un proceso en el Kernel es actuar como una entidad a la que se asignan los recursos del sistema (tiempo de CPU, memoria, etc.). Cuando se crea un proceso, es casi idéntico a su padre. Recibe una copia (lógica) del espacio de direcciones del padre y ejecuta el mismo código que el padre, comenzando en la siguiente instrucción que sigue a la llamada al sistema de creación del proceso. Aunque el padre y el hijo pueden compartir las páginas que contienen el código del programa (texto), tienen copias separadas de los datos (pila y montón), de modo que los cambios del niño a una ubicación de memoria son invisibles para el padre (y viceversa) .

¿Cómo funcionan los procesos?

Un programa en ejecución necesita más que solo el código binario que le dice a la computadora qué hacer. El programa necesita memoria y varios recursos del sistema operativo para ejecutarse. Un "proceso" es lo que llamamos un programa que se ha cargado en la memoria junto con todos los recursos que necesita para funcionar. Un hilo es la unidad de ejecución dentro de un proceso. Un proceso puede tener desde un solo hilo a muchos hilos. Cuando se inicia un proceso, se le asigna memoria y recursos. Cada hilo en el proceso comparte esa memoria y recursos. En procesos de subproceso único, el proceso contiene un subproceso. El proceso y el hilo son uno y el mismo, y solo está sucediendo una cosa. En procesos multiproceso, el proceso contiene más de un hilo y el proceso está logrando varias cosas al mismo tiempo.

La mecánica de un sistema de procesamiento múltiple incluye procesos ligeros y pesados:

En un proceso pesado, varios procesos se ejecutan juntos en paralelo. Cada proceso pesado en paralelo tiene su propio espacio de direcciones de memoria. La comunicación entre procesos es lenta ya que los procesos tienen diferentes direcciones de memoria. El cambio de contexto entre procesos es más costoso. Los procesos no comparten memoria con otros procesos. La comunicación entre estos procesos implicaría mecanismos de comunicación adicionales, como enchufes o tuberías.

En un proceso ligero, también llamado hilos. Los hilos se usan para compartir y dividir la carga de trabajo. Los hilos utilizan la memoria del proceso al que pertenecen. La comunicación entre subprocesos puede ser más rápida que la comunicación entre procesos porque los subprocesos del mismo proceso comparten memoria con el proceso al que pertenecen. Como resultado, la comunicación entre los hilos es muy simple y eficiente. El cambio de contexto entre hilos del mismo proceso es menos costoso. Los hilos comparten memoria con otros hilos del mismo proceso

Hay dos tipos de subprocesos: subprocesos a nivel de usuario y subprocesos a nivel de kernel. Los subprocesos a nivel de usuario evitan el núcleo y administran el trabajo por sí mismos. Los subprocesos a nivel de usuario tienen el problema de que un solo subproceso puede monopolizar el intervalo de tiempo y así privar a los otros subprocesos dentro de la tarea. Los subprocesos a nivel de usuario generalmente se admiten por encima del núcleo en el espacio de usuario y se administran sin soporte del núcleo. El núcleo no sabe nada acerca de los subprocesos a nivel de usuario y los administra como si fueran procesos de un solo subproceso. Como tal, los subprocesos a nivel de usuario son muy rápidos, opera 100 veces más rápido que los subprocesos del núcleo.

Los subprocesos a nivel de kernel a menudo se implementan en el kernel utilizando varias tareas. En este caso, el núcleo programa cada subproceso dentro del intervalo de tiempo de cada proceso. Aquí, dado que la marca del reloj determinará los tiempos de conmutación, es menos probable que una tarea acapare el segmento de tiempo de los otros subprocesos dentro de la tarea. Los subprocesos de nivel de núcleo son compatibles y administrados directamente por el sistema operativo. La relación entre subprocesos a nivel de usuario y subprocesos a nivel de kernel no es completamente independiente, de hecho, existe una interacción entre estos dos niveles. En general, los subprocesos de nivel de usuario se pueden implementar utilizando uno de los cuatro modelos: modelos de muchos a uno, uno a uno, muchos a muchos y dos niveles. Todos estos modelos asignan subprocesos a nivel de usuario a subprocesos a nivel de núcleo y provocan una interacción en diferentes grados entre ambos niveles.

ingrese la descripción de la imagen aquí

Hilos vs. Procesos

  1. El programa comienza como un archivo de texto de código de programación,
  2. El programa se compila o interpreta en forma binaria,
  3. El programa se carga en la memoria,
  4. El programa se convierte en uno o más procesos en ejecución.
  5. Los procesos suelen ser independientes entre sí,
  6. Mientras que los hilos existen como el subconjunto de un proceso.
  7. Los hilos pueden comunicarse entre sí más fácilmente que los procesos,
  8. Pero los hilos son más vulnerables a los problemas causados ​​por otros hilos en el mismo proceso

Referencias

Comprensión del kernel de Linux, 3.a edición

Más 1 2 3 4 5

...............................................

Ahora, simplifiquemos todos estos términos ( este párrafo es desde mi perspectiva ). Kernel es una interfaz entre software y hardware. En otras palabras, el núcleo actúa como un cerebro. Manipula una relación entre el material genético (es decir, los códigos y su software derivado) y los sistemas corporales (es decir, hardware o músculos).

Este cerebro (es decir, el núcleo) envía señales a los procesos que actúan en consecuencia. Algunos de estos procesos son como músculos (es decir, hilos), cada músculo tiene su propia función y tarea, pero todos trabajan juntos para terminar la carga de trabajo. La comunicación entre estos hilos (es decir, los músculos) es muy eficiente y simple, por lo que logran su trabajo sin problemas, de manera rápida y efectiva. Algunos de los hilos (es decir, músculos) están bajo el control del usuario (como los músculos de nuestras manos y piernas). Otros están bajo el control del cerebro (como los músculos de nuestro estómago, ojos y corazón que no controlamos).

Los subprocesos de espacio de usuario evitan el núcleo y gestionan las tareas en sí. A menudo esto se llama "multitarea cooperativa", y de hecho es como nuestras extremidades superiores e inferiores, está bajo nuestro propio control y funciona todo junto para lograr el trabajo (es decir, ejercicios o ...) y no necesita órdenes directas de el cerebro. Por otro lado, los hilos Kernel-Space están completamente controlados por el kernel y su programador.

...............................................

En respuesta a sus preguntas:

  1. ¿Se implementa siempre un proceso basado en uno o más procesos livianos? La figura 3.4 parece decir que sí. ¿Por qué la Figura 3.5 (a) muestra los procesos directamente encima de las CPU?

    Sí, hay procesos livianos llamados subprocesos y procesos pesados.

    Un proceso pesado (puede llamarse proceso de subproceso de señal) requiere que el procesador mismo haga más trabajo para ordenar su ejecución, es por eso que la Figura 3.5 (a) muestra los procesos directamente encima de las CPU.

  2. ¿Se implementa siempre un proceso ligero basado en un hilo del núcleo? La figura 3.4 parece decir que sí. ¿Por qué la Figura 3.5 (b) muestra procesos livianos directamente encima de los procesos?

    No, los procesos ligeros se dividen en dos categorías: procesos a nivel de usuario y a nivel de núcleo, como se mencionó anteriormente. El proceso a nivel de usuario se basa en su propia biblioteca para procesar sus tareas. El núcleo mismo programa el proceso a nivel del núcleo. Los subprocesos de nivel de usuario se pueden implementar utilizando uno de los cuatro modelos: muchos a uno, uno a uno, muchos a muchos y dos niveles. Todos, estos modelos asignan hilos a nivel de usuario a hilos a nivel de núcleo.

  3. ¿Los hilos del núcleo son las únicas entidades que pueden programarse?

    No, los hilos a nivel del núcleo son creados por el núcleo mismo. Son diferentes a los subprocesos de nivel de usuario en el hecho de que los subprocesos de nivel de kernel no tienen un espacio de direcciones limitado. Viven únicamente en el espacio del núcleo, sin cambiar nunca al ámbito de la tierra del usuario. Sin embargo, son entidades totalmente planificables y preferentes, al igual que los procesos normales (nota: es posible deshabilitar casi todas las interrupciones para acciones importantes del núcleo). El propósito de los hilos propios del núcleo es principalmente realizar tareas de mantenimiento en el sistema. Solo el núcleo puede iniciar o detener un hilo del núcleo. Por otro lado, el proceso a nivel de usuario puede programarse a sí mismo en función de su propia biblioteca y, al mismo tiempo, puede ser programado por el núcleo en función de los modelos de dos niveles y muchos a muchos (mencionados anteriormente),

  4. ¿Se programan procesos livianos solo indirectamente a través de la programación de los hilos subyacentes del kernel?

    Los hilos del núcleo están controlados por el planificador del núcleo en sí. Admitir subprocesos a nivel de usuario significa que hay una biblioteca de nivel de usuario que está vinculada con la aplicación y esta biblioteca (no la CPU) proporciona toda la administración en el tiempo de ejecución para subprocesos. Admitirá las estructuras de datos necesarias para implementar la abstracción de subprocesos y proporcionará toda la sincronización de programación y otros mecanismos necesarios para tomar la decisión de gestión de recursos para estos subprocesos. Ahora, algunos de los procesos de subprocesos a nivel de usuario pueden asignarse a los subprocesos subyacentes a nivel de kernel y esto incluye la asignación uno a uno, uno a muchos y muchos a muchos.

  5. ¿Se programan los procesos solo indirectamente a través de la programación de los procesos ligeros subyacentes?

    Depende de si es un proceso pesado o liviano. Pesados ​​son los procesos programados por el núcleo mismo. El proceso ligero se puede gestionar a nivel de kernel y a nivel de usuario.

Jeff Schaller
fuente
Gracias. (1) unix.stackexchange.com/questions/472354/… (2) Le pregunté específicamente sobre Unix en lugar de LInux, aunque agradezco su respuesta, especialmente muy útil para Linux, y espero que pueda dejarlo como está.
Tim
1
"El propósito de los subprocesos del núcleo es principalmente realizar tareas de mantenimiento en el sistema". ¿Puede elaborar o proporcionar una referencia, Goro
Iruvar
@iruva Creo que "tareas de mantenimiento" no es el término exacto, por ejemplo, la administración de energía está controlada por hilos del núcleo y no tiene nada que ver con las tareas de mantenimiento. En realidad, las referencias proporcionadas junto con esta publicación tienen información rica sobre hilos del kernel. Si desea que elabore, publique una nueva pregunta sobre los hilos del kernel y sus funciones / tipos / cómo se crean ... etc. y me complace explicarlo. ¡Esta respuesta es lo suficientemente larga y no puede aceptar información adicional!
@Tim: ¿Qué versión de Unix estabas preguntando? ¿Específicamente los sistemas antiguos que mencionaste como se discute en el libro? ¿Están incluidos los BSD modernos? ¿Está incluido Solaris 11? ¿Se incluye MacOS X Leopard (UNIX certificado)?
user1686
@grawity pregunté sobre el libro, así que sea lo que sea que use el libro. Si conoce otras versiones, también es bueno saberlo.
Tim