PROCESOS E
HILOS
María Cristina Briceño.
Antonio Hernández
PROCESOS
Un proceso es una
instancia de un programa
en ejecución.
BCP: serie de atributos
utilizados por el SO para
identificar y controlar el
proceso.
Identificación del Proceso.
Información del estado del
procesador.
Información de control de
progresos.
Imagen del proceso:
programas, datos y pila.
Planificación de Procesos
Estados: Nuevo, Ejecución, Espera (listo para
ejecutar/bloqueado), y Terminado.
HILOS
Puede ser definido como la traza de
ejecución de un proceso.
Justificación: Facilita la
sincronización entre procesos y
mejora la eficiencia en la alternancia
de procesos en el procesador.
Multihilo: capacidad de un SO para
mantener varios hilos de ejecución.
Monohilo: un hilo en ejecución por
proceso.
MS-DOS: sistema monoproceso
monohilo.
UNIX: sistema multiproceso con un
único hilo por proceso.
JVM: sistema monoproceso multihilo.
W2000 y SOLARIS: SO multiproceso
multihilo.
Entorno Multihilo: unidad de
protección y asignación de recursos.
HILOS - Ventajas
Respuesta: Una aplicación multihilo puede continuar ejecutándose incluso si
una parte de ella esta bloqueada o esta realizando una tarea larga,
incrementando de este modo el nivel de respuesta frente al usuario.
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. Esto permite
que la aplicación pueda tener distintos hilos de ejecución con la misma
memoria. Además los hilos aumentan la eficiencia de la comunicación entre
programas en ejecución ya que pueden comunicarse sin la intervención del
núcleo del sistema operativo.
Economía: Reservar memoria y recursos en la creación de los procesos es
una tarea costosa. Como los hilos comparten los recursos del proceso al que
pertenecen, resulta mas económico crear hilos nuevos y alternarlos en el
procesador que hacer lo mismo con procesos. Aunque no existen medidas
empíricas definitivas, en Solaris crear un proceso es unas 30 veces mas lento
que crear un hilo, y realizar un cambio de contexto entre procesos es 5 veces
mas lento que hacerlo entre hilos.
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.
HILOS – Estados de un Hilo
Principales estados: Ejecución, Listo y Bloqueado.
Creación: cuando se crea un nuevo proceso normalmente también se crea un hilo para
ese proceso. El nuevo hilo tendrá su propio contexto y su propio espacio de pila, pasando
a la cola de listos.
Bloqueo: cuando un hilo necesita esperar por un suceso se bloquea (salvando sus
registros de usuario, el contador de programa y los punteros de pila).
Desbloqueo: cuando se produce el suceso por el que el hilo se bloqueo el hilo pasa a la
cola de listos.
Terminación: cuando un hilo finaliza se libera su contexto y sus pilas.
HILOS a nivel de Usuario (HU)
En una aplicación de este tipo, todo el trabajo de
gestión de hilos lo realiza la aplicación mientras que
el núcleo no es conciente de ello.
Biblioteca de hilos: contiene el código para crear,
destruir y sincronizar hilos, para intercambiar
mensajes y datos entre hilos y para planificar a
ejecución de hilos salvando y restaurando el
contexto de los mismos.
Bibliotecas: MV de Java, POSIX Pthreads, Mach C-
Threads, Solaris threads y Win32.
HILOS HU – Ventajas y
Desventajas
Ventajas:
El intercambio entre dos hilos no necesita los privilegios del
núcleo, lo que evita la sobrecarga de los cambios de modo de
ejecución.
Se puede realizar una planificación a medida de la aplicación sin
afectar a la planificación subyacente del sistema operativo.
Los HU se pueden ejecutar sobre cualquier sistema operativo.
Desventajas:
1. Como la mayoría de las llamadas al sistema producen
bloqueo en el proceso que las invoca, la llamada al sistema de
un hilo puede bloquear a todos los demás hilos del proceso.
2. No puede aprovechar las ventajas de un entorno
multiprocesador, ya que el proceso esta asignado a un único
procesador.
HILOS – Hilos a Nivel de
Núcleo (HN)
En una aplicación con hilos a nivel de núcleo todo el trabajo de gestión
de hilos lo realiza el núcleo. SO W2000.
Ventajas:
El núcleo mantiene la información de contexto del proceso como un
todo y la de cada hilo dentro del proceso.
El núcleo realiza la planificación en función de los hilos. Esto soluciona
los principales inconvenientes de la implementación HU. Se pueden
planificar simultáneamente múltiples hilos del mismo proceso en un
entorno multiprocesador. Además, si se bloquea un hilo del proceso los
demás siguen pudiendo ejecutarse.
Las mismas funciones del núcleo pueden ser multihilo.
Desventajas:
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. Eso sugiere que
aunque el enfoque HN sea mas rápido que el basado en monohilo,
todavía resulte mas lento que el HU.
RELACION ENTRE HILOS Y
PROCESOS
HILOS - JVM
Hilos de nivel de usuario utilizando una biblioteca, en el que el
soporte para la creación y la gestión de los hilos se da a nivel de
lenguaje.
Todos los programas Java comprenden al menos un hilo de
control.
Java permite la creación y la gestión de otros hilos en el
programa.
Además del programa Java conteniendo varios hilos, existen
otros hilos asíncronos que la JVM utiliza para realizar tareas del
sistema como la gestión de la memoria o el control grafico. Un
caso de hilo del sistema lo constituye el recogedor de basura.
HILOS JVM - Estados
Nuevo: un hilo estaría en este estado cuando se cree con la sentencia new.
Ejecutable: la invocación del método start() reserva memoria para el nuevo hilo
e invoca al método run() sobre el objeto hilo. En ese momento el hilo pasa al
estado Ejecutable pudiendo ser elegido para ser ejecutado. JVM no distingue
entre un hilo dispuesto a ser ejecutado del hilo que esta en ejecución en un
instante dado, ya que este también se encuentra en el estado Ejecutable.
Bloqueado: los hilos pasan a este estado cuando realizan una operación
bloqueante, 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).
Terminado: un hilo se pasa a este estado cuando termina normalmente o
cuando se invoca al método stop() sobre el. En la versión 2 de Java, se
desaconseja utilizar los métodos suspend(), resume() y stop() pues pueden
conducir a bloqueos mutuos en el caso de los dos primeros métodos, y porque
se pueden producir estados inconsistentes en el tercer caso.
HILOS JVM - Estados
HILOS – Windows 2000
Los procesos se implementan como objetos.
Un proceso ejecutable puede tener un hilo o más.
Los objetos proceso e hilo tienen capacidades de sincronización.
Un proceso es una entidad correspondiente a un trabajo de usuario o a una
aplicación, que dispone de sus propios recursos, tales como memoria y
archivos. Un hilo es una unidad de trabajo que se puede expedir para su
ejecución secuencial y que es interrumpible, de forma que el procesador puede
pasar de un hilo a otro.
La forma en que un proceso se refiere a los recursos que controla es mediante
referencias. El proceso almacena el apuntador a la lista de bloques de memoria
a el asignados así como una tabla de objetos con los que esta relacionado,
entre ellos los hilos que soporta. Cada proceso esta representado por un objeto
con una serie de atributos y de acciones o servicios. Los hilos también están
representados por objetos, y algunos de sus atributos se parecen a los del
proceso del que depende, por lo que sus valores suelen ser obtenidos a partir
de ellos. Uno de los atributos del objeto hilo es el contexto, que permite que los
hilos puedan ser suspendidos y reanudados.
W2K soporta concurrencia entre procesos basándose en que los hilos de esos
procesos se pueden ejecutar concurrentemente. Además, se pueden asignar
varios hilos del mismo proceso a distintos procesadores si se esta en un
entorno multiprocesador.
W2000 – Planificación de
HILOS
Listo: el hilo puede ser elegido para su ejecución.
Standby: el hilo ha sido elegido para ser el siguiente en ejecutarse en el procesador.
Ejecución: el hilo esta siendo ejecutado.
Espera: un hilo pasa a este estado cuando se bloquea por un suceso (E/S), se realiza una
espera voluntaria de sincronización o alguien suspende al hilo.
Transición: después de una espera el hilo pasa a este estado si esta listo para ejecutar
pero alguno de sus recursos no esta disponible aun.
Terminado: un hilo llega a este estado cuando termina normalmente o cuando su proceso
padre ha terminado.
HILOS - SOLARIS
Solaris implementa una arquitectura de hilos multinivel que aporta una
gran flexibilidad. Para Solaris el proceso sigue el mismo modelo que los
sistemas UNIX convencionales, incluyendo el espacio de direcciones
de usuario, la pila y el bloque de control de proceso.
TIPOS de hilos:
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.
Procesos ligeros: un proceso ligero (lightweight process, LWP) es una
correspondencia entre un hilo a nivel de usuario y un hilo a nivel del
núcleo. Cada LWP soporta uno o más HU y los hace corresponder con
un HN. El núcleo planifica los LWP independientemente y pueden
ejecutarse en paralelo en entornos multiprocesador.
Hilos a nivel de núcleo: son las entidades básicas de planificación en
cada uno de los procesadores del sistema.
Arquitectura de Hilos
Multinivel de SOLARIS
Arquitectura de Hilos
Multinivel de SOLARIS
El proceso 1 esta formado por un único HU ligado a un único LWP, lo que
equivale al concepto de proceso UNIX clásico. Esta configuración será útil
cuando la aplicación no necesite la concurrencia dentro del proceso.
El proceso 2 responde a una estrategia HU pura, donde un único LWP soporta
a todos los HUs, por lo que solo uno de ellos puede ejecutarse en cada
instante. Esta configuración resultaría útil en aplicaciones que pueden
programarse mejor por métodos concurrentes aunque no necesiten la ejecución
de múltiples hilos en paralelo.
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.
El proceso 4 tiene sus HUs asociados permanentemente a los LWPs uno a uno.
Esto permite que el paralelismo a nivel de núcleo sea accesible para la
aplicación. Resulta útil cuando uno de los hilos tiene a bloquearse con
frecuencia.
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, estando
además ese LWP ligado a un procesador concreto, lo que permite conseguir un
tiempo de respuesta apropiado para aplicaciones de tiempo real.
HILOS HU LIGADOS Y NO
LIGADOS
Un hilo de usuario ligado esta asociado
permanentemente a un LWP y solo ese HU puede
ejecutarse sobre ese LWP. Además existe la
posibilidad de dedicar un procesador a un único
LWP, con lo que se puede conseguir tiempos de
respuesta tan rápidos como para soportar
aplicaciones de tiempo real.
Los hilos de usuario no ligados no están asociados
permanentemente a un LWP, siendo multiplexados
entre el conjunto de LWPs disponibles para ese
proceso. Los hilos de usuario serán no ligados por
defecto.
ESTADOS DE LOS HILOS EN
SOLARIS
Los estados de los HUs de usuario y LWPs van a depender de si el HU esta o no ligado al
LWP. Consideremos primero el caso de los hilos no ligados, aquellos que comparten
varios LWPs.
Un hilo no ligado puede estar en uno de los cuatro estados siguientes: ejecutable, activo,
dormido o parado. Un HU en el estado activo esta asignado a un LWP que se ejecuta
mientras el HN subyacente se ejecute. Un hilo puede dejar el estado activo por varias
razones:
Sincronización: el hilo utiliza una primitiva de sincronización con otros hilos. El sistema pasa el hilo
al estado de dormido.
Suspensión: cualquier hilo, incluido el mismo, puede suspender a un hilo haciendo que pase al
estado de parado. El hilo permanecería en ese estado hasta que el otro hilo realice una petición de
continuación.
Apropiación: cuando un hilo de mayor prioridad pasa a ejecutable expulsa al que esta en ejecución
para ocupar su lugar asociándose al LWP y ejecutándose.
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 el, en cuyo caso le cedería el LWP, pasando a ejecutable. Si
no encuentra el hilo adecuado seguiría activo.
Cuando el hilo activo deja de serlo, la biblioteca de hilos selecciona a otro hilo no ligado
en estado ejecutable y lo asocia con el LWP recién liberado. Cualquier transición desde
estos estados devuelve al hilo al estado de ejecutable.
LWPs no ligados, se pueden ver como una descripción del estado activo de un HU, ya que
un HU solo tiene asociado un LWP cuando esta activo. Un hilo activo solo se ejecuta
cuando su LWP esta en estado de ejecución. Cuando un hilo realiza una llamada
bloqueante, el LWP pasa al estado de bloqueado, manteniéndose ligado al HU, por lo que
desde el punto de vista de la biblioteca de hilos el HU sigue activo.
ESTADOS DE LOS HILOS EN
SOLARIS
Estructuras en SOLARIS
Hilos de usuario: identificador del hilo, el conjunto de registros del usuario, la pila y la
prioridad.
Procesos ligeros: conjunto de registros del usuario, la prioridad, la pila y la referencia al
hilo del núcleo que lo soporta.
Hilos del núcleo: los registros del núcleo, un apuntador al LWP, e información sobre la
prioridad y la planificación.
Cada proceso en Solaris tiene la información clásica del bloque de control del proceso,
con un apuntador a los LWP asociados
LINUX
En Linux se crea un nuevo proceso copiando los
atributos del proceso actual.
Un nuevo proceso puede ser clonado para que
comparta los recursos del actual, tales como
archivos, gestores de señales o la memoria virtual.
Cuando dos procesos comparten la memoria,
operan en efecto como hilos dentro del mismo
espacio, del mismo proceso. Sin embargo, no se
manejan estructuras de datos para los hilos
diferentes de las de los procesos.
GRACIAS…!