Capítulo 4: Hilos: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts - 8 Edition
Capítulo 4: Hilos: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts - 8 Edition
Capítulo 4: Hilos: Silberschatz, Galvin and Gagne ©2009 Operating System Concepts - 8 Edition
hilos
Hilo: Un conjunto de
instrucciones
particulares que se
ejecutan, debido a una
opción elegida, con el
entorno de pila y
variables locales. Se dice
que un hilo es la unidad
de ejecución
Operating System Concepts – 8th Edition 4.2 Silberschatz, Galvin and Gagne
capítulo 4: hilos
Perspectiva
El viejo concepto de proceso supone que se trata de una
instancia de un programa en ejecución con un solo hilo de
control.
Modelos multihilos
Ahora, la mayoría de los sistemas operativos modernos
proporcionan características que permiten que un
proceso tenga múltiples hilos de control.
Biblioteca de hilos
Consideraciones sobre los hilos
Ejemplos de sistemas operativos
Hilos en Windows XP
Hilos en Linux
Operating System Concepts – 8th Edition 4.3 Silberschatz, Galvin and Gagne
Objetivos
Introducir la noción de un hilo (una unidad básica de
utilización de la CPU que constituye las bases de un sistema
de computación multihilos)
Operating System Concepts – 8th Edition 4.4 Silberschatz, Galvin and Gagne
Qué es un hilo?
Un hilo es la unidad básica de utilización de la cpu;
Comprende:
un número identificador único de hilo,
un contador del programa,
un conjunto de registro y
una pila.
Comparte con otros hilos que pertenecen al mismo proceso:
la sección de código,
la sección de datos y
otros recursos del sistema operativo:
como los archivos abiertos y
las señales.
Un proceso tradicional (un proceso pesado) tiene un solo hilo
de control.
Si un proceso tiene, por el contrario, múltiples hilos de
control, puede realizar más de una tarea al mismo tiempo.
Operating System Concepts – 8th Edition 4.5 Silberschatz, Galvin and Gagne
Procesos con único hilo y multihilos
Operating System Concepts – 8th Edition 4.6 Silberschatz, Galvin and Gagne
Beneficios del Multithreading
Operating System Concepts – 8th Edition 4.7 Silberschatz, Galvin and Gagne
Beneficios del Multithreading
Otro ejemplo: una misma aplicación puede tener que realizar varias tareas
similares:
un servidor web acepta solicitudes de los clientes que piden páginas web,
imágenes, sonido, etc. Un servidor web sometido una gran carga puede
tener varios (quizás miles) de clientes accediendo de forma concurrente a
él.
Si el servidor web funcionara como un proceso tradicional de un solo
hilo, sólo podrían dar servicio a un cliente cada vez y la cantidad de
tiempo que un cliente podría tener que esperar para que su solicitud
fuera servida podría ser enorme.
Si el servidor funcionara como un solo proceso que acepta Solicitudes.
Y Cuando ha recibido una solicitud, crea otro proceso para dar servicio
a dicha solicitud. Así se resolvía antes. La creación de proceso lleva
tiempo y hace un uso intensivo de los recursos. Si el nuevo proceso va
a realizar las mismas tareas que los procesos existentes, ¿por qué
realizar todo ese trabajo adicional?
Es más eficiente usar un proceso que contenga múltiples hilos. Según
este método, lo que se hace es dividir en múltiples hilos el proceso
servidor web.
– El servidor crea un hilo específico para escuchar las solicitudes de
cliente y cuando llega una solicitud, en lugar de crear otro proceso,
el servidor crea otro hilo para dar servicio a la solicitud
Operating System Concepts – 8th Edition 4.8 Silberschatz, Galvin and Gagne
Arquitectura de un servidor mutihilado
Y Crea un nuevo hilo para atender
la solicitud
Solicita
Operating System Concepts – 8th Edition 4.9 Silberschatz, Galvin and Gagne
Beneficios del Multithreading
Capacidad de respuesta:
Por tener siempre un hilo para la atención del usuario ya
que los otros pueden estar bloqueados
Compartición de recursos:
los hilos comparten la memoria y los recursos del
proceso al que pertenecen. La ventaja de compartir el
código y los datos es que permite que una aplicación
tenga varios hilos de actividad diferentes dentro del
mismo espacio de direcciones.
Economía:
Es más rápido el cambio de contexto entre uno y otro
hilo, que entre procesos. (cambio de contexto vs cambio
de proceso)
Utilización sobre arquitecturas multiprocesador:
en un arquitectura multiprocesador, donde los hilos
pueden ejecutarse en paralelo en los diferentes
procesadores.
Operating System Concepts – 8th Edition 4.10 Silberschatz, Galvin and Gagne
Modelo de Hilos
Desde el punto de vista práctico, el soporte para hilos puede
proporcionarse en
el nivel de usuario (para los hilos de usuario)
El soporte para los hilos de usuario se proporciona por
encima del kernel y los hilos se gestionan sin soporte
del SO.
el nivel del kernel (para los hilos del kernel).
El sistema operativo gestiona directamente los hilos
en el kernel. Casi todos los sistemas operativos
actuales, incluyendo Windows xp, Linux, Mac osx,
solaris etc. soportan los hilos del kernel.
Pero siempre debe existir una relación entre los hilos de
usuario y los hilos del kernel;
veremos tres formas de establecer esta relación:
Operating System Concepts – 8th Edition 4.11 Silberschatz, Galvin and Gagne
Modelos multihilos: Muchos a uno
Muchos hilos a nivel del usuario son “mapeados” a un único
hilo del kernel
ejemplos:
Solaris Green Threads
GNU Portable Threads
Operating System Concepts – 8th Edition 4.12 Silberschatz, Galvin and Gagne
Modelos multihilos: Uno a uno
Cada hilo a nivel de usuario mapea a un hilo del kernel
ejemplos
Windows NT/XP/2000
Linux
Solaris 9 y posteriores
Operating System Concepts – 8th Edition 4.13 Silberschatz, Galvin and Gagne
Modelos multihilos: muchos a muchos
Operating System Concepts – 8th Edition 4.14 Silberschatz, Galvin and Gagne
Modelo de dos niveles
Operating System Concepts – 8th Edition 4.15 Silberschatz, Galvin and Gagne
Biblioteca de hilos
La biblioteca de hilos provee una API al programador para
crear y administrar hilos
2 maneras básicas de implementación
La biblioteca completa está en espacio de usuario:
Todas las estructuras de datos y el código de la biblioteca se
encuentran en espacio de usuario. Esto significa que invocar
a una función de la biblioteca es como realizar una llamada
una función local en el espacio de usuario y no una llamada al
sistema.
– hilos en POSIX (Pthreads)
– hilos en Java
Hay una biblioteca a nivel del kernel soportada por el
sistema operativo:
Implementar una biblioteca en el nivel del kernel, soportada
directamente por el sistema operativo. El código y las
estructuras de datos de la biblioteca se encuentran en
espacio del kernel. Invocar a la función en la API de la
biblioteca normalmente da lugar a que se produzca una
llamada al sistema dirigida a el kernel.
Operating System Concepts –– 8thhilos
Editionen 4.16 Silberschatz, Galvin and Gagne
Win32
Pthreads
Puede proveer, ya sea hilos a nivel usuario o
hilos a nivel del kernel
El estándar POSIX (IEEE 1003.1c) de APIs se
estableció para la creación y sincronización de
hilos
La biblioteca de API especifica el
comportamiento de los hilos, desde su
implementación y hasta el desarrollo
Es común en sistemas operativos del tipo UNIX
(Solaris, Linux, Mac OS X)
Operating System Concepts – 8th Edition 4.17 Silberschatz, Galvin and Gagne
Hilos en Java
Los hilos en Java son administrados por la JVM
Operating System Concepts – 8th Edition 4.18 Silberschatz, Galvin and Gagne
Consideraciones sobre los hilos
Operating System Concepts – 8th Edition 4.20 Silberschatz, Galvin and Gagne
Tratamiento de señales
Una señal se usa en los sistemas unix para notificar a un
proceso que se ha producido un determinado suceso. Una
señal puede recibirse síncrona o asíncronamente,
dependiendo del origen y de la razón por la que el suceso
debe ser señalizado. Todas las señales, sean síncronas o
asíncronas, siguen el mismo patrón:
Una señal se genera debido a que se produce un
determinado suceso.
La señal generada se suministra a un proceso.
Una vez suministrada, la señal debe ser tratada (se debe
ejecutar un código)
Síncronas:
Como ejemplos de señales sincrónicas podemos citar
los accesos ilegales a memoria y la división por cero.
Si un programa en ejecución realiza una de estas
acciones, se genera una señal. Las señales síncronas
se proporcionan al mismo proceso que realizó la
operación que causó la señal (esa es la razón por la
que
Operating System Concepts
th
se consideran 4.21
– 8 Edition síncronas). Silberschatz, Galvin and Gagne
Tratamiento de señales
Asíncronas:
Cuando una señal se genera por un suceso externo a
un proceso de ejecución, dicho proceso recibe la señal
en modo asíncrono. Ejemplo: la terminación de un
proceso mediante la pulsación de teclas específicas,
como <control-C>, y el fin de tiempo de un
temporizador. Normalmente, las señales asíncronas se
envían a otro proceso.
Cada señal puede ser tratada por una de 2 posibles rutinas
de tratamientos:
Una rutina de tratamiento de señal predeterminada.
Una rutina de tratamiento de señal definida por el
usuario.
Cada señal tiene una rutina de tratamiento de señal
predeterminada que el kernel ejecuta cuando trata dicha
señal. Esta acción predeterminada puede ser sustituida por
una rutina de tratamiento o de señal definida por el usuario a
la que se llama para tratar las señal. Las señales pueden
tratarse de diferentes formas: algunas señales (tales como la
de cambio en el tamaño de una ventana) simplemente pueden
Silberschatz, Galvin and Gagne
Operating System Concepts – 8th Edition 4.22
Tratamiento de señales
El tratamiento de señales en programas de un solo hilo
resulta sencillo; las señales siempre se suministran a un
proceso. Sin embargo suministrar las señales en los
programas multihilos es más complicado, ya que un proceso
puede tener varios hilos. ¿a quién, entonces, debe
suministrarse la señal?
En General, hay disponible las siguientes opciones:
Suministrar la señal al hilo elegido que le sea aplicable la
señal.
Suministrar la señal para todos los hilos del proceso.
Suministrar la señal a determinados hilos del proceso.
Asignar un hilo específico para recibir todas las señales
del proceso.
El método para suministrar una señal depende del tipo de
señal generada. Por ejemplo, las señales síncronas tienen
que suministrarse al hilo que causó la señal y no a los otros
hilos del proceso. Sin embargo, la situación con las señales
asíncronas no están claras. Algunas señalesSilberschatz,
asíncronas,Galvin and Gagne
Operating System Concepts – 8th Edition 4.23
Procesos ligeros o
LWP
Muchos sistemas que implementan el modelo muchos-a-muchos o el
modelo de dos niveles, colocan una estructura de datos intermedia
entre los hilos de usuario y del kernel. Esta estructura de datos es
conocida normalmente con el nombre de proceso ligero o LWP. Para
las bibliotecas de hilos de usuario, el proceso ligero se parece a un
procesador virtual en el que la aplicación puede hacer que se
ejecute un hilo de usuario. Cada LWP se asocia a un hilo del kernel, y
es este hilo del kernel, el que el sistema operativo ejecuta en los
procesadores físicos. Si un hilo del kernel será bloqueado (por
ejemplo, mientras espera que se complete una operación de
entrada/salida), el proceso ligero LWP se bloquea también. Por
último el hilo de usuario asociado al LWP también se bloquea.
En una aplicación que haga un uso intensivo de las operaciones de
entrada/salida puede requerir ejecutar múltiples procesos LWP.
Normalmente, se necesita un proceso ligero por cada llamada
concurrente al sistema que sea del tipo bloqueante.
Por ejemplo, suponga que se solicitan simultánemente cinco
lecturas de archivos diferente; se necesitarán cinco procesos
ligeros, ya que todos podrán tener que esperar a que completen la
operación
Operating System Concepts – de
th entrada/salida del
8 Edition kernel. Si un proceso
4.24 tiene sólo
Silberschatz, Galvin and Gagne
Hilos en Windows XP
Implementa un mapeo uno a uno con nivel del
kernel
Cada hilo contiene
Un identificador de hilo
Un grupo de registros Contexto del hilo
Pilas separadas de usuario y kernel
Un área de almacenamiento privado
Las principales estructuras de datos de un hilo
son:
ETHREAD (bloque de hilo en el ejecutivo)
KTHREAD (bloque de hilo en el kernel)
TEB (bloque de entorno del hilo, en espacio de
usuario)
Operating System Concepts – 8th Edition 4.25 Silberschatz, Galvin and Gagne
Hilos en Windows XP
Operating System Concepts – 8th Edition 4.26 Silberschatz, Galvin and Gagne
Hilos en Linux
Operating System Concepts – 8th Edition 4.27 Silberschatz, Galvin and Gagne
Parámetros de clone() en Linux
Operating System Concepts – 8th Edition 4.28 Silberschatz, Galvin and Gagne