Contenido Procesos II • Diagramas de Estados de Procesos • Threads: Hilos de Ejecución M. B. Ibáñez M. B. Ibáñez Colas utilizadas para la Planificación de Procesos Modelo de Procesos de 2 estados Dispatch • El objetivo de la multiprogramación es tener procesos corriendo todo el tiempo para maximizar la utilización del CPU • Mientras un proceso corre otros esperan en otras colas: – – – – • • • • Enter Not Running Running Cola de tareas (cuando el proceso entra) Cola de procesos Ready Una cola para cada dispositivo de E/S etc Queue Dispatch Enter Processor M. B. Ibáñez Creación de Procesos Process Termination M. B. Ibáñez Exit Pause M. B. Ibáñez Llegada de un proceso batch Un usuario hace login Proveer un servicio como “printing” Expandir un proceso ya creado Exit Pause • • • • Tarea Batch solicita instrucción Halt Usuario logs off Un proceso termina de utilizar un recurso Condiciones de error y falla M. B. Ibáñez 1 Razones para terminación • • • • • Razones para Terminación • Falla de E/S • Instrucción inválida Terminación normal Tiempo terminado No hay memoria disponible Violación de límites Error de protección – Ocurre cuando se trata de ejecutar datos • Instrucciones privilegiadas • Intervención del Sistema de Operación – Por ejemplo cuando ocurre un interbloqueo – Ejemplo, tratar de escribir en un archivo read-only • El padre termina por lo tanto el hijo también • Error aritmético M. B. Ibáñez M. B. Ibáñez Modelo de Procesos de 5 estados Con una sola cola para procesos bloqueados Ready Queue Dispatch Admit New Dispatch Admit Running Ready Release Exit Timeout Event Occurs Time-out Event Wait Blocked Event Wait Event Occurs M. B. Ibáñez Event 1 Occurs Ready Queue Event 1 Queue Event 2 Queue Event 2 Occurs Dispatch Blocked Queue M. B. Ibáñez Otra visión Modelo de Colas Admit Release Processor Processor Release Event 1 Wait Event 2 Wait Event n Queue Event n Occurs Event n Wait M. B. Ibáñez M. B. Ibáñez 2 Diagrama de Transición de Procesos con estados “suspend” Dispatch Admit New Ready Running Release Exit Timeout Activate Event Occurs Suspend Event Wait Blocked Suspend Procesos suspendidos • El procesador es mucho más rápido que los dispositivos de E/S, todos los procesos están esperando por E/S • Llevar esos procesos a disco para liberar memoria • Un proceso bloqueado se convierte en suspendido cuando es llevado a disco M. B. Ibáñez M. B. Ibáñez Revisión del Concepto de Proceso Threads • Unidad de pertenencia de recursos – Espacio para la imágen del proceso – Recursos tales como memoria, archivos etc • Unidad de despacho – Estado de ejecución (running, ready, …) – Entidad que es planificada y despachada por el S. O. Process Control Block User Address Space • La unidad de despacho es denominada thread • La unidad poseedora de recursos es denominada proceso o tarea User Stack Kernel Stack Thread Thread Thread Control Block Thread Control Block Process Control Block User Stack User Stack User Stack User Address Space Kernel Stack Kernel Stack Kernel Stack M. B. Ibáñez M. B. Ibáñez Threads y Procesos Procesos y Threads • Procesos Java MS-DOS run-time engine one process one thread one process multiple threads Windows NT, Solaris UNIX multiple processes one thread per process multiple processes multiple threads per process M. B. Ibáñez • Threads – Espacio virtual que contiene la imágen del proceso – Acceso protegido a • • • • Thread Thread Control Block Procesadores Otros procesos Archivos Recursos de E/S – Estado de ejecución – Contexto salvado cuando no corre – Una tarea en ejecución – Almacenamiento para variables locales – Acceso a la memoria y los recursos del proceso M. B. Ibáñez 3 Ejemplos de usos de threads en sistemas de multiprocesamiento Beneficios de los threads • Toma menos tiempo crear un thread en un proceso que crear un nuevo proceso • Toma menos tiempo terminar un thread • Toma menos tiempo cambiar de un thread a otro dentro de un mismo proceso • Trabajo en foreground y background • Ejemplo: programa con interfaz. Un thread pudiera mostrar menus y leer la entrada del usuario mientras otro ejecuta los comandos del usuario y actualiza la pantalla. • Procesamiento asíncrono – Como protección ante una falla, se puede diseñar un procesador de palabras que escriba su RAM buffer en disco cada minuto • Velocidad de Ejecución – Un proceso con varios threads puede calcular un batch de datos mientras lee el próximo desde un dispositivo M. B. Ibáñez M. B. Ibáñez Operaciones asociadas con el cambio de estado en un thread Sincronización de threads • Spawn – Cuando un proceso es spawned, el thread para ese proceso también es spawned – Un thread dentro de un proceso puede spawn otro thread dentro del mismo proceso • Block – El procesador puede ejecutar otro thread listo para ejecución • Unblock – Cuando el evento por el cual el thread está esperando ocurre, el thread es llevado a estado ready • Finish – Cuando un thread termina, su contexto y pila son desasignados • Todos los threads de un proceso comparten el mismo espacio de direcciones y otros recursos • Cualquier alteración del recurso de un thread afecta el medio ambiente del resto de los threads del mismo proceso • Por lo tanto, es necesario sincronizar las actividades de varios threads de manera que los unos no interfieran con los otros corrompiendo estructuras de datos M. B. Ibáñez M. B. Ibáñez Ejemplo: Concurso ¿Quién gana? User-level Threads static int i Thread 1 Thread 2 i=0 i=0 while ( i < 10 ) { while ( i > -10 ) { i++; i--; } } System.out.println System.out.println (“gana 1”); (“gana 2”); M. B. Ibáñez • Todo el trabajo de manejo de threads es hecho por la aplicación y el kernel no conoce de la existencia de threads • Cualquier aplicación puede ser programada para ser multithreaded utilizando la biblioteca de threads • La biblioteca de threads contiene código para crear y destruir threads, para pasar mensajes y data entre los threads, para planificar la ejecución de threads, y para salvar y recuperar contextos de threads. M. B. Ibáñez 4 Relación entre planificación de threads y de procesos Process B Kernel 1 <thread 3 running> 2 <thread 3 asks for an I/O operation> 3 <thread 3 running> 1 <process B running> 2 <process B running> 3 <process B blocked waiting for an I/O operation> 4 <process C running> 5 <I/O operation completed> 6 <process B ready> 7 <process B running> 4 <thread 3 running> 5 <thread 3 running> 6 <thread 3 running> 7 <thread 3 running> Ventajas del uso de User-Level Threads • Cambiar de un thread a otro no requiere de privilegios del kernel • El planificador puede ser específico a la aplicación • Pueden correr en cualquier sistema de operación M. B. Ibáñez M. B. Ibáñez Desventajas del uso de User-Level Threads Kernel-level Threads • En un sistema de operación la mayor parte de las llamadas son bloqueantes – Cuando un thread ejecuta una llamada al sistema de operación, no solo se bloquea ese proceso sino todos los demás en ese proceso • En una estrategia pura de ULT, una aplicación multithreaded no puede sacar ventaja del multiprocesamiento M. B. Ibáñez • Todo el trabajo de manejo de threads es hecho por el kernel • El kernel mantiene información del contexto del proceso en su totalidad y para cada thread dentro del proceso • La planificación del kernel se hace en base a los threads M. B. Ibáñez 5