Sistemas operativos modernos
Prioridad más alta Prioridad más baja Esperando E/S de disco Esperando búfer de disco Esperando eritradas de terminal Esperando salidas de terminal Esperando a que un hijo exista Prioridad de usuario O Prioridad de usuario 1 Prioridad de usuario 2 Prioridad de usuario 3 O Proceso esperando en modo de kernel <D Proceso esperando en modo de usuario Proceso en cola en el nivel de prioridad 3 Figura 10-11. El calendarizador de UNIX se basa en una estructura de colas multinivel. Consumo_CPU representa el número promedio de tics de reloj que el proceso ha tenido por segundo durante los últimos segundos. Cada vez que el reloj hace tic, el contador de con sumo de CPU en la entrada de tabla de procesos del proceso en ejecución se incrementa en 1. Este contador se sumará al final a la prioridad del proceso, dándole un valor numérico mayor y colocándolo, por tanto, en una cola de más baja prioridad. Sin embargo, UNIX no castiga de manera indefinida a un proceso por usar la CPU, así que ConsumojCPU disminuye con el tiempo. Las diferentes versiones de UNIX emplean distintas formas de realizar la disminución. Una forma que se ha usado, consiste en sumar el valor actual de ConsumojCPU al número de tics en el último A7 y dividir el resultado entre 2. Este algorit mo pondera el A r más reciente con 1 / 2 , el anterior a ése con 1/4, y así en forma sucesiva. Este algoritmo de ponderación es muy rápido porque sólo tiene una suma y un desplazamiento, pe ro también se han usado otros esquemas de ponderación. Cada proceso tiene asociado un valor nice (amabilidad). El valor predeterminado es O, pe ro el intervalo permitido suele ser de -20 a +20. Un proceso puede asignar a nice un valor en tre O y 20 con la llamada al sistema nice. Un usuario que va a calcular 71 con precisión de mil millones de posiciones decimales podría incluir esta llamada en su programa para ser amable con los demás usuarios. Sólo el administrador del sistema puede solicitar un servicio mejor que el normal (o sea, valores de nice entre -20 y -1). El lector puede deducir la justificación de es ta regia como ejercicio. Cuando un proceso salta al kemel para efectuar una llamada al sistema, es muy posible que el proceso tenga que bloquearse antes de terminar dicha llamada y volver al modo de usuario. Por ejemplo, podría haber emitido apenas una llamada al sistema waitpid y tener que esperar hasta que
RkJQdWJsaXNoZXIy MjI4NDcx