Sistemas operativos modernos
prioridad será 20, así que el cuanto se convertirá en 20 jiffies = 200 ms. En cambio, un subpro ceso muy dedicado a la E/S todavía podría tener un cuanto de 20 cuando se restablecen los cuan tos, así que si su prioridad es 20, su nuevo cuanto será de 20/2 + 20 = 30 jiffies. Si se efectúa otro restablecimiento antes de que el subproceso haya gastado un tic, la siguiente vez recibirá un cuan to de 30/2 + 20 = 35 jiffies. El valor asintotico en jiffies es el doble de la prioridad. Como conse cuencia de este algoritmo, los subprocesos dedicados a la E/S obtienen cuantos más grandes y, por tanto, tienen mayor bondad que los subprocesos dedicados al cómputo. Esto da preferencia en la calendarización a los subprocesos dedicados a la E/S. Otra propiedad de este algoritmo es que cuando los subprocesos dedicados al cómputo es tán compitiendo por la CPU, los que tienen mayor prioridad obtienen una fracción mayor. Para ver esto, consideremos dos subprocesos dedicados al cómputo: A, con prioridad 20, y B, con prioridad 5. A se ejecuta primero y 20 tics después ha gastado todo su cuanto. Luego se ejecuta B durante 5 tics. En este momento se restablecen los cuantos. A recibe 20 y fi recibe 5. Esto con tinúa en forma indefinida, así que A obtiene el 80% de la CPU y B, el 20%. 10.3.4 Arranque de UNIX Los detalles exactos de cómo se arranca UNIX varían de un sistema a otro. A continuación exa minaremos de manera breve la forma en que inicia 4.4BSD, pero las ideas son relativamente similares en todas las versiones. Cuando se enciende la computadora, se lee el primer sector del disco de arranque (el registro maestro de arranque), se coloca en la memoria y se ejecuta. Este sector contiene un programa pequeño (512 bytes) que carga un programa autónomo lla mado boot del dispositivo de arranque, que suele ser un disco IDE o SCSI. El programa boot primero se copia a sí mismo en una dirección fija de la memoria alta para que el sistema ope rativo pueda ocupar la memoria baja. Una vez allí, boot lee el directorio raíz del dispositivo de arranque. Para ello, debe enten der el sistema de archivos y el formato de directorio. Luego lee el kemel del sistema operati vo, lo coloca en memoria y salta a él. En este punto, boot termina su labor y se ejecuta el kemel. El código de inicio del kemel está escrito en lenguaje ensamblador y depende en alto gra do de la máquina. Entre sus labores típicas están preparar la pila del kemel, identificar el tipo de CPU, calcular la cantidad de RAM presente, inhabilitar las interrupciones, habilitar la MMU y, por último, invocar el procedimiento main del lenguaje C para iniciar la parte principal del sistema operativo. El código en C también tiene muchas labores de inicialización que realizar, pero son más ló gicas que físicas. Lo primero que hace es asignar un búfer de mensajes que ayuda a depurar los problemas de arranque. A medida que continúa la inicialización, se escriben aquí mensajes rela tivos a lo que está sucediendo, para que un programa especial de diagnóstico pueda examinarlos en caso de un fallo de arranque. Esto puede verse como la grabadora de vuelo en la cabina del sistema operativo (la caja negra que los investigadores buscan cuando se estrella un avión). Luego se asigna memoria a las estructuras de datos del kemel. Casi todas son de tamaño fijo, pero unas cuantas, como el caché de búfer y ciertas estructuras de la tabla de páginas, de penden de la cantidad de RAM disponible.
RkJQdWJsaXNoZXIy MjI4NDcx