Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2006 ApunteThreadTheory 2
2006 ApunteThreadTheory 2
ANTES DE COMENZAR…
En este tutorial nos proponemos brindar una ayuda al alumno para familiarizarse con el
concepto de thread, su significado, aspectos teóricos y características.
¿QUÉ ES UN THREAD?
Un thread o hilo es un “semi-proceso”, que tiene su propia pila, y que ejecuta una
porción de código dada. A diferencia de un proceso real, un thread normalmente
comparte su memoria con otros threads (en la cual, tal como sucede con los procesos,
cada thread tendrá asignado su espacio de memoria).
Por otro lado, debido a que los threads dentro de un grupo comparten el mismo espacio
de memoria, si uno de ellos corrompe el espacio de su memoria, los otros threads
también sufrirán las consecuencias. Con un proceso, el sistema operativo normalmente
protege a un proceso de otros y si un proceso corrompe su espacio de memoria los
demás no se verán afectados.
Si se los implementa correctamente entonces los threads tienen algunas ventajas por
sobre los (multi) procesos, es así que tendremos:
Así como podemos tener múltiples procesos corriendo en nuestra PC, también podemos
tener múltiples threads corriendo. De esta forma aparecen dos grandes grupos de
sistemas operativos respecto de la forma de ejecución de threads.
Single threading
-- cuando el sistema operativo no reconoce al concepto de thread.
Multithreading
-- cuando el sistema operativo soporta múltiples threads de ejecución dentro de
un proceso.
Algunos ejemplos de sistemas operativos populares para cada uno de los modelos
presentados en la figura anterior son:
MS-DOS
-- soporta solo un único proceso con un único thread (cuadrante superior
izquierdo de la figura).
UNIX
-- soporta múltiples procesos pero un único thread por proceso (cuadrante
inferior izquierdo de la figura).
Solaris
-- soporta múltiples threads (en uno o más procesos).
En este nivel, el kernel del sistema operativo no se preocupa por la existencia de los
threads. Toda la administración de los threads es realizada a nivel del lenguaje, es decir:
por la aplicación, usando alguna biblioteca de threads. Los cambios entre Threads
durantes la ejecución no requieren de la intervención del kernel, ni de sus privilegios y
la planificación de los mismos es específica de la aplicación.
En algunos textos los TNL suelen denominarse también threads de nivel de usuario.
Lenguajes de Programación I Año 2006
Ventajas:
Desventajas:
A diferencia del nivel anterior, en este nivel la administración de los threads es realizada
por el kernel del sistema operativo, por ende no existen bibliotecas de threads pero
puede existir un API (de llamadas al sistema) que el kernel facilita para su utilización.
El kernel mantiene la información del contexto de los procesos y los threads, es así que
los cambios entre threads requieren la intervención del kernel en el proceso de
planificación de la ejecución de los mismos.
En algunos textos los TNSO suelen denominarse también threads de nivel de kernel.
Ventajas
Desventajas:
También existen modelos híbridos, donde la idea central es combinar lo mejor de cada
una de las aproximaciones anteriores. Solaris es un ejemplo de un sistema operativo que
combina TNL y TNSO.
Lenguajes de Programación I Año 2006
Podemos decir que la planificación de la ejecución de los threads es una clara diferencia
entre ambos modelos de implementación de threads: en el TNL la planificación es
llevada a cabo a nivel del lenguaje, mientras que en el TNSO es llevada a cabo a nivel
de sistema operativo. Sin embargo, aún no hemos estudiado a qué nivel se efectúa la
administración de la memoria. Es decir: la manera en que cada thread accede a los datos
compartidos por los restantes threads o a sus propios datos.
Es importante señalar que en una aplicación de múltiples threads no todos los datos
pueden ser compartidos entre los threads; sino que cada thread posee una pila propia de
ejecución, donde cada uno de sus procedimientos o funciones alojan (en sus respectivos
registros de activación) las variables semiestáticas, semidinámicas, descriptores, etc.
Los datos almacenados en cada pila de ejecución sólo son accesibles por el thread
propietario de dicha pila. En cambio, los datos almacenados en el heap y los datos
almacenados en forma estática pueden ser compartidos por todos los threads del
proceso; razón por la cual, puede ser necesario establecer mecanismos de sincronización
que controlen el acceso a estos datos. En este esquema, la forma en que se administre el
espacio de memoria del proceso es crucial para garantizar una ejecución correcta de la
aplicación.
IMPLEMENTACIONES
Debemos notar que los trheads pueden ser implementados sin soporte del sistema
operativo, aunque algunos sistemas operativos o bibliotecas proveen soporte explícito
para ellos. Por ejemplo, las versiones recientes de Microsoft Windows (Windows NT
3.51 SP3 y posteriores) soportan el API de threads para aplicaciones que quieren
mejorar su performance mediante el uso de sus propios esquemas de administración, en
lugar de dejar dicha actividad al planificador del sistema operativo. Microsoft SQL
Server 2000 en el modo de planificación de usuario es un ejemplo de ello.
BIBLIOGRAFÍA
• http://users.actcom.co.il/~choo/lupg/tutorials/debugging/debugging-with-
gdb.html
• http://users.actcom.co.il/~choo/lupg/tutorials/multi-thread/multi-thread.html
• http://www.cs.cf.ac.uk/Dave/C/node29.html
• http://en.wikipedia.org/wiki/Thread_(computer_science)