Fundamentos de Sistemas Operativos Modulo 2: Introducción a los sistemas operativos Windows Tema 4: Planificación de procesos 1 Proceso: Concepto • Un sistema operativo ejecuta programas: – Sistemas por lotes – tareas – Sistemas de tiempo compartido – programas de usuario • Proceso – un programa en ejecución – La ejecución de un proceso debe progresar en forma secuencial • Un proceso incluye: – Estado del CPU (uno o más hilos) – Sección de texto y datos – Recursos como archivos abiertos, sockets, etc. • Tradicionalmente, los procesos eran la unidad de planificación – Los sistemas operativos modernos planifican hilos Estados de un hilo • Diagrama de 5 estados para la planificación de un hilo: – – – – init: se crea el hilo listo: El hilo está esperando asignación de CPU corriendo: Las instrucciones del hilo están ejecutándose bloqueado: El hilo está esperando que ocurra algún evento – terminado: El hilo terminó su ejecución interrupción quantum expirado init admitido listo E/S o terminación del evento planificador dispatch terminado corriendo salida bloqueado Esperando por un evento de E/S 2 Bloques de control de proceso e hilos • Información asociada con cada proceso: Process Control Block (PCB) – Información de administración de memoria – Información de contabilidad • Información asociada con cada hilo: Thread Control Block (TCB) – – – – Contador de programa Registros de CPU Información de planificación de CPU Información sobre E/S pendientes Process Control Block (PCB) Process ID (PID) Parent PID … Next Process Block List of open files • Esta es un vista abstracta • La implementación de Windows de un PCB está separada en múltiples estructuras de datos PCB Handle Table Image File Name List of Thread Control Blocks … Thread Control Block (TCB) Next TCB Program Counter Registers … 3 La CPU cambia de hilo a hilo Thread T1 ejecutando Interrupción o llamada de sistema Thread T2 Guardar estado en TCB1 Listo o bloqueado Cargar estado de TCB2 Listo o bloqueado Interrupción o llamada de sistema ejecutando Guardar estado en TCB2 Cargar estado de TCB1 listo o bloqueado ejecutando Cambio de contexto • Cuando la CPU cambia a otro hilo, el sistema debe guardar el estado del viejo proceso y cargar el estado del nuevo • El cambio de contextos es sobrecarga; el sistema no realiza ninguna actividad útil mientras realiza el cambio • Se requiere la interacción con el Administrador de Memoria cuando se intercambia entre hilos de diferentes procesos 4 Colas de planificación de procesos • Cola de listo – Mantiene el conjunto de todos los hilos listos y esperando para ejecutarse – Puede haber múltiples colas de listo, ordenadas por prioridades • Cola de dispositivo – Mantiene el conjunto de hilos esperando par aun dispositivo de E/S – Puede haber múltiples colas para los diferentes dispositivos • Los hilos migran entre las distintas colas Cola listo y de dispositivos de E/S Tiempo agotado Cola listo Dispatch E/S 1 cola CPU Liberado E/S 1 espera E/S 2 espera E/S n espera E/S ocurre E/S n cola 5 Criterios de optimización • La planificación de CPU utiliza heurísticas para administrar manejar las diferencias entre criterios de optimización contradictorios. • Planificadores se optimizan para cierto tipos de cargas – Interactivo vs. procesamiento por lotes – Intenso en E/S vs. intenso en cómputos • Criterios comunes de optimización: – – – – Maximizar la utilización de CPU Maximizar la salida del sistema Minimizar el tiempo de retorno Minimizar el tiempo de espera Planificadores • Planificador a largo plazo (o planificador de tareas) – Selecciona que procesos con sus hilos debe ser llevado a la cola de listos – Tiene en cuenta la administración de memoria – Controla el grado de multiprogramación – Invocado de forma infrecuente, puede ser lento • Planificador a corto plazo (o planificador de CPU) – Selecciona que hilo será el próximo en ejecutarse – Invocado en forma frecuente, debe ser rápido • Windows no tiene un planificador a largo plazo dedicado 6 Planificación por prioridades - Inanición El inanición es un problema: – Los hilos de baja prioridad pueden no ejecutarse nunca Soluciones 1) Decrementar la prioridad y envejecimiento: Unix – Decrementar la prioridad de los procesos intensos en CPU – Un promedio exponencial del uso de CPU para incrementar lentamente los procesos bloqueados 2) Elevación de prioridad: Windows/VMS – Incrementar las prioridad de un hilo cuando termina una E/S – El sistema le da a los hilos relegados un empuje extra El planificador de Windows: • Dirigido por prioridades, sistema de planificación expropiativa • Los hilos de alta prioridad siempre son ejecutados • Los hilos corren por un tiempo limitado o quantum • No hay un único planificador – planificación basada en eventos esparcida por todo el código • Las rutinas del “Dispatcher” son lanzadas por los siguientes eventos: – Un hilo está listo para ejecución – Un hilo abandona el estado corriendo (expira el quantum, estado bloqueado) – La prioridad del proceso cambia (llamada al sistema) 7 Principios de planificación en Windows • 32 niveles de prioridad • Los hilos dentro de la misma prioridad se planificación siguiendo un política de Round Robin • Las prioridades de tiempo real no se ajustan en forma dinámica – La elevación de prioridad es una respuesta a cierta E/S – Ajuste del Quantum para optimizar el tiempo de respuesta • Prioridades de tiempo real(> 15) se asignan estáticamente a los hilos Planificación • Múltiples hilos pueden estar listos para correr • “¿Quién toma el uso de CPU?” • Desde el punto de vista de Windows API: – Los procesos tiene una clase de prioridad cuando se crean • Ocioso, Normal, Alta, Tiempo Real • Windows 2000 agrego “sobre normal” y “bajo normal” – Los hilos tienen una prioridad relativa dentro de su clase • Ociosa, Baja, Bajo normal, Normal, Sobre normal, Alta y de Tiempo Critico • Desde el punto de vista del núcleo: – Los hilos tienen 32 prioridades 0 a 31 – Se planifican hilos, no procesos – La clase de prioridad no se utiliza para tomar decisiones de planificación APIs Windows de planificació planificación: Get/ Get/SetPriorityClass Get/ Get/SetThreadPriority Get/ Get/SetProcessAffinityMask SetThreadAffinityMask SetThreadIdealProcessor Suspend/ Suspend/ResumeThread 8 Nucleo: Niveles de prioridad 31 16 niveles “tiempo real” 16 15 15 niveles variables Utilizados por hilos de cero páginas 1 0 Utilizados por el hilo(s) ocioso i Windows vs. NT Kernel Prioridades Win32 Clases de prioridades Win32 Tiempo critico Prioridades Alta Hilos Sobre normal Normal Bajo normal Baja Ociosa Tiempo real Alta Sobre Normal Normal Bajo Normal Ocio 31 26 25 24 23 22 16 15 15 14 13 12 11 1 15 12 11 10 9 8 1 15 10 9 8 7 6 1 15 8 7 6 5 4 1 15 6 5 4 3 2 1 – La tabla muestra las prioridades base (la prioridad “actual” o “dinámica” puede ser mayor si la base es < 15) – Muchas utilidades muestran la prioridad dinámica de un hilo en lugar de la base 9 Special Thread Priorities • Idle threads -- one per CPU – When no threads want to run, Idle thread “runs” • Not a real priority level - appears to have priority zero, but actually runs “below” priority 0 • Provides CPU idle time accounting (unused clock ticks are charged to the idle thread) – Loop: • Calls HAL to allow for power management • Processes DPC list • Dispatches to a thread if selected – Server 2003: in certain cases, scans per-CPU ready queues for next thread • Zero page thread -- one per NT system – Zeroes pages of memory in anticipation of “demand zero” page faults – Runs at priority zero (lower than any reachable from Windows) – Part of the “System” process (not a complete process) Prioridades de Hilos vs. Interrupt Request Levels (IRQLs) IRQLs (x86) 31 30 29 28 Prioridades de hilos 0-31 2 1 0 High Power fail Interprocessor Interrupt Clock Device n . . . Device 1 Dispatch/DPC APC Passive_Level Interrupciones Hardware Interrupciones Software 10 Planificación de Hilos • ¡No hay un planificador central! – Por ej. No hay una rutina siempre instanciada llamada “el planificador” – El “código que realiza la planificación” no es un hilo – Las rutinas de planificación son simplemente llamadas cuando ocurre un evento que el estado listo de un hilo – Cosas que pueden causar eventos de planificación: • • • • Interrupciones de intervalo de tiempo (por finalización de quantum) Interrupciones de intervalo de tiempo (por esperas con tiempo) Otras interrupciones de hardware (para la terminación de una E/S) Un hilo cambia el estado de un objeto en esperable que otros hilo(s) están esperando • La prioridad de un hilo cambia • Basado en colas de hilos Listos Escenarios de planificación • Expropiación – Un hilo en una prioridad mayor al proceso actualmente corriendo pasa al estado de listo – El hilo de menor prioridad es expropiado – El hilo expropiado vuelve a la cabeza de su cola de Listo • Intercambio voluntario – Esperando por un objeto – Terminación – Baja explicita de la prioridad • El hilo que se encuentra corriendo experimenta la finalización de su quantum – Se decrementa la prioridad a menos que ya esté en su prioridad base – El hilo pasa a la cola de su cola de listo para su nueva prioridad – Puede continuar corriendo si no hay un hilo de prioridad igual o mayor corriendo 11 Escenarios de planificación Expropiación • La expropiación es dirigida estrictamente por eventos – No espera el siguiente tick de reloj – No se garantiza la ejecución después de la expropiación – Los hilos en modo núcleo pueden ser expropiados (a menos que se incremente IRQL to >= 2) Corriendo Listo Del estado bloqueado 18 17 16 15 14 13 • Un hilo expropiado vuelve a la cabeza de su cola de Listo Escenarios de planificación Listo después de la resolución del bloqueo • Si el nuevo proceso no es de mayor prioridad que el corriendo actualmente… • …se pone en la cola de la cola de listo para su prioridad actual Corriendo Listo 18 17 16 15 14 13 Del estado bloqueado 12 Escenarios de planificación Cambio voluntario • Cuando un hilo que está corriendo libera la CPU… • …se planifica el hilo que está encabezando la siguiente cola de procesos Listos Corriendo Listo 18 17 16 15 14 13 Al estado bloqueado Escenarios de planificación Finalización de Quantum • Cuando el proceso corriendo agota su quantum de CPU, se pasa al final de su cola de listo – Se aplica tanto a los procesos de tiempo real como a los de prioridades dinámicas, modo usuario y modo núcleo • Los Quantums de un hilo pueden deshabilitarse mediante una función del núcleo – Default quantum en Professional es 2 ticks de reloj, 12 en Server • El tick de reloj estándar 10 msec; puede ser de 15 msec en algunos Pentium MP – Si no hay otro hilo listo en la misma prioridad, el mismo hilo continua corriendo (solo toma un nuevo quantum) – Si está corriendo en una prioridad mayor a su base, la misma se decrementa en uno 18 17 16 15 14 13 Corriendo Listo 13 Basic Thread Scheduling States preemption, quantum end Ready (1) Running (2) voluntary switch Waiting (5) Ajustes de prioridades • Los ajuste dinámicos de prioridades (alza y baja) son aplicados a los hilos en las clases “dinámicas – Hilos con prioridades base entre 1-15 – Se puede deshabilitar con SetThreadPriorityBoost o SetProcessPriorityBoost • Cinco tipos: – – – – – Terminación de E/S Termina la espera de eventos o semáforos Cuando un hilo primer plano completa un bloqueado Cuando un hilo de GUI se despierta para una entrada Para evitar la inanición • No hay ajustes automáticos en las clases “tiempo real” (16 o superiores) – Aquí “tiempo real” significa “que el sistema no cambiará las prioridades relativas de sus hilos de tiempo real” – Por lo tanto, la planificación es predecible con respecto a los otros hilos en tiempo real 14 Incremento de prioridad Para favorecer los hilos intensos en E/S: • Después de una E/S: especificada por el controlador – IoCompleteRequest( Irp, PriorityBoost ) Valores comunes (ver NTDDK.H) 1: disk, CD-ROM, parallel, Video 2: serial, network, named pipe, mailslot 6: keyboard or mouse 8: sound • Después de la espera de un evento en el ejecutivo o un semaforo • Los hilos de una GUI se despiertan para procesar la entrada de datos (ej. Mensajes de windows) incrementan en 2 Incremento y caida de la prioridad de un hilo • Comportamiento de estos incrementos: – Se aplica a la prioridad base del hilo – Después del incremento se obtiene un quantum • No lo llevará sobre la prioridad 15 • Luego se baja 1 nivel y se corre otro quantum quantum Priority decay at quantum end Prioridad Prioridad Base Boost upon wait complete Run Wait Round-robin at base priority Run Preempt (before quantum end) Run Tiempo 15