Planificación de uso del procesador Sebastián Sánchez Prieto
Concepto de planificación Programa 1 Sistema Operativo Programa 2 En ejecución Salvar registros Inactivo Interrupción o llamada al sistema Restaurar registros Inactivo En ejecución Salvar registros Interrupción o llamada al sistema Restaurar registros Inactivo En ejecución 1999-2003 S2P, OGP & IGT
Planificación La ejecución de un trabajo se compone de secuencias de procesador y de espera Objetivos: Equidad Eficiencia Bajo tiempo de respuesta Rendimiento alto Minimizar el tiempo de espera Todos estos objetivos no se pueden conseguir simultáneamente 1999-2003 S2P, OGP & IGT
Colas de procesos PCB 12 PCB 30 PCB 24 Cola de preparados Cabeza Misc. Disco Cabeza Misc. Impresora Cabeza CD-ROM Cabeza 1999-2003 S2P, OGP & IGT
Planificadores (schedulers) Existen dos planificadores de procesador Planificador a largo plazo Controla el grado de multiprogramación Planificador a corto plazo Selecciona entre los trabajos cargados en memoria y que están preparados para ejecutarse cual hará uso del procesador El planificador a corto plazo debe ser muy rápido ya que entra en juego con una frecuencia muy alta Planificador a medio plazo Carga y descarga trabajos desde el disco a la memoria y de la memoria al disco en función del grado de sobrecarga del sistema. 1999-2003 S2P, OGP & IGT
Relación entre los planificadores CPU Cola de preparados E/S Cola de E/S E/S Cola de E/S E/S Cola de E/S 1999-2003 S2P, OGP & IGT
Criterios de planificación Utilización del procesador Maximizar el rendimiento del procesador Rendimiento (“Throughput”) Trabajos completados por unidad de tiempo Tiempo de estancia (“Turnaround time”) Tiempo transcurrido desde que se lanza hasta que finaliza Tiempo de espera Por operaciones de E/S o por otros aspectos Tiempo de respuesta Importante en aplicaciones interactivas o de tiempo real 1999-2003 S2P, OGP & IGT
Planificación FCFS Primero en entrar, primero en salir Se lleva a cabo manejando la cola de procesos preparados como una cola FIFO Es el algoritmo más sencillo de codificar Características y prestaciones: Depende fuertemente de los tipos de trabajo y del instante en que llegan Limitados por CPU: Mucha CPU y poca E/S Limitados por E/S: Mucha E/S y poca CPU 1999-2003 S2P, OGP & IGT
Eficiencia FIFO Los tiempos de estancia y respuesta varían fuertemente de un momento a otro Los tiempos medios de retorno son menores en el segundo caso que en el primero tra=16 trb=11 Trabajo 1 Trabajo 2 Trabajo 3 12 15 21 Trabajo 2 Trabajo 3 Trabajo 1 3 9 21 1999-2003 S2P, OGP & IGT
Shortest Job First (SJF) Asocia de forma dinámica a cada proceso la longitud de su siguiente ráfaga de CPU Asigna la CPU al trabajo con la ráfaga siguiente más pequeña Este algoritmo es óptimo para reducir los tiempos medios de retorno Su dificultad es conocer cuáles van a ser las duraciones de las próximas ráfagas de CPU de cada proceso ¿Cómo se estima la duración de la siguiente ráfaga de CPU? 1999-2003 S2P, OGP & IGT
Método de predicción La siguiente ráfaga de CPU se predice como una media exponencial de las longitudes medias en anteriores ráfagas Sea: tn: longitud de la n-ésima ráfaga de CPU tn: valor predicho para la n-ésima ráfaga de CPU a : parámetro de ajuste tn+1 = a tn + (1-a) tn tn: contiene la información más reciente tn: contiene la historia pasada 1999-2003 S2P, OGP & IGT
Algoritmos de prioridad Se asocia una prioridad a cada proceso y la CPU se asigna al trabajo con la prioridad más alta Las prioridades pueden definirse de dos formas: Internamente: Consumo de tiempo de CPU Cantidad de memoria usada Recursos empleados Externamente Tipo de usuario Tipo de aplicación Etcétera Problema: posible inanición (“starvation”) de determinadas solicitudes 1999-2003 S2P, OGP & IGT
Algoritmos con requisa En los algoritmos anteriores, una vez que la CPU ha sido asignada a un proceso, éste la mantiene hasta que pide una E/S o termina ¿Cómo hacer que la CPU sea retirada a un proceso una vez asignada? Prioridad con requisa (“preemption”): i.e. SJF Llega el Trabajo 2 con ráfaga más corta Trabajo 1 Trabajo 2 Trabajo 1 Trabajo 3 3 7 12 23 1999-2003 S2P, OGP & IGT
Algoritmos “round robin” Usados en sistemas de tiempo compartido La CPU se asigna a cada proceso preparado durante un cuanto de tiempo “q” La cola de procesos preparados es FIFO Si la ráfaga de CPU > q Interrupción TIME-OUT Si la ráfaga de CPU < q Liberación de CPU Prestaciones: dependen fuertemente de q q ¥ round-robin degenera en FCFS q 0 CPU/n Si “q” es muy pequeño se pierde mucho tiempo en el cambio de contexto. Disminuye la eficacia del procesador Si “q” es grande, los tiempos de respuesta aumentan Regla empírica: el 80% de las ráfagas de CPU deben ser menores que el cuanto Problema: sólo existe una cola de trabajos preparados, no distingo entre tipos de trabajos 1999-2003 S2P, OGP & IGT
Colas multinivel Dividen la cola de preparados en colas separadas en función del tipo de trabajo Cada cola tiene su propio algoritmo de planificación Debe existir otro algoritmo para elegir la cola en cada momento Prioridad alta Tareas del sistema Tareas interactivas Tareas de edición Tareas batch Prioridad baja 1999-2003 S2P, OGP & IGT
Colas multinivel realimentadas Los trabajos se mueven. Consideraciones: El algoritmo de planificación de cada cola Métodos para “ascender” y “descender” Dónde poner inicialmente a los trabajos Quantum = 10 Quantum = 20 FCFS 1999-2003 S2P, OGP & IGT
Algoritmo UNIX SVR3 y 4.3 BSD Un reloj HW interrumpe cada 10 ms La rutina de tratamiento del reloj tick(), tiene una de las prioridades más altas Recarga el reloj HW si es necesario Actualiza el uso de CPU del proceso activo Cálculo de prioridades y manejo de finalización del quantum Actualiza la fecha Se manejan los callouts Se despierta al swapper y pagedaemon cuando es necesario Se manejan las alarmas Sólo la supera la interrupción de fallo de alimentación Prioridades comprendidas entre 0 y 127 Núcleo: entre 0 y 49 Procesos de usuario: entre 50 y 127 El núcleo es ininterrumpible 1999-2003 S2P, OGP & IGT
Estructura proc Campos relacionados con la planificación: — p_pri Prioridad real — p_usrpri Prioridad en modo usuario — p_cpu Uso reciente de CPU — p_nice Definido por el usuario (oscila entre 0 y 39, valor por defecto 20) Cada tick se incrementa el valor de p_cpu para el proceso activo hasta un máximo de 127 Inicialmente vale 0 Cada segundo se recalculan las prioridades (schedcpu() vía callout) 1999-2003 S2P, OGP & IGT
Recálculo de prioridades El campo p_cpu se reduce por un factor denominado de decadencia (decay) En SVR3 decay=1/2 En 4.3 BSD decay=(2*car_media)/(2*car_media+1) car_media es el número medio de procesos activos en el último segundo Fórmula: p_usrpri=PUSER+(p_cpu/4)+(2*p_nice) PUSER=50 1999-2003 S2P, OGP & IGT
Estructuras de datos En la misma cola se emplea RR whichqs Cola 0 Prio. 0-3 Proc 1 ... qs Cola 1 Prio. 4-7 Cola 2 Prio. 8-11 Cola 3 Prio. 12-15 Cola 4 Prio. 16-19 Cola 31 Prio. 124-127 En la misma cola se emplea RR Cada 100 ms se invoca roundrobin() 1999-2003 S2P, OGP & IGT
Consecuencias del algoritmo Si la carga es alta es ineficiente recalcular todas las prioridades cada segundo No existe la posibilidad de asignar CPU a grupos de procesos No existen plazos de respuesta acotados Las aplicaciones no tienen control sobre su prioridad El mecanismo nice es simple e inadecuado Se puede producir inversión de prioridades, el núcleo es ininterrumpible Cuando un proceso de baja prioridad hace una llamada al sistema puede retardar a uno de alta prioridad 1999-2003 S2P, OGP & IGT
Algoritmo de VAX/VMS Es un algoritmo con prioridades (32 niveles) Las prioridades bajas (0-15) corresponden a procesos de usuario Tienen una prioridad base que es fija Offset: hasta 6 niveles sobre la base A igualdad de prioridad: RR Se beneficia a las tareas limitadas por E/S Las prioridades altas altas (16-31) corresponden a procesos de tiempo real Su prioridad no suele cambiar Planificación con prioridades y desalojo 1999-2003 S2P, OGP & IGT
Algoritmo utilizado en W2K Pensado para ser muy sensible a las necesidades de un único usuario en un entorno interactivo o en el papel de servidor Algoritmo apropiativo con prioridades (base + offset) WNT soporta 32 niveles de prioridad Prioridades 16-31 -> tareas de tiempo real Prioridades 1-15 -> tareas ordinarias La prioridad 0 es para “Zero page thread” Idle aparece con prioridad 0, pero se ejecuta con una prioridad menor La prio. de un hilo ordinario no puede ser > 15 1999-2003 S2P, OGP & IGT
Algoritmo utilizado en W2K Las colas son colas doblemente enlazadas de tareas Ready Las colas son comunes a todos los procesadores Se planifican hilos no procesos Los hilos del mismo nivel se ejecutan en RR En sistemas MP se ejecutan hilos simultáneamente No se garantiza la ejecución de los n hilos más prioritarios si hay n procesadores Se intenta mantener cada hilo en su procesador Un procesador puede interrumpir a otro para que planifique una tarea 1999-2003 S2P, OGP & IGT
Planificación de hilos en W2K No existe un planificador central!!! Las rutinas de planificación se invocan cuando se produce un evento que cambia el estado Ready de un hilo Evento que provocan la activación del “scheduler” Interrupción del temporizador (fin del quantum) Interrupción del temporizador (“timed wait”) Interrupción HW (finalización de E/S) Operación V en un “Waitable object” Operación P en uno o varios “Dispatch objects” 1999-2003 S2P, OGP & IGT
Escenarios de planificación Apropiación Un hilo con mayor prioridad que el activo pasa al estado Ready El hilo de menor prioridad es expulsado El hilo requisado pasa a la cabeza de la cola Ready Conmutación voluntaria Bloqueo en un “dispatch object” Finalización Disminución de la prioridad de modo explícito Finalización de quantum Se decrementa la prioridad del hilo a no ser que ya se encuentre en la prioridad base El hilo se introduce al final de la cola correspondiente a su prioridad El hilo puede seguir ejecutándose si no hay tareas de igual o mayor prioridad listas para ejecutarse 1999-2003 S2P, OGP & IGT
Apropiación La apropiación es estrictamente dirigida por eventos No se espera por el siguiente pulso de reloj No se garantiza un periodo mínimo de ejecución Los hilos en modo núcleo pueden ser también requisados (a no ser que IRQL >= 2) Ready Running Desde el estado de espera 1999-2003 S2P, OGP & IGT
Lista después de una espera El proceso que termina la espera tiene menor prioridad que el proceso activo Si el hilo que ha estado esperando no tiene una prioridad mayor que el hilo activo, es insertada al final de la cola que le corresponda Ready Running Desde el estado de espera 1999-2003 S2P, OGP & IGT
Conmutación voluntaria Cuando la tarea activa abandona la CPU Se ejecuta la tarea lista que se encuentre a la cabeza de la cola de prioridad más alta Ready Running Al estado de espera 1999-2003 S2P, OGP & IGT
Finalización de quantum Cuando la tarea activa finaliza su quantum, se coloca al final de la cola de listos Se aplica tanto a tareas de tiempo real como ordinarias, tanto en modo supervisor como usuario Si no existen tareas en la cola, puede continuar su ejecución durante otro q Boosting??? Ready Running 1999-2003 S2P, OGP & IGT
Valor del quantum El quantum estándar es de 2 ticks (12 para NT Server) El clock tick es de 10 ms, 15 ms en algunos Pentium MP El quantum lógico es 6 (36 en NT Server) El quantum se decrementa en 3 cada clock tick Por tanto, el quantum es de 2 ticks Después de una espera el quantum sólo se decrementa en 1 1999-2003 S2P, OGP & IGT
Ensanchamiento del quantum Aplicable a la tarea que se ejecuta en primer plano En lugar de aumentar su prioridad, se le aumenta el quantum Posibles valores: Maximum = 6 ticks Middle = 4 ticks None = 2 ticks Este ensanchamiento no se aplica a NT Server Ready Running 1999-2003 S2P, OGP & IGT
Ajuste de prioridad en W2K Boost y Decay se aplican sólo a hilos con prioridades comprendidas entre 1 y 15 ¿Cuándo se aplica? Fin de E/S Fin de espera por eventos o semáforos La tarea de primer plano finaliza una espera Tareas GUI despiertan como consecuencia de una “window input” Para evitar “CPU starvation” No aplicable a tareas de TR 1999-2003 S2P, OGP & IGT
Boosting Después de una E/S: especificado por el device driver Valores de boost: 1 disco, CD-ROM, puerto paralelo y vídeo 2 puerto serie, red, tubería con nombre 6 teclado y ratón 8 sonido Después de una espera por evento o semáforo Boost = 1 Después de una espera en un “dispatcher object” por parte de la tarea en primer plano Boost = 2 Comportamiento de boost Se aplica a la prioridad base Nunca se debe superar el máximo de 15 Si después del boost se obtiene un quantum Se cae un nivel y se asigna otro quantum Así hasta llegar a la prioridad base 1999-2003 S2P, OGP & IGT
Decay cuando finaliza el quantum Se cae a la siguiente cola Nunca por debajo de la prioridad base Ready Running 1999-2003 S2P, OGP & IGT
Boost y Decay Prioridad Prioridad base Decay Boost Apropiación Activo Espera Activo Ready Activo Tiempo 1999-2003 S2P, OGP & IGT
Boost para hilos GUI Cuando un hilo GUI se despierta como consecuencia de un “window input” se le asigna un boost = 2 Este boost se suma a la prioridad actual, no a la prioridad base Objetivo: mejorar el tiempo de respuesta de las tareas interactivas 1999-2003 S2P, OGP & IGT
¿Cómo evitar la inanición? El “Balance Set Manager” busca esos hilos Es un hilo con prioridad 16 Se despierta cada segundo y analiza la cola de preparados Busca hilos que lleven preparados 300 ticks sin haberse ejecutado Trata de evitar la inversión de prioridades En cada pasada busca 16 hilos listos Sube la prioridad de los hilos (boosting) hasta un valor de 10 1999-2003 S2P, OGP & IGT