Algoritmos de Planificación First-Come, First Served (FCFS) La política más simple de planificación es la FCFS. A medida que un proceso pasa al estado listo, este es agregado a la cola de listos. Cuando el proceso que actualmente está ejecutando cesa su ejecución entonces el proceso más viejo en la cola es seleccionado para correr. La implementación de esta política es a través de colas FIFO (First-In, First-Out). Cuando el CPU está libre, éste es asignado al proceso que está en la cabeza de la cola. FCFS es un algoritmo nonpreemptive, pues una vez que el CPU es asignado a un proceso, este lo mantiene hasta que espontáneamente lo suelta, ya sea porque el proceso finalizó o por algún requerimiento de E/S. El tiempo de espera bajo esta política tiende a ser alto. Además , tiende a favorecer aquellos procesos que requieren más tiempo de CPU (CPU-bound). Consideren el caso donde tenemos una colección de procesos. Uno de ellos utiliza más CPU que los otros, y el resto de los procesos requieren más trabajo de E/S (I/O-bound). Cuando el proceso CPU-bound ejecuta, los otros procesos esperan. Algunos de estos estarán en las colas de los dispositivos de E/S pero eventualmente en algún instante pasarán a la cola de procesos listos. En este momento, muchos de los dispositivos de E/S estarán ociosos. Cuando el proceso en ejecución deje el estado Running, los procesos I/O-bound pasarán a ejecutar y rápidamente volverán a bloquearse en espera de E/S. Si el proceso CPU-bound se encuentra bloqueado, entonces el procesador estará ocioso. Por lo tanto, FCFS puede ocasionar un uso indeficiente tanto del procesador como de los dispositivos de E/S. Proceso Tiempo de Tiempo de Tiempo de Tiempo de Turnaround Tiempo de llegada Servicio Comienzo Finalización Espera A 0 1 0 1 1 0 B 1 100 1 101 100 0 C 2 1 101 102 100 101-2=99 D 3 100 102 202 199 102-3=99 100 49.50 Promedio Proceso Tiempo de Tiempo de Tiempo de Tiempo de Turnaround Tiempo de llegada Servicio Comienzo Finalización Espera B 0 100 0 100 100 0 D 1 100 100 200 199 100-1=99 A 2 1 200 201 201-2=199 200-2=198 C 3 1 201 202 202-3=199 201-3=198 232 123.50 Promedio El tiempo promedio de espera bajo una política FCFS generalmente no es mínimo y puede variar sustancialmente si hay mucha diferencia entre las duraciones de ciclo de los procesos. En el segundo ejemplo, se presenta un efecto convoy donde los procesos esperan a que un proceso grande deje el CPU Shortest-Job-First (SJF) Este algoritmo selecciona al proceso con el próximo tiempo de ejecución más corto. Un proceso corto saltará a la cabeza de la cola. La ejecución de un proceso consiste en ciclos de ejecución de CPU y ciclos de espera por E/S. El algoritmo selecciona aquel proceso cuyo próximo ciclo de ejecución de CPU sea menor. El problema está en conocer dichos valores, pero podemos predecirlos usando la información de los ciclos anteriores ejecutados. SJF Proceso Tiempo de Tiempo de Tiempo de Tiempo de Turnaround Tiempo de llegada Servicio Comienzo Finalización Espera A 0 8 0 8 8 0 B 1 4 8 12 12-1=11 8-1=7 C 2 9 17 26 26-2=24 17-2=15 D 3 5 12 17 17-3=14 12-3=9 14.25 10.33 Promedio FCFS Proceso Tiempo de Tiempo de Tiempo de Tiempo de Turnaround Tiempo de llegada Servicio Comienzo Finalización Espera A 0 8 0 8 8 0 B 1 4 8 12 12-1=11 8-1=7 C 2 9 12 21 21-2=19 12-2=10 D 3 5 21 26 26-3=23 21-3=18 20.33 11.66 Promedio El SJF es probablemente optimal pues da el mínimo tiempo promedio de espera. El problema está en conocer la duración del próximo requerimiento de CPU para cada proceso. Esta duración puede predecirse suponiendo que el próximo ciclo puede ser similar a los anteriores. Este algoritmo puede ser preemptive o no. Cuando un nuevo proceso llega a la cola de procesos listos mientras otro se está ejecutando, el nuevo proceso puede tener el ciclo de duración de CPU más corto que lo que falta por ejecutar del proceso actual. En el caso de un esquema preemptive, el CPU será asignado al proceso que acaba de llegar a la cola. Este algoritmo se conoce como Shortest Remaining Time First (SRTF). Prioridad En muchos sistemas, los procesos tienen prioridades asignadas, y el planificador escogerá aquel proceso con mayor prioridad. Cuando un proceso debe ser seleccionado, el planificador por prioridades seleccionará aquel proceso que tenga mayor prioridad. Si hay más de un proceso entonces se deberá seguir alguna política de selección. Un problema que presenta un esquema de planificación por prioridades puro es que los procesos con la prioridad más baja pueden sufrir de inanición o bloqueo indefinido. Un proceso que está listo para correr pero espera porque siempre hay procesos con prioridad más alta. Para evitar este problema, se puede ir incrementando gradualmente la prioridad de los procesos (envejecimiento). SJF es un caso especial de planificación por Prioridad, donde la prioridad es el inverso del valor estimado del próximo ciclo de CPU ( a menor ciclo, mayor prioridad). Proceso Tiempo Prioridad Tiempo de de llegada Servicio Tiempo Tiempo de Turnaround Tiempo de Finalización de Comienzo Espera A 0 2 8 0 8 8 0 B 1 1 4 22 26 26-1=25 221=21 C 2 4 9 8 17 17-2=15 8-2= 6 D 3 2 5 17 22 22-3=19 173=14 16.75 10.25 Promedio Este algoritmo puede ser preemptive y nonpreemptive. En el caso de preemptive, cuando un proceso llega a la cola de procesos listos, su prioridad es comparada con la prioridad del proceso que está corriendo. Si la prioridad del nuevo proceso es mayor, entonces se atiende al nuevo proceso. Round Robin Una manera rápida de reducir la penalización que los procesos cortos sufren con FCFS es usar expropiación basada en un reloj. Una interrupción de reloj es generada a intervalos periódicos. Cuando ocurre la interrupción, el proceso en ejecución es colocado en la cola de procesos listos y el próximo trabajo es seleccionado basado en el esquema FCFS. A cada proceso se le da un trozo de tiempo. La principal decisión de dise�o que surge con Round Robin es el tama�o del trozo o quantum. Si el quantum es muy corto, entonces los procesos se moverán a través del sistema rápidamente. Por otro lado, hay un cierto overhead o desperdicio de tiempo envuelto con el manejo de la interrupción de reloj y las funciones de planificación y despacho. Por lo tanto quanta muy peque�os deberían evitarse. Una alternativa es usar un quantum de tiempo que sea un poco más grande que el tiempo promedio requerido para una interacción típica. Round Robin es particularmente efectivo para sistemas generales de tiempo compartido. Se implementa con una cola FIFO de procesos. Nuevos procesos son agregados al final de la cola, y toma el proceso que se encuentra en la cabeza de la cola. Actualiza el timer para que interrumpa después del quantum de tiempo. El desempe�o de este algoritmo dependerá del tama�o del quantum. Si el quantum es infinito entonces degenera en FCFS. Si el quantum es muy peque�o entonces Round Robin es llamado compartición de CPU y en teoría pareciera que cada proceso tiene su propio procesador corriendo a 1/n la velocidad del procesador real. Bajo este esquema es importante considerar el efecto del cambio de contexto. Round Robin (RR q=3) Proceso Tiempo de Tiempo de Tiempo de Tiempo de Turnaround Tiempo de llegada Servicio Comienzo Finalización Espera A 0 8 0, 12, 21 3, 15, 23 23 15 B 1 4 3, 15 6, 16 16-1=15 11 C 2 9 6, 16, 23 9, 19, 26 26-2=24 15 D 3 5 9, 19 12,21 21-3=18 11 20 13 Promedio