You are on page 1of 15

INSTITUTO TECNOLOGICO DE COLIMA

Hilos
Profesor: Pedro Fletes Gudiño

Alumno:

José Alejandres Daniel Alegría Samuel Montiel Erick Sandoval

Materia: Sistemas Operativos
Hilos

 Multihilo cooperativo: depende del mismo hilo abandonar el control cuando llega a un punto de detención. la ejecución del código representada por la pila del usuario y la parte del bloque de control del proceso que hace referencia al estado del procesador y del proceso. Esto se refiere a la parte dinámica del proceso. soportada nativamente por los Intel en el Pentium Pro y los Pentium II y III en la versión doméstica. frente a la parte más estática. La aparición de los hilos viene justificada desde dos pilares básicos: facilitar la sincronización entre procesos y mejorar la eficiencia en la alternancia de procesos en el procesador. causando un fenómeno conocido como inversión de prioridades y otros problemas. Esta característica es utilizada por el gran público. Ventajas . como es la el resto del bloque de control del proceso y el código mismo. y posteriormente reintroducido en el Pentium 4. bajo el nombre de HyperThreading.  El soporte de hardware para multihilo se encuentra disponible desde hace mucho tiempo. La desventaja de esto es que el sistema puede hacer un cambio de contexto en un momento inadecuado. eliminada posteriormente en los Celeron.Definición Un hilo se puede definir como la traza de ejecución de un proceso. al descubrirse que podía ser desbloqueado. Modelos de Hilos Los sistemas operativos generalmente implementan hilos de dos maneras: Multihilo apropiativo: permite al sistema operativo determinar cuándo debe haber un cambio de contexto. lo cual puede traer problemas cuando el hilo espera la disponibilidad de un recurso.

en la Figura 1 se muestran diferentes configuraciones. resulta más económico crear hilos nuevos y alternarlos en el procesador que hacer lo mismo con procesos. Como los hilos comparten los recursos del proceso al que pertenecen.Respuesta: Una aplicación multihilo puede continuar ejecutándose incluso si una parte de ella está bloqueada o está realizando una tarea larga. Economía: Reservar memoria y recursos en la creación de los procesos es una tarea costosa. Esto permite que la aplicación pueda tener distintos hilos de ejecución con la misma memoria. y realizar un cambio de contexto entre procesos es 5 veces más lento que hacerlo entre hilos. Figura 1. Para ilustrar las posibilidades de implementación de los hilos. Compartición de recursos: Los hilos por defecto comparten la memoria y otros recursos del proceso al que pertenecen por lo que no hay que utilizar ningún mecanismo especial de compartición entre procesos. Aunque no existen medidas empíricas definitivas.1 Hilos Nivel de Usuario . Implementación Existen dos grandes categorías para la implementación de los hilos: hilos a nivel de usuario (HU) e hilos a nivel del núcleo (HN). en Solaris crear un proceso es unas 30 veces más lento que crear un hilo. Además los hilos aumentan la eficiencia de al comunicación entre programas en ejecución ya que pueden comunicarse sin la intervención del núcleo del sistema operativo. Utilización de arquitecturas multiprocesador: Los procesos multihilo pueden aprovechar fácilmente una arquitectura multiprocesador ya que cada hilo podría ejecutarse en un procesador distinto. incrementando de este modo el nivel de respuesta frente al usuario.

También existen desventajas: 1. la llamada al sistema de un hilo puede bloquear a todos los demás hilos del proceso. 3. 2. Las ventajas de utilizar HU en lugar de HN son las siguientes: 1. pero la biblioteca de hilos crea y planifica los hilos en el tiempo de ejecución que le toque al proceso subyacente. ´ Esta contiene el código para crear. Los HU se pueden ejecutar sobre cualquier sistema operativo. Se puede realizar una planificación a medida de la aplicación sin afectar a la planificación subyacente del sistema operativo. El intercambio entre dos hilos no necesita los privilegios del núcleo. 2. . para intercambiar mensajes y datos entre hilos y para planificar la ejecución de los hilos salvando y restaurando el contexto de los mismos. lo que evita la sobrecarga de los cambios de modo de ejecución. Resulta posible programar cualquier aplicación como multihilo mediante una biblioteca de hilos. Ejemplos de bibliotecas de hilos pueden ser la MV Java. Como la mayoría de las llamadas al sistema producen bloqueo en el proceso que las invoca. la aplicación se ejecuta bajo la forma de un sólo proceso. POSIX Pthreads. No puede aprovechar las ventajas de un entorno multiprocesador. Desde el punto de vista del núcleo. todo el trabajo de gestión de hilos lo realiza la aplicación mientras que el núcleo no es consciente de ello.En una aplicación HU pura. destruir y sincronizar hilos. Mach C-threads y Solaris threads y Win32. ya que el proceso está asignado a un ´único procesador.

donde las llamadas bloqueadoras van precedidas por otras no bloqueadoras.Hilos a Nivel de Usuario Existen formas de intentar eliminar estas desventajas. otro hilo llama a una función de recubrimiento que comprueba si el dispositivo de E/S se encuentra ocupado o libre antes de realizar la llamada al sistema. Se puede escribir la aplicación como varios procesos en lugar de múltiples hilos. . pero entonces perdemos las ventajas de los hilos relativas a la eficiencia. Por ejemplo. antes de que un hilo llame directamente a una operación de E/S. La otra técnica es la llamada recubrimiento.

. Un ejemplo de este caso es el sistema operativo W2000. Tabla de relación de Hilos y procesos El núcleo mantiene la información de contexto del proceso como un todo y la de cada hilo dentro del proceso. todavía resulte más lento que el HU.Hilos a Nivel de Núcleo En una aplicación con hilos a nivel de núcleo todo el trabajo de gestión de hilos lo realiza el núcleo. Otra ventaja es que las mismas funciones del núcleo pueden ser multi-hilo. Esto soluciona los principales inconvenientes de la implementación HU. si se bloquea un hilo del proceso los demás siguen pudiendo ejecutarse. Eso sugiere que aunque el enfoque HN sea más rápido que el basado en mono-hilo. Además. Se pueden planificar simultáneamente múltiples hilos del mismo proceso en un entorno multiprocesador. La principal desventaja es que el paso del control de un hilo a otro dentro del mismo proceso necesita un cambio de modo de ejecución a modo núcleo. El núcleo realiza la planificación en función de los hilos.

Hilos en Unix. Computación Multihilo A continuación se van a presentar tres casos de estudio. ya que ´este también se encuentra en el estado Ejecutable. Windows y Linux JVM Todos los programas Java comprenden al menos un hilo de control. Con una buena configuración entre HU y HN. Además Java permite la creación y la gestión de otros hilos en el programa. existen otros hilos asíncronos que la JVM utiliza para realizar tareas del sistema como la gestión de la memoria o el control gráfico. los hilos de una aplicación se pueden ejecutar en paralelo en un entorno multiprocesador. este enfoque puede combinar las ventajas de ambos modos minimizando sus inconvenientes. En este tipo de sistemas la creación de hilos así como la mayor parte de la planificación y sincronización de los hilos de una aplicación se realiza en el espacio del usuario. En cada caso se va a analizar tanto los aspectos de representación de los hilos como la planificación de los mismos en relación con los procesos que los soportan. En ese momento el hilo pasa al estado Ejecutable pudiendo ser elegido para ser ejecutado. Los múltiples HU se pueden asociar con varios HN a través de los llamados procesos ligeros o lightweight process (LWP). Ejecutable: la invocación del método start() reserva memoria para el nuevo hilo e invoca al método run() sobre el objeto hilo. Estados de los Hilos Un hilo Java puede estar en cualquiera de los siguientes cuatro estados: Nuevo: un hilo estará en este estado cuando se cree con la sentencia new. . de núcleo y una combinación de ambos. Un caso de hilo del sistema lo constituye el recogedor de basura. y las llamadas al sistema bloqueadoras no bloquearan todo el proceso. JVM no distingue entre un hilo dispuesto a ser ejecutado del hilo que está en ejecución en un instante dado. Además del programa Java conteniendo varios hilos.Implementaciones Híbridas Algunos sistemas operativos como Solaris combinan los enfoques HU y HN. Así. cada uno como un ejemplo de utilización de los hilos de nivel de usuario.

la estructura original de los procesos y de los servicios que brinda el núcleo es relativamente simple y de propósito general. de forma que el procesador puede pasar de un hilo a otro.Bloqueado: los hilos pasan a este estado cuando realizan una operación bloqueante. que dispone de sus propios recursos. Un hilo es una unidad de trabajo que se puede expedir para su ejecución secuencial y que es interrumpible. W2K. Las características más importantes de los procesos en W2K son las siguientes: Los procesos se implementan como objetos. tales como memoria y archivos. Un proceso es una entidad correspondiente a un trabajo de usuario o a una aplicación. En la versión 2 de Java. . Un proceso ejecutable puede tener un hilo o más. Los objetos proceso e hilo tienen capacidades de sincronización. Terminado: un hilo se pasa a este estado cuando termina normalmente o cuando se invoca al método stop() sobre ´el. se desaconseja utilizar los métodos suspend(). tal como una operación de E/S o la invocación a ciertos métodos como sleep() (que provoca que el hilo se suspenda por un tiempo determinado) o suspend() (que suspende al hilo hasta que la invocación del método resume() haga que el hilo bloqueado vuelva a ser ejecutable). y porque se pueden producir estados inconsistentes en el tercer caso. Windows 2000 En Windows 2000. resume() y stop() pues pueden conducir a bloqueos mutuos en el caso de los dos primeros métodos.

se pueden asignar varios hilos del mismo proceso a distintos procesadores si se está en un entorno multiprocesador. . Atributos de procesos e hilos Planificación de Hilos Un hilo puede ser en alguno de los siguientes estados: Listo: el hilo puede ser elegido para su ejecución. W2K soporta concurrencia entre procesos basándose en que los hilos de esos procesos se pueden ejecutar concurrentemente. Uno de los atributos del objeto hilo es el contexto. Además. Cada proceso está representado por un objeto con una serie de atributos y de acciones o servicios. y algunos de sus atributos se parecen a los del proceso del que depende. Los hilos también están representados por objetos. que permite que los hilos puedan ser suspendidos y reanudados. El proceso almacena el apuntador a la lista de bloques de memoria a él asignados así como una tabla de objetos con los que está relacionado. entre ellos los hilos que soporta.Estructura de los Procesos e Hilos La forma en que un proceso se refiere a los recursos que controla es mediante referencias. por lo que sus valores suelen ser obtenidos a partir de ellos.

se realiza una espera voluntaria de sincronización o alguien suspende al hilo. la pila y el bloque de control de proceso.Standby: el hilo ha sido elegido para ser el siguiente en ejecutarse en el procesador. Procesos ligeros: un proceso ligero (lightweight process. Para Solaris el proceso sigue el mismo modelo que los sistemas UNIX convencionales. El núcleo . Espera: un hilo pasa a este estado cuando se bloquea por un suceso (E/S). Ejecución: el hilo está siendo ejecutado. incluyendo el espacio de direcciones de usuario. Solaris considera tres tipos de hilos distintos: Hilos a nivel de usuario: se implementan en el espacio de direcciones de un proceso por medio de la biblioteca de hilos y son invisibles para el sistema operativo. Cada LWP soporta uno o más HU y los hace corresponder con un HN. Terminado: un hilo llega a este estado cuando termina normalmente o cuando su proceso padre ha terminado. LWP) es una correspondencia entre un hilo a nivel de usuario y un hilo a nivel del núcleo. Respecto a los hilos. Diagrama de estados de hilos en W2K Solaris Solaris implementa una arquitectura de hilos multinivel que aporta una gran flexibilidad. Transición: después de una espera el hilo pasa a este estado si está listo para ejecutar pero alguno de sus recursos no está disponible aún.

Esta configuración resultara útil en aplicaciones que pueden programarse mejor por métodos concurrentes aunque no necesiten la ejecución de múltiples hilos en paralelo.planifica los LWP independientemente y pueden ejecutarse en paralelo en entornos multiprocesador. En la siguiente figura se muestra la arquitectura de hilos multinivel de Solaris. A su vez. donde un único LWP soporta a todos los HUs. El proceso 3 hace corresponder a múltiples HUs sobre un número menor o igual de LWPs. Esto permite que la aplicación especifique el grado de paralelismo que soportara a nivel de núcleo. cada LWP está ligado a un único hilo del núcleo cuya estructura de datos se mantiene dentro del espacio de direcciones del núcleo. lo que equivale al concepto de proceso UNIX clásico. El proceso 2 responde a una estrategia HU pura. Hay que observar que existe exactamente un hilo el núcleo por cada LWP. Arquitectura multihilo de Solaris El proceso 1 está formado por un único HU ligado a un único LWP. Esta configuración será útil cuando la aplicación no necesite la concurrencia dentro del proceso. por lo que sólo uno de ellos puede ejecutarse en cada instante. Hilos a nivel de núcleo: son las entidades básicas de planificación en cada uno de los procesadores del sistema. de modo que las estructuras de datos LWP están dentro de los espacios de direcciones de los procesos. Un LWP es visible para la aplicación dentro del proceso. .

Estados de LWP e HU en Solaris. Un hilo no ligado puede estar en uno de los cuatro estados siguientes: ejecutable. aquellos que comparten varios LWPs. lo que permite conseguir un tiempo de respuesta apropiado para aplicaciones de tiempo real.El proceso 4 tiene sus HUs asociados permanentemente a los LWPs uno a uno. Estados de los Hilos Los estados de los HUs de usuario y LWPs van a depender de si el HU está o no ligado al LWP. El proceso 5 muestra tanto una correspondencia de múltiples HUs sobre múltiples LWPs como la unión exclusiva de un HU con un LWP. Esto permite que el paralelismo a nivel de núcleo sea accesible para la aplicación. Consideremos primero el caso de los hilos no ligados. activo. Un HU en el estado activo está asignado a un LWP que se ejecuta mientras el HN subyacente se ejecute. Un hilo puede dejar el estado activo por varias razones: . Resulta útil cuando uno de los hilos tiene a bloquearse con frecuencia. dormido o parado. estando además ese LWP ligado a un procesador concreto.

. Procesos ligeros: conjunto de registros del usuario. pasando a ejecutable. puede suspender a un hilo haciendo que pase al estado de parado. El sistema pasa el hilo al estado de dormido. Estructura de un proceso en Solaris. la prioridad. Si no encuentra el hilo adecuado seguirá activo. el conjunto de registros del usuario. El hilo permanecerá en ese estado hasta que el otro hilo realice una petición de continuación. la pila y la referencia al hilo del núcleo que lo soporta. Apropiación: cuando un hilo de mayor prioridad pasa a ejecutable expulsa al que está en ejecución para ocupar su lugar asociándose al LWP y ejecutándose.Sincronización: el hilo utiliza una primitiva de sincronización con otros hilos. la pila y la prioridad. Cesión: un hilo en ejecución puede invocar a la función thr_yield() para ver si existe otro hilo ejecutable con la misma prioridad que él. Estructura de los Hilos Las estructuras que soportan los hilos en Solaris son las siguientes: Hilos de usuario: identificador del hilo. en cuyo caso le cederá el LWP. incluido ´el mismo. Suspensión: cualquier hilo.

las siguientes conclusiones: Los hilos surgen al disociar las características de propiedad de los recursos de la de ejecución de código que los procesos mantenían bajo una misma identidad. dado el incremento en el número de implantaciones que se está dando. Sin embargo.Hilos del núcleo: los registros del núcleo. El único problema es que Linux no considera los hilos como tales. gestores de señales o la memoria virtual. e información sobre la prioridad y la planificación. Se han descrito los estados posibles de los hilos como ejecución. Un nuevo proceso puede ser clonado para que comparta los recursos del actual. Linux Para analizar y completar el estudio sobre el modo en que los principales sistemas operativos abordan el tema de los hilos habrá que estudiar el caso del sistema operativo Linux. basándose en el criterio de dónde se realiza la gestión de los hilos. Windows 2000 y Solaris. Conclusiones En esta lección se ha presentado y analizado el concepto de hilo partiendo del concepto de proceso destacando. no se manejan estructuras de datos para los hilos diferentes de las de los procesos. listo y bloqueado y se han analizado las transiciones entre ellos. En Linux se crea un nuevo proceso copiando los atributos del proceso actual. del mismo proceso. A partir de estos dos tipos de hilos se pueden tener tres casos de sistemas: hilos a nivel de usuario. entre otras. resultando de . Se han presentado las principales características de la gestión de hilos en tres casos distintos: la máquina virtual Java. Este tipo de sistemas facilita tanto la sincronización entre procesos como la alternancia de ´estos en el procesador. tales como archivos. Cuando dos procesos comparten la memoria. por lo que se puede argumentar que Linux no hace diferencias entre hilos y procesos. Los sistemas multihilo son aquellos que pueden soportar la existencia de varios hilos por proceso. Se han distinguido entre dos tipos de hilos: los de usuario y los del núcleo. operan en efecto como hilos dentro del mismo espacio. En cada caso se han descrito las ventajas e inconvenientes de su utilización. un apuntador al LWP. hilos a nivel del núcleo y sistemas mixtos.

este análisis que los hilos se implementan los distintos sistemas reales de muy diversas maneras. .