Sistemas operativos modernos
uno de sus hijos termine con exit. También podría tener que esperar entradas de la terminal o que termine una E/S de disco, para mencionar sólo unas cuantas de las muchas posibilidades. Cuando se bloquea el proceso, se saca de la estructura de colas, pues no puede ejecutarse. Sin embargo, cuando ocurre el suceso que estaba esperando, se coloca en una cola con un valor negativo. La cola escogida depende del suceso que se estaba esperando. En la figura 10-11 la E/S de disco aparece con la prioridad más alta, así que es probable que un proceso que acaba de leer o escribir un bloque de disco recibirá la CPU en menos de 100 ms. La prioridad relativa de la E/S de disco, la E/S de terminal, etcétera, está incorporada de origen al sistema operativo y sólo puede modificarse cambiando ciertas constantes en el código fuente y recom- pilando el sistema. Estos valores (negafivos) están representados por base en la fórmula ante rior, y están lo bastante espaciados como para que los procesos que se reinician por diferentes motivos queden separados con claridad en diferentes colas. Lo que se busca con este esquema es sacar rápido del kernel a los procesos. Si un proceso está tratando de leer un archivo de disco, obligarlo a esperar un segundo entre una llamada read y la siguiente lo hará muy lento. Es mucho mejor dejar que se ejecute de inmediato al terminar cada solicitud, para que pronto pueda hacer la siguiente. Asimismo, si un proceso estaba blo queado esperando entradas de la terminal, es obvio que se trata de un proceso interactivo, y, co mo tal, se le deberá dar una prioridad alta tan pronto como esté listo, para garantizar que los procesos interactivos reciban buen servicio. En vista de lo anterior, los procesos dedicados a la CPU (es decir, los que están en las colas positivas) básicamente reciben el servicio que sobra cuando todos los procesos dedicados a la E/S e interactivos están bloqueados. Calendarización en Linux La calendarización es una de las pocas áreas en las que Linux emplea un algoritmo distinto del de UNIX. Acabamos de examinar el algoritmo de calendarización de UNIX, así que ahora ve remos el de Linux. Por principio de cuentas, los subprocesos en Linux son subprocesos de ker nel, así que la calendarización se basa en subprocesos, no en procesos. Linux distingue tres clases de subprocesos para fines de calendarización: 1. FIFO en tiempo real. 2. Turno circular en tiempo real. 3. Tiempo compartido. Los subprocesos FIFO en tiempo real tienen la prioridad más alta y sólo pueden ser expropiados por un subproceso FIFO en tiempo real que recién haya quedado listo. Los subprocesos de tumo circular en tiempo real son iguales a los FIFO en tiempo real, excepto que pueden ser expropia dos por el reloj. Si múltiples subprocesos de tumo circular en tiempo real están listos, cada uno se ejecuta durante su cuanto, después de lo cual se coloca al final de la lista de subprocesos de tumo circular en tiempo real. Ninguna de estas clases es en verdad de tiempo real en senfido al guno. No es posible especificar plazos y no se ofrecen garantías. Estas clases tan sólo son de más alta prioridad que los subprocesos de la clase de tiempo compartido estándar. En Linux se les lia-
RkJQdWJsaXNoZXIy MjI4NDcx