Hilos en el sistema operativo

Durante el estudio de la arquitectura de computadores, los multiprocesadores tienen una función específica y esencial en cualquier escenario, permiten realizar muchas funciones que de repente, el programador desconoce, a continuación, detallaremos algunos elementos que no pueden ser obviados por ninguna persona en proceso de aprendizaje.

¿Qué es la programación multihilo?

            La programación hilo es la unidad básica de utilización del procesador y pese por un ID de hilo, un contador de programa, un conjunto de registros y una pila. Comparte con los otros hilos que pertenecen al mismo proceso el código, los datos y otros recursos del sistema operativo, como los archivos abiertos y las señales. Un proceso tradicional posee un único hilo de control. Si, por el contrario, un proceso posee múltiples hilos de control, puede realizar más de una tarea a la vez.                  Muchos de los paquetes de software que se ejecutan en los ordenadores modernos son multihilo. Normalmente, una aplicación se implementa como un proceso con varios hilos de control. Por ejemplo, un navegador de internet puede tener un hilo para mostrar las imágenes o el texto mientras otro hilo recupera los datos de la red. Un procesador de textos puede tener un hilo para mostrar los gráficos, otro hilo para reaccionar a las pulsaciones del teclado y otro hilo para el corredor ortográfico y gramatical que se ejecuta en segundo plano.                          En determinadas situaciones, una misma aplicación tiene que llevar a cabo varias tareas similares. El ejemplo más claro es un servidor que acepta solicitudes de los clientes que piden acceder a su información (Servidores Web, bases de datos, etc.). Un servidor sometido a una gran carga de trabajo puede tener muchos clientes accediendo de forma concurrente a él. Si el servidor funcionase como un proceso tradicional de un único hilo, sólo podría dar servicio a un cliente cada vez y el tiempo de espera para que la solicitud de un cliente fuera atendida podría ser enorme.

Ventajas de los multihilos

·         La capacidad de respuesta: El uso de múltiples hilos en una misma aplicación interactiva permite que un programa continúe con su ejecución incluso cuando una parte esté bloqueada o realizando una operación costosa, lo que incrementa la capacidad de respuesta ante el usuario.

·         Compartición de los recursos: Por omisión, los hilos comparten memoria y los recursos del proceso al que pertenecen. La ventaja de compartir el código y los datos radica en que una aplicación tenga varios hilos de actividad distintos dentro del mismo espacio de direcciones.

·         Economía: La asignación de memoria y recursos para la creación de los procesos es más bien costosa. Dado que los hilos comparten los recursos del proceso al que pertenecen, es más fácil crear y realizar cambios de contexto entre unos y otros hilos. Generalmente, se consume mucho más tiempo en la creación y gestión de los procesos que de los hilos.

·         El uso en arquitecturas multiprocesador: Las ventajas de usar el modelo multihilo puede verse muy incrementadas en una arquitectura multiprocesador, donde los hilos pueden ser ejecutados de forma totalmente paralela en los diferentes procesadores. Un proceso como un único hilo sólo puede ejecutarse en un procesador, independientemente de los que tengamos disponibles.

Los modelos multihilo

            Desde el punto de vista práctico, el soporte para los hilos puede ser proporcionado en el nivel de usuario (Para los hilos de usuario) o por parte del kernel (Para los hilos del kernel), sin embargo, es imprescindible que exista una relación entre los hilos de usuario y los de kernel. A continuación, veremos distintos modelos de cómo implementar esta forma.

·         Modelo muchos a uno: En este modelo se asignan múltiples hilos del nivel de usuario a un hilo del kernel. La gestión de los hilos se realiza a través de la biblioteca de hilos en el espacio de usuario, por lo que resulta eficiente, bloqueándose el proceso completo si un hilo realiza una llamada bloqueando al sistema. Por otro lado, debido a que un único hilo puede acceder al kernel a la vez, no se podrán ejecutar varios hilos de forma paralela sobre múltiples procesadores.

·         Modelo uno a uno: En el modelo uno a uno se asigna cada hilo de usuario a un hilo del kernel. Este modelo proporciona una mayor concurrencia que el modelo proporciona una mayor concurrencia que el modelo anterior, permitiendo la ejecución de otros hilos mientras un hilo realiza una llamada bloqueante al sistema; también permite la ejecución de múltiples hilos en paralelo, sobre varios procesadores. El único inconveniente es que la creación de cada hilo de usuario requiere la correspondiente creación de un hilo del kernel. Dado que la carga de trabajo para la creación de hilos del kernel puede influir en el rendimiento de una aplicación, la mayoría de las implementaciones de este modelo limitan el número de hilos soportado por el sistema.

·         Modelo muchos a muchos: Aquí se multiplexan muchos hilos de usuario sobre un número menor o igual de hilos del kernel. El número de hilos del kernel puede ser específico de una determinada aplicación o de un determinado equipo. Mientras que el modelo a muchos a uno le permite al programador crear tantos hilos de usuario como quiera, no se consigue una concurrencia real, ya que el kernel sólo puede unificar la ejecución de un único hilo a la vez. El modelo muchos a muchos no tienen ningún inconveniente y los programadores pueden crear tantos hilos de usuario como sean necesarios. Asimismo, cuando un hilo realiza una llamada bloqueante al sistema, el kernel puede planificar otro hilo para su ejecución.

·         Las bibliotecas de hilos: Proporciona al programador una API para crear y gestionar los hilos. Existen dos formas principales de implementar este modelo. El primer método consiste en proporcionar una biblioteca en el espacio de usuario, sin ningún soporte kernel. Todas las estructuras de datos y código de la biblioteca se encontrarán en el espacio de usuario, y esto implica que llamar a una función de biblioteca sea lo mismo que realizar una llamada a una función local en el espacio de usuario y no una llamada en el sistema. El segundo método consiste en implementar una biblioteca en el nivel del kernel, y que sea 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. Realizar una llamada a una función en la API de la biblioteca conlleva a que se produzca una llamada al sistema dirigida al kernel.

Referencias

Durán, Luis R. (28 de febrero de 2007). El gran libro del PC interno. (pp, 43, 44, 45, 46).

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.