Sistemas operativos modernos
do plano debe tener más baja prioridad que uno que exhibe un vídeo en la pantalla en tiempo real. Para evitar que los procesos con prioridades altas se ejecuten de manera indefinida, el ca lendarizador podría decrementar la prioridad del proceso que se está ejecutando en cada tic del reloj (es decir, en cada interrupción de reloj). Si esta acción hace que la prioridad llegue a ser más baja que la del siguiente proceso de más alta prioridad, habrá una conmutación de proce sos. Como alternativa, se podría asignar a cada proceso un cuanto de tiempo máximo durante el cual puede ejecutarse. Una vez consumido ese cuanto, el proceso con la siguiente prioridad más alta recibirá la oportunidad de ejecutarse. Las prioridades pueden asignarse a los procesos de forma estática o dinámica. En una computadora militar, los procesos iniciados por generales podrían comenzar con prioridad 100 ; los iniciados por coroneles, con 90; mayores con 80; capitanes con 70; tenientes con 60, y así en forma sucesiva. O bien, en un centro de cómputo comercial, los trabajos de alta priori dad podrían costar 100 dólares la hora; los de mediana prioridad, 75, y los de baja prioridad, 50. El sistema UNIX tiene un comando, nice, que permite a un usuario reducir de manera vo luntaria la prioridad de su proceso, a fm de ser amable con los demás usuarios. Nadie la usa nunca. El sistema también podría asignar prioridades en forma dinámica a fm de lograr ciertos objetivos del sistema. Por ejemplo, algunos procesos están muy dedicados a la E/S y pasan ca si todo el tiempo esperando que terminen las operaciones de E/S. Cada vez que un proceso de este tipo quiera la CPU, se le debería conceder de inmediato para que pueda iniciar su siguien te solicitud de E/S, la cual puede atenderse en paralelo con otro proceso que sí esté computan do. Hacer que los procesos dedicados a la E/S esperen mucho tiempo la CPU sólo implicaría tenerlos innecesariamente en la memoria durante un buen rato, ocupando lugar. Un algoritmo sencillo para dar buen servicio a los procesos dedicados a la E/S consiste en asignar como prio ridad 1//, donde/es la fracción del último cuanto que gastó un proceso. Un proceso que utili zó sólo 1 ms de su cuanto de 50 ms obtendría una prioridad de 50, mientras que uno que se ejecutó durante 25 ms antes de bloquearse recibiría prioridad 2, y uno que gastó todo el cuan to tendría prioridad 1 . En muchos casos es conveniente agrupar los procesos en clases de prioridad y utilizar ca lendarización por prioridades entre las clases, pero calendarización por tumo circular dentro de cada clase. La figura 2-42 muestra un sistema con cuatro ciases de prioridad. El algoritmo de calendarización es el siguiente: mientras haya procesos ejecutables en la clase de prioridad 4, se ejecutará cada uno durante un cuanto, por tumo circular, sin ocuparse de las clases de más baja prioridad. Si la clase 4 está vacía, se ejecutan los procesos de ciase 3 por tumo circular. Si tanto la clase 4 como la 3 están vacías, se ejecuta la clase 2 por tumo circular, y así en forma su cesiva. Si las prioridades no se ajustan de vez en cuando, podría ser que las clases de más baja prioridad mueran de inanición. Múltiples colas Uno de los primeros calendarizadores por prioridades se usó en CTSS (Corbató et al., 1962). CTSS tenía el problema de que la conmutación de procesos era muy lenta porque la 7094 só-
RkJQdWJsaXNoZXIy MjI4NDcx