Informatica
LinuxThreads vs Native POSIX Threads (NPTL)
23-Jan-2007
Diferencias entre hilos de ejecución (threads) y procesos
A grandes rasgos, la principal diferencia entre un proceso y un thread es que en la mayoría de los sistemas operativos, un proceso es una entidad relativamente independiente que dispone de su propio espacio dedirecciones, su propia información de estado y que utiliza los mecanismos de comunicación entre procesos que le proporciona el sistema operativo para comunicarse con otros procesos. Por otro lado, un thread seria una entidad más reducida capaz de convivir junto a otros threads bajo el contexto de un único proceso, permitiendo compartir la información de estado, el área de memoria y/o los recursos asociadosa ese proceso. Asi, un thread no seria más que la habilidad de un proceso o programa para dividirse en varios hilos de ejecución simultáneos o aparentemente simultáneos. Desde el punto de vista del algoritmo de scheduling del kernel -que decide que proceso ha de pasar a la CPU en cada momento- el proceso seria la unidad más grande capaz de ser manejada por el scheduler, mientras que el hilo seriala unidad más pequeña capaz de ser llevada a la CPU por el scheduler del kernel.
Hilos de ejecución en GNU/Linux
Antes de la versión 2.6 del kernel Linux, no había soporte real para manejar hilos a nivel de kernel. Las primeras versiones para el manejo de hilos en Linux (LinuxThreads) se implementaron en el área de usuario mediante llamadas a una función de sistema clone(), capaz de crear unacopia de un proceso. Esta primera implementación además estaba muy lejos de ser compatible con los estándares POSIX de hilos de ejecución (POSIX threading standards). Para mejorar el soporte de hilos en Linux, fueron necesarios retoques tanto a nivel de kernel (y su ABI) como a nivel de las librerías GNU C Library (Glibc) que implementaban el concepto de hilo. Esto dio lugar a variosmodelos/proyectos para la gestión de hilos, dependiendo de lo nuevo que fuera el sistema: • LinuxThreads (with fixed stack size) LinuxThreads (with floating stacks) NGPT (Next Generation POSIX Threads) liderado por IBM y abandonado por NPTL. NPTL (Native POSIX Thread) Proyecto liderado por Red Hat y liberado en 2003
• • •
Al añadir nuevas posibilidades al trabajo con hilos en el kernel de linux, seinició una etapa de transición en la que algunas aplicaciones requerían un esquema de hilos moderno (NPTL), mientras que otras utilizaban otro más tradicional como LinuxThreads. Todo ello, teniendo el sistema que poder correr aplicaciones basadas en un modelo de hilos más o menos avanzado. Como se ha comentado al inicio, los nuevos modelos de soporte de hilos requerían cambios también a nivel dekernel. Así, las diferentes librerías dinámicas (DSO Dinamic Shared Objects/Shared Libraries), además de una librería de hilos concreta, requerirán de una versión del kernel con una interfaz capaz de trabajar con dicha librería. A esta interfaz se la conoce con el nombre de Application Binary Interface (ABI). Una ABI define la interfaz de bajo nivel entre la Aplicación y el sistema operativo o kernel ,mientras que una API define el interfaz entre el código fuente y las librerías. De la misma forma que una API permite
que un código fuente sea compilado en cualquier sistema que soporte para dicha API, la ABI permite que un objeto binario pueda funcionar en un sistema con una ABI compatible. Los DSO incluyen información relativa a la versión de ABI requerida, de manera que el enlazador ocargador dinámico (LD) de las Glibc (ld.so/ld-linux.so) sabe la versión ABI requerida por el DSO. Las ABIs disponibles dependen de la versión del kernel que utilice el sistema, mientras que el modelo de hilos utilizado depende de las librerías de hilos (libpthread.so) disponibles. La decisión de qué librerías utilizar la toma el enlazador dinámico. Así, la incursión de un nuevo modelo de hilos...
Regístrate para leer el documento completo.