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.
Hilos vs. Procesos
- El programa comienza como un archivo de texto de código de programación,
- El programa se compila o interpreta en forma binaria,
- El programa se carga en la memoria,
- El programa se convierte en uno o más procesos en ejecución.
- Los procesos suelen ser independientes entre sí,
- Mientras que los hilos existen como el subconjunto de un proceso.
- Los hilos pueden comunicarse entre sí más fácilmente que los procesos,
- 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:
¿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.
¿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.
¿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),
¿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.
¿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.