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

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í:

  1. Multi-threading cooperativo
  2. 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

  1. 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
  2. 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.
  3. 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
  4. 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:

  • El puntero al Stack del thread
  • Una copia de sus registros en el procesador
Link to original

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

  • El código
  • Variables globales
  • Variables del heap
Link to original

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