Articulo de referencia

Proceso ligero

En los sistemas operativos de computadoras , un proceso ligero ( LWP ) es un medio para lograr la multitarea . En el significado tradicional del término, como se usa en Unix Sys...

En los sistemas operativos de computadoras , un proceso ligero ( LWP ) es un medio para lograr la multitarea . En el significado tradicional del término, como se usa en Unix System V y Solaris , un LWP se ejecuta en el espacio de usuario sobre un único hilo del núcleo y comparte su espacio de direcciones y recursos del sistema con otros LWP dentro del mismo proceso . Se pueden colocar múltiples hilos de nivel de usuario , administrados por una biblioteca de hilos, sobre uno o varios LWP, lo que permite realizar multitarea a nivel de usuario, lo que puede tener algunas ventajas de rendimiento. [ 1 ]

En algunos sistemas operativos, no existe una capa LWP separada entre los subprocesos del kernel y los subprocesos de usuario. Esto significa que los subprocesos de usuario se implementan directamente sobre los subprocesos del kernel. En esos contextos, el término "proceso ligero" generalmente se refiere a los subprocesos del kernel y el término "subprocesos" puede referirse a los subprocesos de usuario. [ 2 ] En Linux , los subprocesos de usuario se implementan permitiendo que ciertos procesos compartan recursos, lo que a veces lleva a que estos procesos se denominen "procesos ligeros". [ 3 ] [ 4 ] De manera similar, en SunOS versión 4 en adelante (anterior a Solaris ), "proceso ligero" se refería a los subprocesos de usuario. [ 1 ]

Hilos del kernel

Los hilos del kernel son gestionados íntegramente por el kernel . No es necesario que estén asociados a un proceso; el kernel puede crearlos siempre que necesite realizar una tarea específica. Los hilos del kernel no pueden ejecutarse en modo usuario. Los LWP (en sistemas donde constituyen una capa independiente) se vinculan a los hilos del kernel y proporcionan un contexto de nivel de usuario. Esto incluye un enlace a los recursos compartidos del proceso al que pertenece el LWP. Cuando un LWP se suspende, debe almacenar sus registros de nivel de usuario hasta que se reanude, y el hilo del kernel subyacente también debe almacenar sus propios registros de nivel de kernel.

Actuación

Los LWP son más lentos y costosos de crear que los hilos de usuario. Cada vez que se crea un LWP, primero se debe realizar una llamada al sistema para crear un hilo del kernel correspondiente, lo que provoca un cambio al modo kernel. Estos cambios de modo generalmente implican copiar parámetros entre el kernel y el espacio de usuario; además, el kernel puede necesitar pasos adicionales para verificar los parámetros y comprobar si hay comportamientos no válidos. Un cambio de contexto entre LWP significa que el LWP que está siendo interrumpido debe guardar sus registros, luego pasar al modo kernel para que el hilo del kernel guarde sus registros, y el LWP que está siendo programado debe restaurar los registros del kernel y del usuario por separado. [ 1 ]

Por esta razón, algunas bibliotecas de subprocesos de nivel de usuario permiten implementar múltiples subprocesos de usuario sobre LWP. Los subprocesos de usuario se pueden crear, destruir, sincronizar y alternar completamente en el espacio de usuario sin llamadas al sistema ni cambios al modo kernel. Esto proporciona una mejora significativa en el rendimiento en cuanto al tiempo de creación de subprocesos y los cambios de contexto. [ 1 ] Sin embargo, existen dificultades para implementar un planificador de subprocesos de nivel de usuario que funcione bien junto con el kernel.

Activación del programador

Si bien la biblioteca de subprocesos de usuario programará los subprocesos de usuario, el kernel programará los LWP subyacentes. Sin coordinación entre el kernel y la biblioteca de subprocesos, el kernel puede tomar decisiones de programación subóptimas. Además, es posible que se produzcan casos de interbloqueo cuando los subprocesos de usuario distribuidos en varios LWP intentan adquirir los mismos recursos que están siendo utilizados por otro subproceso de usuario que no se está ejecutando en ese momento. [ 1 ]

Una solución a este problema es la activación del planificador. Este método permite la cooperación entre el núcleo y la biblioteca de hilos. El núcleo notifica al planificador de la biblioteca de hilos sobre ciertos eventos (como cuando un hilo está a punto de bloquearse) y la biblioteca de hilos puede decidir qué acción tomar. La llamada de notificación del núcleo se denomina "llamada ascendente".

Una biblioteca de nivel de usuario no tiene control sobre el mecanismo subyacente; solo recibe notificaciones del kernel y programa los hilos de usuario en los LWP disponibles, no en los procesadores. El planificador del kernel decide entonces cómo programar los LWP en los procesadores. Esto significa que la biblioteca de hilos puede ver los LWP como "procesadores virtuales". [ 5 ]

Sistemas operativos compatibles

Solaris implementó una capa LWP separada desde la versión 2.2. Antes de la versión 9, Solaris permitía una asignación de muchos a muchos entre LWP e hilos de usuario. Sin embargo, esto se eliminó debido a las complejidades que introducía y a las mejoras de rendimiento del planificador del kernel. [ 1 ] [ 6 ]

UNIX System V y sus derivados modernos IRIX , SCO OpenServer , HP-UX e IBM AIX permiten una asignación de muchos a muchos entre subprocesos de usuario y LWP. [ 5 ] [ 7 ]

NetBSD 5.0 ​​introdujo un nuevo modelo de subprocesos escalable 1:1. Cada subproceso de usuario (pthread) tiene un subproceso del núcleo llamado proceso ligero (LWP). Dentro del núcleo, tanto los procesos como los subprocesos se implementan como LWP y el planificador los gestiona de la misma manera. [ 8 ]

Implementaciones

Véase también

Referencias

  1. 1 2 3 4 5 6 Vahalia, Uresh (1996). "Hilos y procesos ligeros". UNIX Internals - The New Frontiers . Prentice-Hall Inc. ISBN 0-13-101908-2.
  2. "Compiladores IBM AIX" . IBM . 2004. Consultado el 24 de enero de 2010. En AIX, el término proceso ligero generalmente se refiere a un hilo del kernel.{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  3. Bovet, Daniel P.; Cesati, Marco (2005). "3.1. Procesos, procesos ligeros e hilos". Comprensión del núcleo de Linux (3.ª ed.). O'Reilly Media . 
  4. Walton, Sean (1996). "Preguntas frecuentes sobre hilos de Linux (FAQ)" . Recuperado el 24 de enero de 2010 .
  5. 1 2 Silberschatz; Galvin; Gagne (2004). "Capítulo 5 - Hilos". Conceptos de sistemas operativos con Java (Sexta ed.). John Wiley & Sons, Inc. 
  6. "Multihilo en el entorno operativo Solaris™" (PDF) . Sun Microsystems . 2002. Consultado el 24 de enero de 2010 .
  7. "IBM AIX 6.1 - Optimización de subprocesos" . IBM . 2009. Consultado el 24 de enero de 2010 .
  8. "Planificación de subprocesos e interfaces relacionadas en NetBSD 5.0" (PDF) . El proyecto NetBSD. 2009. Consultado el 20 de diciembre de 2022 .
  • "El sistema de procesamiento ligero" de Jim Mauro
  • "Procesos Solaris" por Scott Cromar
  • Modelos de subprocesos (del documento técnico sobre gestión de procesos de HP-UX)