Hebras
Enviado por FRANKLIN AROLDO LEMUS JIMENEZ • 4 de Octubre de 2018 • Trabajo • 2.983 Palabras (12 Páginas) • 331 Visitas
Introducción
Una hebra es una unidad básica de utilización de la CPU, el cual es compuesto por un ID de hebra, un controlador de programa, un conjunto de registros y una pila. Las hebras pueden compartir datos con otras hebras siempre y cuando pertenezcan al mismo proceso los cuales pueden ser de las secciones de código, sección de datos y otros recursos del sistema operativo, como los archivos abierto y señales.
Un proceso tradicional, también llamado proceso pesado, es un proceso de una sola hebra, por el contrario, si un proceso tiene múltiples hebras de control, se puede realizar más de una tarea a la vez.
Hebras
La mayoría de paquetes de software que se ejecutan en las computadoras modernas de escritorio son multihebra, en los cuales una aplicación se implementa como un proceso propio con varias hebras de control. Por ejemplo, un explorador web puede tener una hebra para mostrar imágenes o texto, mientras otra hebra recupera datos de la red.
Así mismo una aplicación puede tener que realizar varias tareas similares por ejemplo un servidor web acepta solicitudes de los clientes que piden acceso a páginas web, imágenes, sonidos, etc., al mismo tiempo puede ser sometido a una gran carga, ya que puede tener varios o hasta miles de clientes accediendo a él de forma concurrente.
Un servidor web es un claro ejemplo de lo fundamental que son las hebras ya que de no contar con procesos multihebras solo podría dar acceso a un cliente a la vez.
[pic 1]
La hebra tiene un papel muy importante en los sistemas de llamada a procedimientos remotos (RPC) ya que normalmente los servidores son multihebra, cuando un servidor recibe un mensaje, sirve el mensaje usando una hebra específica, esto le permite al servidor dar servicio a varias solicitudes al mismo tiempo.
Hoy en día la mayoría de los kernel de sistemas operativos son multihebra; hay varias hebras operando en el kernel y cada hebra realiza una tarea específica, tal como gestionar dispositivos o tratar interrupciones. Por ejemplo, Solaris crea un conjunto de hebras en el kernel específicamente para el tratamiento de interrupciones; Linux utiliza una hebra del kernel para gestionar la cantidad de memoria libre del sistema.
Al designar una tarea en específico a una sola hebra ayuda al sistema a realizar diversas operaciones de forma simultánea ya que cuentan con varias o muchas hebras que realizar tareas diferentes y puede operar al mismo tiempo.
Modelo multihebra
El soporte para hebras puede proporcionarse en el nivel de usuario (para las hebras de usuario) o por parte del kernel (para las hebras del kernel). El soporte para las hebras de usuario se proporciona por encima del kernel y las hebras se gestionan sin soporte del mismo, mientras que el sistema operativo (S.O.) soporta y gestiona directamente las hebras del kernel. Casi todos los S.O. actuales soportan las hebras de kernel.
En último término, debe existir una relación entre las hebras de usuario y las del kernel.
Modelo muchos a uno
Este asigna múltiples hebras del nivel de usuario a una hebra del kernel. La gestión de hebra se hace mediante la biblioteca de hebras en el espacio de usuario, por lo que resulta eficiente, el proceso completo se bloquea si una hebra realiza una llamada bloqueante al sistema. También dado que sólo una hebra Puede acceder al kernel y cada vez, no podrán.
[pic 2]
Modelo uno a uno
Asigna cada hebra de usuario a una hebra de kernel. Proporciona una mayor concurrencia que el anterior modelo, permitiendo que se ejecute otra hebra mientras que una hebra hace una llamada bloqueante al sistema; permite que se ejecuten múltiples hebras en paralelo sobre varios procesadores. El único inconveniente de este modelo es que crear una hebra de usuario requiere crear la correspondiente hebra del kernel por la carga de trabajo administrativa para la creación de hebras kernel.
[pic 3]
Modelo muchos a muchos
Multiplica muchas hebras de usuario sobre un número menor o igual de hebras del kernel. El número de hebras del kernel puede ser específico de una determinada aplicación o de una determinada maquina pueden asignarse más hebras del kernel a una aplicación a un sistema multiprocesador que en uno de un solo procesador. Mientras que el modelo muchos a uno permiten al desarrollador crear tantas hebras de usuario como desee, no se consigue una concurrencia real, ya que que el kernel sólo puede planificar la ejecución de una hebra cada vez. El modelo uno a uno permite una mayor concurrencia, pero el desarrollador debe tener cuidado de no crear demasiadas hebras dentro de una aplicación y en algunos casos el número de hebras qué puede crear estará limitado. El modelo mucho a muchos no sufre ningún de estos inconvenientes los desarrolladores pueden crear tantas hebras de usuario como sean necesarias y las correspondientes hebras del kernel puede ejecutarse en paralelo en un multiprocesador.
[pic 4]
Biblioteca de Hebras
Una Biblioteca de Hebras proporciona al programador una API para crear y gestionar hebras. Existen 2 formas principales de implementar una biblioteca de hebras:
- Proporciona una biblioteca enteramente en el espacio del usuario, sin ningún soporte del kernel. Todas las estructuras de datos y el código de la biblioteca se encuentran en el espacio del usuario.
- Implementa una biblioteca en el nivel del kernel, soportada directamente por el sistema operativo. En este caso el código y las estructuras de datos de la biblioteca se encuentran en el espacio del kernel.
Las 3 principales bibliotecas de hebras actualmente en uso son:
- POSIX Pthreads
Puede proporcionarse como biblioteca de nivel usuario o nivel cliente.
- Win32
Es una biblioteca de nivel kernel disponible en los sistemas Windows.
- Java Pthreads
Permite crear y gestionar directamente hebras con programa java.
Pthreads
Se basa en el estándar POSIX (IEEE 1002.1c) que define una API para a creación y sincronización de hebras. Se trata de una especificación para el comportamiento de las hebras, no de una implementación.
...