Definición
Los threads comparten los recursos del proceso, entre ellos, el espacio de memoria. Cada thread mantiene su propia información de estado como
- Thread id
- Un conjunto de los valores de los registros
- Stack propio
- Un propio
errno
- Prioridad de scheduling
- Status
Es una secuencia de ejecución atómica que representa una tarea planificable de ejecución. Donde
- Secuencia de ejecución atómica
- Cada thread ejecuta una secuencia de instrucciones como lo hace un bloque de código en el Modelo de programación secuencial
- Tarea planificable de ejecución
- El Sistema operativo tiene injerencia sobre el mismo en cualquier momento y puede ejecutarlo, suspenderlo y continuarlo cuando él desee
En la actualidad hay dos formas de que los threads se relacionen entre sí:
- Multi-threading cooperativo
- No hay Interrupción a menos que se solicite
- Multi-threading Preemptivo
- Es el más usado en la actualidad. Consiste en que un thread en estado de running puede ser movido en cualquier momento.
Thread vs. proceso
Tenemos varios casos de comparación
- Un thread por proceso
- Un proceso con una única secuencia de instrucciones ejecutándose de inicio a fin. Esto es equivalente a un bloque de instrucción delimitado por
{
y}
. Lo que todos los programadores de Modelo secuencial conocemos
- Un proceso con una única secuencia de instrucciones ejecutándose de inicio a fin. Esto es equivalente a un bloque de instrucción delimitado por
- Muchos thread por proceso
- Un Programa es visto como thread ejecutándose dentro de un proceso con derechos restringidos. En dado un
algunos threads pueden estar corriendo y otros estar suspendidos. Cuando se detecta por ejemplo una operación de I/O por alguna Interrupción, el Kernel desaloja (Preempt) a algunos de los threads que están corriendo, atiende la interrupción y al terminar de manejar la interrupción vuelve a correr el thread nuevamente.
- Un Programa es visto como thread ejecutándose dentro de un proceso con derechos restringidos. En dado un
- Muchos proceso con un solo thread cada uno
- Limitación de algunos sistemas operativos que permitían varios procesos, pero cada uno con un único thread, lo que implica que puede haber varios thread ejecutándose en Kernel mode
- Muchos kernel thread
- Para aprovechar recursos, también el kernel puede ejecutar varios threads en Kernel mode
Estados de un thread
Definición
Los estados de un Thread son
Link to original
Ciclo de vida de un thread
Cada thread tiene dos estados
- El estado per thread
- El estado compartido entre varios thread
El estado per-thread
Definición
Cada Thread debe tener una estructura que represente su estado. Esta estructura se denomina Thread Control Block. Se crea una entrada por cada thread. La TCB almacena el estado per-thread de un thread:
- El estado del Cómputo que debe ser realizado por el thread.
Para poder crear múltiples threads, pararlos y rearrancarlos. El sistema operativo debe poder almacenar en el TCB el estado actual del bloque de ejecución:
Link to original
- El puntero al Stack del thread
- Una copia de sus registros en el procesador
Shared state o Estado compartido
Definición
De forma contraria al per-thread state se debe guardar cierta información que es compartida por varios Thread
Link to original
- El código
- Variables globales
- Variables del heap
Locks
Definición
Una forma menos compleja de alcanzar una solución para el problema de la heladera es mediante la utilización de locks. Un lock es una variable que permite la sincronización mediante la exclusión mutua, cuando un Thread tiene el candado o lock, ningún otro puede ternerlo.
La idea principal es que un Proceso asocia un lock a determinados estados o partes de código y requiere que el thread posea el lock para entrar en ese estado. Con esto se logra que sólo un thread acceda a un recurso compartido a la vez.
Esto permite la exclusión mutua, todo lo que se ejecuta en la región de código en la cual un thread tiene un lock, garantiza la atomicidad de las operaciones.
Link to original
API’s
Definición
Es una API de threads, dada por la biblioteca pthread. Esta API es muy completa y la iremos viendo a medida que se la necesite.
Link to original