Fundamentos de Sistemas Operativos

Anuncio
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
Descargar