Criterio | Descripción | Objetivo |
---|---|---|
Uso de CPU | Mantener la CPU tan ocupada como se pueda | Maximizar |
Throughput | Cantidad de procesos terminados por unidad de tiempo (#finalizados / unidad de tiempo) | Maximizar |
Turnarround | Tiempo ready + running + waiting | Minimizar |
Waiting time | Sumatoria de los tiempos ready | Minimizar |
Response time | Tiempo de inicialización. De new a running la primera vez | Minimizar |
En general vamos a pensar en waiting time promedio, turnarround promedio y un único core.
First-Come, First-Serve (FCFS): Se da el procesador al primer proceso que lo pide. Es non preemptive (en ninguno de los casos el scheduler saca a alguien, o pasa a wait o termina solo).
Round robin: Los agarra en ready, les da a cada proceso un quantum en cada proceso. Si el proceso que se está ejecutando consume su ráfaga de CPU antes de terminar su quantum (es decir, que ingresa en una ráfaga de I/O o el proceso termina por completo), deja la CPU voluntariamente y el scheduler le deja el CPU al siguiente proceso.
Shortest-Job-First (SJF): corremos primero el proceso que tiene menor tiempo de ejecución, uno atrás del otro. Tiene versión preemptive y no preemptive. Es óptimo respecto al Waiting Time promedio, pero no se implementa esto solo en la práctica porque no se puede saber de antemano la longitud de la próxima ráfaga de CPU.
Acá estamos hablando de prioridad, por la longitud de la próxima ráfaga de CPU. Se pueden igualmente establecer prioridades en base a otros criterios.
Prioridades: se le asigna una prioridad a cada proceso, y se elige el más prioritario. Si hay varios procesos con la misma prioridad, se ejecutan en orden FCFS. Puede ser preemptive y no preemptive. Notamos el 0 como el más prioritario.
Como problema, si constantemente llegan procesos de alta prioridad, se produce el fenómeno de starvation. Hay formas de prevenir esto: se puede resolver con Aging: gradualmente incrementar la prioridad de los procesos que están esperando hace mucho.
Multilevel Queue: Se mantienen las colas separadas para cada prioridad. Las prioridades son absolutas: si algo es de nivel 1, hasta no terminar el nivel 1 se corre esto. Revisar slides.
Multilevel Feedback Queue: Permite a los procesos cambiarse de cola. Suele separar a los procesos según sus ráfagas de CPU: a mayor uso de CPU, más baja la prioridad. Se puede implementar aging para evitar starvation. Los de mayor prioridad terminan siendo los intensivos en I/O o interactivos.
Al usar este esquema, hay que justificar:
ACLARACIÓN: Si un proceso estaba en Ready por x tiempo, para evitar starvation, se le puede subir su prioridad. Para bajar la prioridad, basta con consumirse todo el quantum al ejecutarse.
Ráfaga: lo que puede correr de un tirón.
Convoy effect: Corer primero los procesos intensivos en CPU y luego los más chicos. Esto es como un camión que me traba en una ruta en un camino.