Sistemas operativos modernos
El código para calendarizar subprocesos también está en el kernel. Cuando llega el mo mento de ver si puede ejecutarse un nuevo subproceso, por ejemplo, después de que se agota un cuanto o después de que termina una interrupción de E/S, el kemel escoge el subproceso y efectúa la conmutación de contexto necesaria para ejecutarlo. Desde el punto de vista del res to del sistema operativo, las capas inferiores manejan en forma automática la conmutación de subprocesos de forma portátil, sin que el resto del sistema operativo tenga que efectuar trabajo alguno. El algoritmo de calendarización en sí se tratará más adelante en el capítulo, cuando lle guemos a los procesos y subprocesos. Además de proporcionar una abstracción de más alto nivel del hardware y de encargarse de las conmutaciones de subprocesos, el kemel tiene otra función clave: proporcionar apoyo de bajo nivel para dos clases de objetos: objetos de control y objetos de despachador. Éstos no son los objetos para los cuales los procesos de usuario reciben identificadores, sino objetos inter nos sobre los que el ejecutivo construye los objetos de usuario. Los objetos de control son aquellos que controlan el sistema e incluyen los objetos de proce so primitivos, los objetos de interrupción y dos objetos un tanto extraños llamados DPC y APC. Un objeto de llamada diferida a procedimiento (DPC; Deferred Procedure Cali) sirve para separar la parte de un procedimiento de servicio de interrupción para la cual el tiempo no es crítico, de la parte para la cual sí lo es. En general, un procedimiento de servicio de interrupción guarda unos cuantos registros de hardware volátiles asociados al dispositivo de E/S interruptor para que no se so brescriban, y vuelve a habilitar el hardware, pero deja el grueso del procesamiento para después. Por ejemplo, cuando se oprime una tecla, el procedimiento de servicio de interrupción del teclado lee el código de tecla de un registro y vuelve a habilitar la interrupción del teclado, pe ro no necesita procesar la tecla de inmediato, sobre todo si está sucediendo algo más importante (es decir, de más alta prioridad) en ese momento. Mientras la tecla se procese en un plazo no mayor de 100 ms, el usuario no notará el retraso. Las DPCs también se usan con los vencimien tos de temporizador y otras actividades cuyo procesamiento real no fiene que ser instantáneo. La cola de DPC es el mecanismo para recordar que hay más trabajo por hacer después. Otro objeto de control del kemel es la llamada asincrona a procedimiento (APC; asynchronous procedure cali). Las APCs son como las DPCs, excepto que se ejecutan en el contexto de un proceso específico. Al procesar una pulsación, no importa en qué contexto se ejecute la DPC porque lo único que va a suceder es que va a inspeccionarse el código de tecla y tal vez se colocará en un búfer del kemel. En cambio, si una interrupción requiere que se copie un búfer del espacio de kemel en un búfer del espacio de direcciones de algún proceso de usuario (por ejemplo, como cuando se termina de leer del módem), entonces el procedimiento de co piado necesitará ejecutarse en el contexto del receptor. Se requiere el contexto del receptor para que la tabla de páginas contenga tanto el búfer de kemel como el búfer de usuario (todos los procesos confienen el kemel completo en sus espacios de direcciones, como veremos más ade lante). Por este motivo, el kernel distingue entre las DPCs y las APCs. El otro tipo de objetos de kemel comprende los objetos de despachador. Éstos incluyen semáforos, mutexes, sucesos, temporizadores susceptibles de esperarse y otros objetos que pueden esperar los subprocesos. La razón por la que éstos tienen que manejarse (en parte) en el kemel es que están ínfimamente enlazados con la calendarización de subprocesos, que es una tarea del kemel. Por cierto, los mutexes se llaman “mutantes” en el código porque tenían que
RkJQdWJsaXNoZXIy MjI4NDcx