Sistemas operativos modernos
ma de tiempo real porque Linux se ajusta al estándar P1003.4 (extensiones de “tiempo real” a UNIX) que usa esos nombres. Cada subproceso tiene una prioridad de calendarización. El valor predeterminado es 20, pero se puede alterar utilizando la llamada al sistema nice(valor) para que tenga un valor de 20 - va lor. Puesto que valor debe estar dentro del intervalo de -20 a +19, las prioridades siempre están en el intervalo 1< prioridad < 40. La intención es que la calidad del servicio sea más o menos pro porcional a la prioridad, y que los subprocesos de más alta prioridad obtengan una respuesta más rápida y una fracción más grande del tiempo de CPU que los de menor prioridad. Además de una prioridad, cada subproceso tiene asociado un cuanto. El cuanto es el núme ro de tics de reloj durante los cuales puede ejecutarse el proceso como máximo. De manera pre determinada, el reloj opera a 100 Hz, así que cada tic es 10 ms, y se llama jiffy. El calendarizador utiliza la prioridad y el cuanto como sigue. Primero calcula la bondad de cada subproceso listo aplicando las siguientes reglas: if (clase == tiempo_real) bondad = 1000 + prioridad: if (clase == tiempo_compartido && cuanto > 0) bondad = cuanto + prioridad; if (clase == tiempo_compartido && cuanto == 0) bondad = 0; Ambas clases de tiempo real cuentan para la primera regla. El único efecto de designar a un sub proceso como de tiempo real es garantizar que tenga una bondad mayor que la de cualquier subproceso de tiempo compartido. El algoritmo tiene un detalle más: si al último proceso que se ejecutó todavía le queda una parte de su cuanto, se le da un punto adicional, para ganar en caso de un empate. La idea aquí es que, si todos los demás factores son idénticos, resulta más eficiente eje cutar el proceso anterior porque es probable que ya estén cargados sus páginas y bloques de caché. Dado lo anterior, el algoritmo de calendarización es muy sencillo: cuando se toma una decisión de calendarización, se escoge el subproceso que tiene la bondad más alta. Conforme se ejecuta el subproceso seleccionado, su cuanto se decrementa en 1 en cada fie de reloj. Se le quita la CPU a un subproceso si se presenta cualquiera de las siguientes condiciones: 1. Su cuanto llega a 0. 2. El subproceso se bloquea por E/S, por un semáforo o por otra cosa. 3. Un subproceso que estaba bloqueado y tiene mayor bondad queda fisto para ejecutarse. Puesto que los cuantos siguen con su cuenta regresiva, tarde o temprano todos los subpro cesos listos se quedarán sin cuanto. Sin embargo, los subprocesos dedicados a la E/S que están bloqueados en ese momento podrían tener todavía algo de cuanto. En este punto, el calendari zador restablece el cuanto de todos los subprocesos, listos o bloqueados, empleando la regla: cuanto = (cuanto/2) + prioridad donde el nuevo cuanto está en jiffies. Un subproceso muy dedicado al cómputo por lo regular ago tará rápido su cuanto y lo tendrá en Ocuando se restablezcan los cuantos, así que recibirá un cuan to igual a su prioridad. Un subproceso dedicado a la E/S podría tener una buena cantidad de cuanto sobrante y, por tanto, recibirá un cuanto más grande la siguiente vez. Si no se usa nice, la
RkJQdWJsaXNoZXIy MjI4NDcx