300 likes | 560 Views
Sistemas Operativos I. Unidad 2: Procesos e Hilos ( Threads ). Contenidos. Conceptos de proceso. Estados de un proceso. Modelo de cinco estados de procesos. Control de procesos. Modos de ejecución. Creación de procesos. Administración de procesos en Unix/Linux. Procesos e hilos.
E N D
Sistemas Operativos I Unidad 2: Procesos e Hilos (Threads)
Contenidos • Conceptos de proceso. Estados de un proceso. Modelo de cinco estados de procesos. • Control de procesos. Modos de ejecución. Creación de procesos. • Administración de procesos en Unix/Linux. • Procesos e hilos. • Creación y ejecución de procesos. Propuesta de proyecto anual. Control 1. • Comunicación entre procesos: • Concurrencia. • Exclusión mutua. • Semáforos. • Mensajes. • Taller 2: Comunicación entre procesos. Control 2. • Clase de recapitulación. • Clase de recapitulación. • Prueba de Cátedra 1.
Introducción • En las clases anteriores, se ha presentado el concepto de proceso incluyendo las dos características siguientes: • Unidad de propiedad de los recursos: A cada proceso se le asigna un espacio de direcciones virtuales para albergar a la imagen del proceso. Al proceso se le puede asignar memoria virtual y otros recursos, tales como canales de E/S, dispositivos de E/S y archivos. • Unidad de expedición: Un proceso es un camino de ejecución (traza) a través de uno o más programas. Esta ejecución puede ser intercalada con la de otros procesos. De este modo, un proceso tiene un estado de ejecución (Listo, Bloqueado, etc.) y una prioridad de expedición. La unidad planificada y expedida por el sistema operativo es el proceso.
Procesos e hilos • En la mayoría de los sistemas operativos, estas dos características son, de hecho, la esencia de un proceso. • Sin embargo, algunos argumentos pueden convencer de que estas dos características son independientes y que deben ser tratadas de manera independiente por el sistema operativo. • Esto se hace así en una serie de sistemas operativos, en particular en algunos sistemas operativos de desarrollo reciente. • Para distinguir estas dos características, la unidad de expedición se conoce como hilo (thread) o proceso ligero (lightweight process), mientras que a la unidad de propiedad de los recursos se le suele llamar proceso o tarea.
Características de los hilos En una tarea pueden haber uno o más hilos, cada uno con: • Estado de ejecución del hilo: Ejecución, Listo, etc. • Contexto del procesador, que se salva cuando no está ejecutando; una forma de contemplar al hilo es con un contador de programa independiente operando dentro de una tarea. • Pila de ejecución. • Almacenamiento estático para las variables locales. • Acceso a la memoria y a los recursos de la tarea, que se comparten con todos los otros hilos de la tarea.
Beneficios de los hilos • Se tarda mucho menos tiempo en crear un nuevo hilo en un proceso existente que en crear una nueva tarea, • Menos tiempo para terminar un hilo y • Menos tiempo para cambiar entre dos hilos de un mismo proceso. • Dado que los hilos dentro de un mismo proceso comparten memoria y archivos, pueden comunicarse unos con otros sin necesidad de acceder al núcleo. • Por tanto, si hay una aplicación o una función que pueda implementarse como un conjunto de unidades de ejecución relacionadas, es más eficiente hacerlo con una colección de hilos que con una colección de tareas separadas.
Ejemplos de uso • Un servidor de archivos de una red de área local: Cada vez que llega una solicitud de un nuevo archivo, se genera un nuevo hilo para el programa de gestión de archivos. Puesto que el servidor debe manejar muchas solicitudes, se crearán y destruirán muchos hilos en un corto periodo de tiempo. Si el servidor es un multiprocesador, se pueden ejecutar varios hilos de una misma tarea simultáneamente y en diferentes procesadores. Los hilos son también útiles en los monoprocesadores para simplificar la estructura de los programas que lleven a cabo diversas funciones. • Otro ejemplo de uso efectivo de los hilos está en las aplicaciones de proceso de comunicaciones y en los supervisores de transacciones. • Otra forma en la que los hilos aportan eficiencia es en la comunicación entre diferentes programas en ejecución. En la mayoría de los sistemas operativos, la comunicación entre procesos independientes requiere la intervención del núcleo para ofrecer protección y para proporcionar los mecanismos necesarios para la comunicación. Sin embargo, puesto que los hilos de una misma tarea comparten memoria y archivos, pueden comunicarse entre si sin invocar al núcleo.
Ejemplos de uso de los hilos en un sistema de multitarea • Trabajo interactivo y de fondo: Esto se produce en el sentido de la interacción directa con el usuario, no en el de sesiones interactivas y de fondo. Por ejemplo, en un programa de hoja de cálculo, un hilo puede estar visualizando los menús y leyendo la entrada del usuario mientras que otro hilo ejecuta las órdenes y actualiza la hoja de cálculo. Esta medida suele aumentar la velocidad que se percibe de la aplicación, permitiendo que el programa pida la orden siguiente antes de terminar la anterior. • Proceso asíncrono: Los elementos asíncronos del programa se pueden implementar como hilos. Por ejemplo, para protegerse de un corte de alimentación, se puede diseñar un procesador de textos que escriba su buffer de la RAM al disco una vez por minuto. Se puede crear un hilo cuya única tarea sea hacer estas copias de respaldo periódicas y que se planifique directamente con el sistema operativo; no hay necesidad de ningún código superfluo en el programa principal que haga la comprobación de tiempo o que coordine la entrada y la salida. • Aceleración de la ejecución: Un proceso con múltiples hilos puede computar un lote de datos mientras lee el lote siguiente de un dispositivo. En un sistema con multiproceso, varios hilos de un mismo proceso podrán ejecutarse realmente a la vez. • Organización de los programas: Los programas que suponen una variedad de actividades o varios orígenes y destinos de entrada y salida pueden hacerse más fáciles de diseñar e implementar mediante hilos.
Servidor Web con múltiples hilos (a) Hilo despachador (Dispatcher thread) (b) Hilo trabajador (Worker thread)
Estados de los hilos • La suspensión de los procesos engloba suspender todos los hilos de dicho proceso, dado que todos estos hilos comparten el mismo espacio de direcciones. • Al terminar el proceso, terminan todos los hilos incluidos en él. • Los estados asociados con un cambio en el estado del hilo son: • Carga y ejecución (Spawn) • Se carga y ejecuta otro hilo. • Bloqueado (Block) • Desbloqueado (Unblock) • Finzalizado (Finish) • Se devuelve el contexto de registros y pilas.
Modelos de hilos • Tres procesos, cada uno con un hilo. • Un proceso con tres hilos.
Modelos … (2) • Elementos compartidos por todos los hilos de un proceso: • Espacio de direcciones • Variables globales • Archivos abiertos • Procesos hijos • Alarmas pendientes • Señales y manipuladores de señales • Información de contabilidad • Elementos privados para cada hilo: • Contador de programa • Registros • Pila • Estado
Hilos a nivel usuario • Todo el manejo de los hilos lo realiza la aplicación. • El núcleo no tiene conciencia de la existencia de los hilos. • Ejemplos: Norma POSIX. IEEE 1003.1c, común en sistemas UNIX, establece una interfaz del programador de aplicación (API) para creación y sincronización de hilos.
Relación entre hilos a nivel usuario y estados de los procesos
Hilos a nivel del núcleo • El núcleo mantiene la información de contexto sobre los procesos y los hilos • La planificación se realiza en base a hilos. • Ejemplos: Windows, BeOS, Linux.
Enfoques combinados ó híbridos • La creación de hilos se realiza en el espacio del usuario. • El grueso de la planificación y sincronización de los hilos reside dentro de la aplicación. • Solaris es ejemplo de este enfoque.
Activaciones del planificador • Objetivo: Imitar la funcionalidad de los hilos del núcleo. • Gana desempeño de los hilos en el espacio del usuario. • Evita transiciones innecesarias entre el usuario y el núcleo. • El núcleo asigna procesadores virtuales a cada proceso, lo que permite al sistema asignar hilos a procesadores durante el tiempo de ejecución. • Problema: Confianza esencial en el núcleo (capa inferior) llamando a procedimientos en el espacio de usuario (capa superior)
Hilos como respuesta (pop-up) • Creación del nuevo hilo cuando se recibe un mensaje: (a) antes de recibir el mensaje. (b) después de recibido el mensaje.
Conversión de código con único hilo en código con múltiples hilos Pueden generarse conflictos entre los hilos al utilizar alguna variable global.
Variables privadas del hilo Los hilos pueden tener sus variables globales privadas.
Llamada a procedimientos remotos (Remote Procedure Call – RPC) Ejemplo de RPC con un hilo Ejemplo de RPC con múltiples hilos
Fuentes de información • Tanenbaum A., “Sistemas Operativos Modernos”, Prentice Hall, 1994 • Tanenbaum A., “Sistemas Operativos: diseño e implementación” Prentice-Hall, 1998 • Tanenbaum A., “Sistemas Operativos Distribuidos”, Prentice Hall, 2003 • Carretero, J. García, F. Pérez, F. “Sistemas Operativos: Una visión aplicada” Mc Graw Hill. 2001. • Stallings W., “Sistemas Operativos”, 5ta. Edición. Prentice-Hall. 2004
Referencias en Internet • David Luis la Red Martínez “SISTEMAS OPERATIVOS” • Domingo Mery “Sistemas Operativos” • Jorge Alfonso Briones García “Sistemas Operativos Distribuidos (material adicional)” • Sistemas operativos(SIMULACIONES Y ANIMACIONES)
Textos en Internet (inglés) • Andrew S. Tanenbaum “Modern Operating Systems” • Andrew S. Tanenbaum “Distributed Systems: Principles and Paradigms” • George Coulouris, Jean Dollimore and Tim Kindberg “Distributed Systems: Concepts and Design”, 3ra edición (4ta edición 2005) • Avi Silberschatz, Peter Baer Galvin & Greg Gagne “Operating System Concepts” • Minix 3 Operating System