Capítulo 4 Hilos Secciones Stallings: 4.1 – 4.3 Contenido • Procesos e hilos. • Hilos a nivel de núcleo y a nivel de usuario. • Multiprocesador simétrico (SMP). • Micronúcleos. 1 Proceso • Unidad de propiedad de los recursos: – Necesita espacio de direcciones virtuales para mantener su imagen – Tiene asignados recursos en ciertos momentos • Unidad de expedición: – sigue un camino de ejecución que puede ser intercalada con la de otros procesos • Estas dos características son tratadas de manera independiente por el S.O. Procesos e hilos • Hilo: unidad de expedición. • Proceso/tarea: unidad de propiedad de los recursos 2 Multihilo • SO mantiene varios hilos de ejecución dentro de un mismo proceso. • MS-DOS soporta un solo hilo. • UNIX soporta múltiples procesos de usuarios, pero sólo un hilo por proceso. • Windows (a partir del 2000), Solaris, Linux, Mach, y OS/2 soportan múltiples hilos. Un proceso, Un proceso, un hilo múltiples hilos Múltiples procesos, Múltiples procesos, un hilo por proceso múltiples hilos por proceso Flujo de instrucciones Figura 4.1. Procesos e hilos [ANDE97]. 3 Proceso en entorno multihilo • Proceso: – Espacio de direcciones virtuales, que contiene la imagen del proceso. – Acceso protegido a los procesadores, a otros procesos, archivos y a recursos de E/S. – Puede tener 1 o varios hilos Hilo en entorno multihilo • Hilo tiene: – Estado de ejecución (ejecución, listo, etc.). – Contexto del procesador, que se salva cuando no está ejecutando. – Tiene una pila de ejecución. – Almacenamiento estático para las variables locales. – Acceso a memoria y otros recursos del proceso, compartidos con todos los hilos del mismo 4 Modelo de proceso multihilo Modelo de proceso monohilo Bloque de control de proceso Hilo Hilo Hilo Bloque de control de hilo Bloque de control de hilo Bloque de control de hilo Bloque de control de proceso Pila de usuario Pila de usuario Pila de usuario Espacio de direcciones de usuario (código y datos) Pila del núcleo Pila del núcleo Pila del núcleo Pila de usuario Espacio de Pila del direcciones núcleo de usuario (código y datos) Acceso a los mismos datos y recursos. Ej: un hilo abre fichero con permiso lectura, el resto de hilos pueden leer. Figura 4.2. Modelos de proceso monohilo y multihilo. Beneficios de los hilos • Se tarda menos tiempo en crear un nuevo hilo en un proceso existente. • Se tarda menos tiempo en terminar un hilo que un proceso. • Se tarda menos tiempo en cambiar entre dos hilos de un mismo proceso. • Los hilos de un mismo proceso comparten recursos (memoria, archivos, …) => pueden comunicarse entre sí sin invocar al núcleo (no necesidad de protección) => coordinación es más rápida (vs. procesos, que deben enviarse msgs.) => aumenta eficiencia 5 Usos de los hilos en un sistema monousuario y multiproceso • Trabajo interactivo y en segundo plano. – Ej: calcular – recibir datos de teclado (bloques) • Procesamiento asíncrono – Ej: cada X tiempo copia de seguridad. No necesario comprobaciones externas de tiempo, ni coordinación entre E/S, porque el hilo se ocupa de ello • Aceleración de la ejecución – Ej: procesar lotes – leer siguiente • Estructuración modular de los programas – Ej: varias actividades a la vez y/o varios dispositivos Llamadas a Procedimiento Remoto (RPC) utilizando hilos Tiempo Llamada Llamada a RPC a RPC Proceso 1 Servidor 1 Servidor 2 (a) RPC utilizando un solo hilo Bloqueado, esperando respuesta de una RPC Ejecutando Figura 4.3. Llamadas a Procedimiento Remoto (RPC) utilizando hilos 6 Llamadas a Procedimiento Remoto (RPC) utilizando hilos Llamada Servidor 1 a RPC Hilo A (proceso 1) Hilo B (proceso 1) Llamada a RPC Servidor 2 (b) RPC utilizando un hilo por servidor (en un monoprocesador) Bloqueado, esperando respuesta de una RPC Bloqueado, esperando al procesador que está siendo usado por el hilo B Ejecutando Figura 4.3. Llamadas a Procedimiento Remoto (RPC) utilizando hilos. Estados de un hilo • Hilos tienen estado de ejecución • Pueden sincronizarse entre ellos • Operaciones básicas relacionadas con el cambio de estado en hilos: – Creación – Bloqueo – Desbloqueo – Terminación: • Se liberan el contexto y las pilas. 7 Estados de proceso - hilos • Suspensión de un proceso => suspensión de todos sus hilos, porque comparten el mismo espacio de direcciones • Terminación de un proceso => terminar con todos sus hilos, el proceso ya no se elige para la ejecución Estados de un hilo • Creación de un hilo: – Crear proceso = crear 1 primer hilo – Un hilo puede crear otros hilos: • Le pasa puntero de instrucción y argumentos – Nuevo hilo tiene su propio contexto y espacio de pila – Nuevo hilo pasa a la cola de listos 8 Estados de un hilo • Bloqueo de un hilo: – Hilo necesita esperar suceso – Bloqueo: guardar contexto del hilo (registros, contador de programa, puntero de pila) – No tienen por qué bloquearse el resto de los hilos • Hilos a nivel de usuario: se bloquea el proceso entero • Hilos a nivel de núcleo: se bloquea sólo el hilo Estados de un hilo • Desbloqueo de un hilo: – El suceso ocurre • El hilo pasa a cola de listos (si hilos a nivel de núcleo) • El proceso pasa a cola de listos (si hilos a nivel de usuario y era el único hilo bloqueado) • Terminación de un hilo: – Se libera su bloque de control (contexto) y su pila 9 Hilos a nivel de usuario • La aplicación realiza todo el trabajo de gestión de hilos • El núcleo no tiene conocimiento de la existencia de hilos • Biblioteca de hilos - código para: – crear y destruir hilos – intercambiar mensajes y datos entre hilos – planificar ejecución de hilos – salvar y restaurar el contexto de los hilos Hilos a nivel de usuario Biblioteca Espacio de hilos de usuario Espacio de núcleo (a) Nivel de usuario puro Hilo a nivel de usuario Hilo a nivel de núcleo Proceso 10 Proceso ejecutándose (hilo 2) Hilo 2 hace llamada al sistema Pasa a modo núcleo => proceso bloqueado Estado de los hilos se mantiene (nivel usuario) Proceso ejecutándose (hilo 2) Interrupción de reloj: el tiempo para proceso B termina ¿Qué ocurre? Pasar a modo núcleo Proceso B pasa a listo Estado de los hilos (nivel usuario) se mantiene 11 Proceso ejecutándose (hilo 2) Hilo 2 necesita que ocurra suceso que depende de hilo 1. ¿Qué ocurre? Hilo 2 se bloquea (nivel usuario) Hilo 1 de listo a ejecutarse Proceso sigue ejecutándose Hilos a nivel de usuario Permiten multiprogramación dentro de un proceso Planificador Hilos: Tabla Hilos Biblioteca de usuario Proceso A Tabla de procesos Tabla Hilos Espacio de usuario Proceso B Planificador Procesos Núcleo Planificación de los hilos es interna al proceso biblioteca de hilos a nivel de usuario 12 Ventajas hilos a nivel de usuario • Intercambio de hilos no necesita privilegios del modo núcleo: – Gestión de hilos en el espacio de direcciones de usuario – Se evitan 2 cambios de modo • Se puede decidir planificación específica a nivel de hilos • Hilos se pueden ejecutar en cualquier S.O.: – Biblioteca hilos = utilidades de aplicación Desventajas hilos a nivel de usuario • Llamadas al sistema son bloqueantes: – Un hilo ejecuta llamada => bloqueo del resto de hilos (bloqueo de todo el proceso) • No se aprovechan las ventajas de multiprocesadores: – Núcleo asigna el procesador a 1 proceso => cuando se le quita, todos hilos del proceso esperan a que se le vuelva a asignar. – Hilos a nivel de usuario “invisibles” para el S.O. 13 Hilos a nivel de núcleo • Núcleo mantiene la información de contexto del proceso y de los hilos – Hilos visibles y gestionados por el núcleo • La planificación se realiza en función de los hilos => hilos del mismo o distinto proceso compiten por procesador • Ejs: W2K, Linux y OS/2 Hilos a nivel de núcleo Espacio de usuario Espacio de núcleo (b) Nivel de núcleo puro Hilo a nivel de usuario Hilo a nivel de núcleo Proceso 14 Hilos a nivel de núcleo • Ventajas: – Si varios procesadores, posible ejecutar en paralelo hilos del mismo proceso – Bloqueo de un hilo NO implica bloqueo de los demás – Las propias funciones del núcleo pueden ser multihilo • Desventajas: – Necesario cambiar a modo núcleo para pasar de un hilo a otro (incluso con hilos de un mismo proceso) Aproximaciones combinadas • Creación de hilos: en el espacio de usuario • Planificación y sincronización: en el espacio de usuario • Varios hilos de usuario se asocian con varios hilos a nivel de núcleo – Nº igual o distinto, lo puede ajustar el programador • Ej.: Solaris • Ventajas: – Hilos de un mismo proceso se pueden ejecutar en paralelo en varios procesadores – Llamadas al sistema bloqueantes no necesitan bloquear todo el proceso. 15 Biblioteca Espacio Espacio Biblioteca de hilos de usuario de usuario de hilos Espacio Espacio Espacio de núcleo de núcleo de núcleo (a) Nivel de usuario puro Hilo a nivel de usuario Espacio de usuario (b) Nivel de núcleo puro Hilo a nivel de núcleo (c) Combinado Proceso Figura 4.6. Hilos a nivel de usuario y a nivel de núcleo. Relación entre hilos y procesos Hilos : Procesos Descripción 1:1 Cada hilo de ejecución es un único proceso con sus propios recursos y espacio de direcciones. M:1 Un proceso define un espacio de direcciones y unos recursos dinámicos propios. Pueden crearse varios hilos que ejecuten en dicho proceso. Sistemas de ejemplo Implementaciones UNIX clásicas Windows NT, Solaris, OS/2, OS/390, MACH 16 Relación entre hilos y procesos Hilos : Procesos Descripción 1:M Un hilo puede emigrar del entorno de un proceso a otro. Esto permite que un hilo se pueda mover fácilmente entre sistemas distintos. M:N Combina los atributos de los casos M:1 y1:M Sistemas de ejemplo Ra (Clouds), Emerald TRIX Procesos de Windows • Implementados como objetos • Un proceso ejecutable puede contener uno o más hilos. • Tanto el objeto proceso como el objeto hilo tienen funcionalidades de sincronización preconstruidas. 17 Un proceso Windows y sus recursos Proceso de Windows Objeto proceso 18 Hilo de Windows Objeto hilo Estados de los hilos (Windows 2000) • • • • • • Listo (Ready) Substituto (Standby) Ejecutando (Running) Bloqueado (Waiting) Transición (Transition) Terminado (Terminated) 19 Estados y transiciones de hilos en Windows Solaris • Proceso: – BCP – Espacio de direcciones: código + datos + pila • Hilos a nivel de usuario (ULT) • Hilos a nivel de núcleo (KLT): – Realizan funciones específicas de núcleo • Procesos ligeros (LWP): – Asociación entre ULT y KLT – Cada LWP: • soporta uno o más ULT • está asociado con un KLT 20 Arquitectura multihilo de Solaris Estructura de procesos en Unix clásico y Solaris 21 EdD de proceso ligero en Solaris • Identificador del LWP • Prioridad • Máscara de señales: indica al núcleo que señales debe aceptar • Contexto • Pila del núcleo para el LWP • Uso de recursos y datos de perfíles: Contabilidad • Puntero al correspondiente hilo del núcleo • Puntero a la estructura del proceso Estados y transiciones de hilos y procesos ligeros en Solaris 22 EdD de proceso Linux • • • • • • • • • Estado Información de planificación: Identificadores Comunicación entre procesos Enlaces: padres-hijos-hermanos Tiempos y temporizadores Sistema de ficheros Espacio de direcciones Contexto específico del procesador Estados en un proceso Linux • • • • • Ejecutando (Running) Interrumpible (Interruptable) Ininterrumpible (Uninterruptable) Detenido (Stopped) Zombie 23 Estados y transiciones de hilos y procesos ligeros en Linux 24