Motivacion y ventajas de las hebras

De Departamento de Informatica
Saltar a: navegación, buscar
Comparativa de Hebras y Procesos.
Representación simple de un thread.

La hebras nacen debido a la necesidad de mejorar el desempeño en la ejecución de código, pues los procesadores no estaban procesando con su máximo potencial. Esta perdida de desempeño se puede ver desde varios puntos. A finales de los 70 nos encontramos con perdidas de desempeño debido a la latencia de las memorias. En los 90 el desempeño no estaba a tono con la creciente complejidad paralela.

Se trata de subsanar con:

  • Incremento en ancho de instrucciones.
  • Incremento en el numero de unidades funcionales.
  • Ejecución fuera de orden.
  • Técnicas para disminuir/ocultar latencias de memoria y los saltos de programa.

Aun así la utilización del procesador iba en caída y el volumen de trabajo de instrucciones no incrementaba en proporción al ancho de instrucciones.

La causa mayor es la falta de paralelismo a nivel de instrucciones en ejecuciones individuales. Por ello la solución debía ser mas general que hacer una cache más inteligente o un predecir los saltos de forma más precisa.

Se necesitaba una unidad de procesamiento mas manejable: La hebra.

[1]

Contenido

Hebras

En sistemas operativos una hebra, hilo o thread, se puede considerar como un fragmento de programa o instrucciones que corresponde a la unidad de procesamiento más pequeña que puede ser planificada. Las hebras son un mecanismo que nos permite hacer mas de un procesamiento a la vez de manera concurrida, las cuales se ejecutan de forma independiente. En un sistema operativo multitarea, la CPU se reparte entre cada programa a ejecutar. Análogamente, con sistemas multithread (multihilo) la CPU se reparte entre todos los threads a ejecutar en cada momento.

Conceptualmente, una hebra existe dentro de un proceso. Cuando se hace una llamada a un programa, se crea un nuevo proceso y en este proceso se crea al menos una hebra que corre el programa secuencialmente. Estas hebras pueden crear otras hebras adicionales, todas estas ejecutan el mismo programa en un mismo proceso, pero cada hebra puede ejecutar una parte distinta del programa, en cualquier momento dado. Multiples hebras pueden exisistir dentro del mismo proceso y pueden compartir su memoria, mientras que diferentes procesos no comparten esos recursos.

El principal objetivo del uso de hebras es mejorar el rendimiento del sistema, el uso de hebras se usa a menudo para reducir el tiempo de respuesta de una aplicación, el mejor diseño de una aplicación concurrente puede permitir que un programa complete una mayor cantidad de trabajo en el mismo período de tiempo.

Al igual que los procesos, los hilos poseen un estado de ejecución y pueden sincronizarse entre ellos para evitar problemas de compartimiento de recursos, se debe ser cuidadosos al acceder a recursos compartidos.

Componentes

Entre los componente de las hebras encontramos:

  • Contador de Programa (P.C.).

Necesario pues así como los procesos simples, las hebras también pueden ser suspendidas y reanudadas en su ejecución.

  • Registros.

Cuando la hebra es suspendida se requiere tener guardado los datos de esta, por ello son necesarios.

  • Pila (Stack).

Al ser una entidad de procesamiento, el stack, así como el P.C. son primordiales para la ejecución de las instrucciones.

  • Estado (State).

Su finalidad en las hebras es análoga a la de los procesos, pues el estado de ejecución puede ser "running", "ready" o "blocked".

[2]

Hebras en Sistemas Operativos

POSIX (IEEE 1003.1c) es el acrónimo de Portable Operating System Interface y la X viene de UNIX, un estándar de creación y sincronización de hebras. La API especifica el comportamiento de la biblioteca de hebras, común en el sistema operativo UNIX. Persiguen generalizar las interfaces de los sistemas operativos para que una misma aplicación pueda ejecutarse en distintas plataformas. Estos estándares surgieron de un proyecto de normalización de las API y describen un conjunto de interfaces de aplicación adaptables a una gran variedad de implementaciones de sistemas operativos.

  • Hebras en Windows: Implementados con el modelo uno-a-uno, cada hilo contiene un id de la hebra, el conjunto de registros, stacks de usuario y de kernel por separado y un área privada de almacenamiento de datos. Windows no soporta nativamente pthreads, sin embargo existe Pthreads-w32 que busca proveer una implementación de forma portable.
  • Hebras en Linux: Linux se refiere a las hebras como tareas. La creación de tareas se realiza a través de la llamada al sistema clone() y permite que una tarea hijo comparta el espacio de memoria de la tarea padre. Implementaciones de esta API estan disponibles en sistemas operativos tales como FreeBSD, NetBSD, OpenBSD, GNU/Linux, Mac OS X y Solaris.

Modelos

Manejo de hebras en espacio de usuario (Modelo Muchos a Uno)

La hebras son manejadas en espacio de usuario, y el sistema operativo no es consciente de ellas, por ello asigna solo una hebra de kernel al proceso, analoga a la tabla de procesos. Esto permite gran velocidad, pero con el peligro de que el sistema operativo bloquee el proceso completo si una hebra se bloquea y no entrega el control a otra. Al no existir interrupción de reloj no se podrá ejecutar otra hebra hasta que alguna deje de procesar voluntariamente. La conmutación entre hebras es varios órdenes de magnitud más rápida que la de procesos.

Manejo de hebras en espacio de kernel (Modelo Uno a Uno)

El sistema operativo controla la hebras y por ende asigna una hebra de kernel a cada hebra por proceso, esto permite que el S.O. puede cambiar el control entre hebras y evitar el bloqueo de procesos, esto requiere una tabla de hebras analoga a la tabla de procesos y no se necesita sistema de gestión o tablas de hebras dentro de cada proceso. La gestión de hebras se hace a través de llamadas al sistema, aunque implica un mayor coste de operación

Modelo Muchos a Muchos e híbridos

Aquí existen variados modelos que buscan combinar las ventajas de cada modelo anterior reduciendo sus desventajas. Utiliza hebras de tipo usuario pero multiplexadas sobre hebras tipo núcleo, donde estas ejecutan un conjunto de hebras que turnan su utilizacion

Modeloshebras.jpg

[3]

Diferencias entre Hebras y Procesos

Un proceso se puede ver como una entidad que permite agrupar recursos de ejecución, mientras que las hebras son entidades planificadas para ejecución en la CPU. Básicamente lo que agregan las hebras a los procesos, es poder realizar ejecución múltiple en el mismo entorno de procesamiento. [4]

Ventajas

  • Menor tiempo de creacion de una hebra que el de un proceso, porque la nueva hebra creada usa los recursos del proceso padre.
  • Menor tiempo para terminar una hebra que un proceso.
  • Menor tiempo para cambiar entre ejecuccion de Hebras, debido a que se encuentran en los mismos espacios de memoria.
  • Menor tiempo de comunicación, ya que igualmente comaparte los mismos recursos, los datos estan inmediatamente habilitados entre hebras.

Diferencias

  • Los procesos son tipicamente independientes, mientras que las hebras existen en el espacio de los procesos.
  • Procesos tienen direcciones de memorias diferentes y las hebras comparte las direcciones de memoria de su proceso.
  • Procesos interactuan solo a travez de Modelos de comunicación inter-procesos del sistema.

Historia del desarrollo de las hebras

Referencias

[5]

  1. http://www.cs.washington.edu/education/courses/csep548/06au/lectures/mtStudent.pdf
  2. Tanenbaum, Andrew S. Operating Systems: Desing and Implementation/ Andrew S. Tanenbaum, Albert S. Woodhull. --3rd ed. Page 66
  3. Tanenbaum, Andrew S. Operating Systems: Desing and Implementation/ Andrew S. Tanenbaum, Albert S. Woodhull. --3rd ed. Page 66-67
  4. Tanenbaum, Andrew S. Operating Systems: Desing and Implementation/ Andrew S. Tanenbaum, Albert S. Woodhull. --3rd ed. Page 65
  5. http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf
Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas