INICIAMOS CON UN PROCESO PARA DEFINIR HEBRA O (HILO):
Unidad de propiedad de los recursos: el proceso incluye memoria (sección de código,
sección de datos) y otros recursos como: archivos abiertos, señales, ETC...
Unidad de expedición: sigue un camino de ejecución que puede ser intercalada con la
de otros procesos. (Contador de programa, conjunto de registros, espacio de pila, estado)
Estas dos características pueden ser tratadas de manera independiente por el S. O,
apareciendo el concepto de hebra o (hilos).
Una hebra (o proceso ligero) es la unidad básica de utilización de la CPU (unidad de
expedición). Consta de:
Contador de programa.
Conjunto de registros.
Espacio de pila
Estado
Una tarea es la unidad de propiedad de los recursos.
Sección de código.
Sección de datos.
Recursos del SO (archivos abiertos, señales,..).
Una hebra comparte con sus hebras pares una tarea.
Una Hebra posee:
Un estado de ejecución (Ejecución, Listo, etc.).
El contexto del procesador se salva cuando no está ejecutando.
Una pila de ejecución.
Almacenamiento estático para las variables locales.
Acceso a la memoria y a los recursos del proceso, compartidos con todos los hilos
del mismo.
Ventajas de las hebras:
Se obtiene un mayor rendimiento y un mejor servicio debido a :
Se reduce el tiempo de cambio de contexto, el tiempo de creación y el tiempo de
terminación.
En una tarea con múltiples hebras, mientras una hebra servidora está bloqueada y
esperando, una segunda hebra de la misma tarea puede ejecutarse (depende del
tipo de hebras)
La comunicación entre hebras de una misma tarea se realiza a través de la
memoria compartida (no necesitan utilizar los mecanismos del núcleo).
Las aplicaciones que necesitan compartir memoria se benefician de las hebras.
Funcionalidad de las hebras.
Al igual que los procesos las hebras o (hilos) poseen un estado de ejecución y pueden
sincronizarse.
Algunos estados de las hebras son: Ejecución, Lista y Bloqueada, operaciones
básicas relacionadas con el cambio de estado en hebras: Creación, Bloqueo, Desbloqueo,
Terminación y Sincronización entre hebras.
Ejemplo de estados de una hebra
TIPOS DE HEBRAS
Tipo usuarios
Ventajas del uso de las hebras tipo usuario frente a las de tipo núcleo:
Se evita la sobrecarga de cambios de modo, que sucede cada vez que se pasa el
control de una hebra a otra en sistemas que utilizan hebras núcleo.
Se puede tener una planificación para las hebras distinta a la planificación subyacente
del SO.
En un entorno multiprocesador, una aplicación multihebra no puede aprovechar la
ventajas de dicho entorno ya que el núcleo asigna un procesador a un proceso.
Tipo Enfoques híbridos
Implementan tanto hebras a nivel kernel como usuario (p. ej. Solaris 2).
La creación de hebras, y la mayor parte de la planificación y sincronización se realizan
en el espacio de usuario.
Las distintas hebras de una aplicación se asocian con varias hebras del núcleo (mismo
o menor número), el programador puede ajustar la asociación para obtener un mejor
resultado.
RELACION ENTRE TIPOS DE HEBRAS
Para poder gestionar hebras necesitamos estructuras de datos que las representen un
bloque de control de hebra ó (TCB).
Ejemplo para Windows
o Implementación de la API Win32.
o Cada proceso contiene una o más hebras.
o Emplea hebras tipo usuario y núcleo con relación 1:1.
o La biblioteca Fiber añade relaciones N: M entre hebras (opcional).
o Componentes de una hebra:
o Identificador, conjunto de registros, pilas de usuario y núcleo, área de
almacenamiento privada
TCB mínimo
Identificador de hebra (TID)
Puntero de instrucción (IP)
Puntero de pila (SP)
Estado (flags)
o Localización de las estructuras de datos de las hebras (cuadro Windows ):
Ejemplo para Linux
No distingue entre procesos y hebras: tarea (task).
Utiliza la llamada al sistema clone () para conseguir un efecto parecido a fork () pero
permite limitar los recursos compartidos.
Estructura de datos para representar tareas: task_struct.
Formada por punteros en lugar de datos para optimizar la compartición.
PARÁMETRO SIGNIFICADO
CLONE_FS Compartir sistema de ficheros
CLONE _VM Compartir memoria virtual
CLONE _SIGHAND Compartir manejadores de señales
CLONE FILES Compartir los ficheros abiertos
Top Related