• No se han encontrado resultados

Scheduling de procesos

In document Conceptos de Sistemas Operativos (página 36-39)

El objetivo de la multiprogramación es el de tener algún proceso corriendo en todo momento, para maximizar la utilización de la CPU. El objetivo del tiempo compartido es el de intercambiar la CPU entre varios procesos tan frecuentemente de manera que los usuarios puedan interactuar con los programas a medida que éstos están corriendo. Para un sistema uniprocesador, allí nunca habrá más que un proceso corriendo en un instante dado. En caso de que halla más procesos, deberán esperar hasta que la CPU se libere y puedan ser elegidos para ocuparla.

Cola de scheduling: Cuando un proceso entra al sistema, es ubicado en una cola de trabajos. Esta cola consiste de todos los procesos en el sistema. Los procesos que están residiendo en la memoria principal y están listos y esperan para ejecutarse son ubicados en una cola llamada cola de listos. Esta cola es generalmente almacenada en una lista vinculada. La cabeza de la cola de listos contendrá un puntero al primer y último PCB de la lista. Cada PCB tiene un puntero al siguiente PCB de la lista.

Existen también otras colas en el sistema. Cuando a un proceso se le asigna la CPU, éste ejecuta por un tiempo y luego abandona, es interrumpido, o espera por la ocurrencia de un evento en particular, tal como

Proceso P0 Sistema operativo Proceso P1 Interrupción o llamada al sistema

Ejecutando Ocioso Almacenar el estado en PCB0 . . .

Recargar el estado desde el PCB1

Interrupción o llamada al sistema

Almacenar el estado en PCB1

. . .

Recargar el estado desde el PCB0

Ocioso Ejecutando Ocioso

Ejecutando

la completitud de un pedido de I/O. En caso que sea un pedido de I/O, tal pedido puede ser de un drive de cinta dedicado (es decir, no compartido), o de un dispositivo compartido, tal como un disco. Ya que existen muchos procesos en el sistema, el disco puede estar ocupado con el pedido de I/O de otro proceso. De esta manera, el proceso puede tener que esperar por el disco. Esta lista de procesos esperando por dispositivo de I/O particular es llamada cola de dispositivos. Cada dispositivo tiene su propia cola de dispositivo.

En cada cola lo que existe es el PCB del proceso en particular y cada cabeza de la cola tiene un puntero al primer y último PCB. De la misma forma, cada PCB tiene un puntero al siguiente PCB.

Una representación común para el proceso de scheduling es un diagrama de cola, como el que se ve en la figura 4.5. Cada rectángulo es una cola. Están presentes dos tipos de colas: la cola de listos y un conjunto de colas de los dispositivos. Los círculos representan los recursos que sirven a las colas, y las flechas indican el flujo del proceso en el sistema.

Un nuevo proceso es inicialmente puesto en la cola de listos. Este espera en la cola de listos hasta que sea seleccionado para su ejecución (o dispatched) y se le otorga la CPU. Una vez que se le asigna la CPU y es ejecutado, pueden ocurrir uno de varios eventos:

·

El proceso podría emitir un pedido de I/O, entonces es ubicado en una cola de I/O.

·

El proceso podría crear nuevos subprocesos y esperar por su terminación.

·

El proceso podría ser removido forzosamente de la CPU como el resultado de la interrupción, y podría ser puesto otra vez en la cola de listos.

En los primeros dos casos, el proceso cambia de un estado de espera a un estado de listo, por lo que es puesto nuevamente en la cola de listos. El proceso continúa el ciclo hasta que termina, donde se produce la eliminación de su PCB de todas las colas y se liberan los recursos que utilizo.

Schedulers: Un proceso va pasando entre las varias colas de schedulers en su tiempo de vida. El sistema operativo debe seleccionar procesos de estas colas en cada momento. Este proceso de selección es llevado a cabo por el scheduler.

En un sistema de lotes, existen a menudo muchos procesos que pueden ser ejecutados inmediatamente. Estos procesos son spooled a un dispositivo de almacenamiento masivo (típicamente un disco), donde son mantenidos para su posterior ejecución. El scheduler de plazo extenso (job scheduler) selecciona procesos de esta “pileta” y los cargan en la memoria principal para que sean ejecutados. El scheduler de plazo pequeño (CPU scheduler) selecciona uno de los diferentes procesos que están listos para ser ejecutados, y le asigna la CPU.

La distinción más importante entre éstos dos schedulers es la frecuencia de su ejecución. El scheduler de corto plazo debe seleccionar un proceso para la CPU muy frecuentemente. Un proceso puede ejecutar solo por unos pocos milisegundos antes de que tenga que esperar por una I/O. El scheduler de largo plazo, por

Cola de listos CPU

I/O Cola de I/O

Esperando por una interrupción Bifurcación (fork) un hijo Parte de tiempo termino

Pedido de I/O

Ejecuta el hijo Ocurrio la interrupción

otro lado, se ejecuta menos frecuentemente. Pueden pasar minutos hasta que se cree un nuevo proceso en el sistema. El scheduler de largo plazo controla el grado de multiprogramación (el número de procesos en memoria). Si el grado de multiprogramación es estable, entonces la tasa promedio de procesos que ingresan en el sistema debe ser igual a la tasa promedio de procesos que dejan el sistema. Así, el scheduler de largo plazo puede necesitar ser invocado solo en caso que un proceso deja el sistema. Por el largo tiempo entre invocaciones del scheduler de largo plazo, se le otorga más tiempo en decidir cual es el próximo proceso que entrará en memoria.

Es importante que el scheduler de largo plazo haga una selección cuidadosa. En general, la mayoría de los procesos pueden ser descriptos como I/O bound (limitado a I/O), o CPU bound (limitado a “ejecutar”). Un proceso I/O bound es aquel que gasta la mayor parte del tiempo haciendo I/O que en cálculos. Un proceso CPU bound es, por otro lado, aquel que genera I/O infrecuentemente, utilizando la mayor parte de su tiempo realizando cálculos. Es importante que el scheduler de largo plazo haga una selección paraje entre los procesos I/O bound y CPU bound, ya que si todos los procesos son I/O bound, la cola de listos estará casi siempre vacía, y el scheduler de corto plazo tendrá poco por hacer. En cambio, si todos los procesos son CPU bound, la cola de espera por I/O estará vacía, los dispositivos estarán sin uso, y el sistema estar nuevamente desbalanceado. El sistema con el mejor rendimiento tendrá una combinación de procesos CPU bound y I/O bound.

En algunos sistemas, el scheduler de largo plazo puede estar ausente o ser mínimo. Por ejemplo, los sistemas de tiempo compartido a menudo no tienen scheduler de largo plazo, ya que ponen cada nuevo proceso en memoria por medio del scheduler de corto plazo. La estabilidad de este sistema depende o de una limitación física (tal como el número de terminales disponibles) o por el propio ajuste de los usuarios humanos. En caso de que la performance decline a niveles inaceptables, algunos usuarios abandonarán. Algunos sistemas operativos, tal como los sistemas de tiempo compartido, pueden introducir un adicional e intermedio nivel de scheduler. Este scheduler de medio plazo se ve en la figura 4.6. La idea clave del scheduler de medio plazo es que éste puede ser ventajoso para eliminar procesos de la memoria y así reducir el grado de multiprogramación. Un tiempo más tarde, el proceso puede ser reintroducido en la memoria y continuar su ejecución donde se había dejado. Este esquema es llamado swaping. El proceso es swap in y swap out por el scheduler de medio plazo. Swaping puede ser necesario para mejorar la mezcla de procesos, o por un cambio en los requerimientos de la memoria el cual pueden provocar que se disminuya la cantidad de memoria disponible, teniendo que liberar memoria.

Context switch: Cambiar la CPU a otro proceso requiere guardar el estado del proceso viejo y cargar el estado salvado del nuevo proceso. Esta tarea es conocida como context switch. El tiempo del context switch es puro overhead, ya que el sistema no hace trabajo útil mientras cambia de procesos. Su velocidad varia según la maquina, dependiendo de la velocidad de memoria, el número de registros que debe copiar, y la existencia de instrucciones especiales (tal como una única instrucción que almacena o carga todos los registros).

Cola de listos CPU

I/O

Procesos parcialmente ejecutados llevados desde

memoria a disco.

Fin

Cola de espera de I/O Swap out Swap in

In document Conceptos de Sistemas Operativos (página 36-39)