Sistemas operativos modernos

El administrador de objetos necesita mantener estructuras de datos dinámicas (sus obje­ tos), pero no es la tínica parte del ejecutivo que tiene esa necesidad. Otros componentes tam­ bién necesitan asignar y liberar en forma dinámica trozos de memoria del kernel. Para satisfacer estas necesidades, el ejecutivo mantiene dos reservas de páginas en el espacio de di­ recciones del kernel. para objetos y para otras estructuras de datos dinámicas. Tales reservas operan como heaps\ algo similar a las llamadas malloc y free para administrar datos dinámicos en el lenguaje C. Una reserva se pagina pero la otra no (es decir, está fija en la memoria). Los ob­ jetos que se necesitan a menudo se manfienen en la reserva no paginada; los objetos a los que rara vez se fiene acceso, como las claves del Registro y cierta información de seguridad, se mantienen en la reserva paginada. Si la memoria escasea, estas últimas pueden paginarse a disco y traerse cuando se produzca un fallo de página. De hecho, hay porciones considerables del có­ digo y estructuras de datos del sistema operativo que pueden paginarse a fin de reducir el con­ sumo de memoria. Los objetos que podrían necesitarse cuando el sistema está ejecutando código crucial (y cuando no se permite paginar) deben colocarse en la reserva no paginada. Si se requiere una canfidad de almacenamiento pequeña, puede tomarse una página de cualquie­ ra de las dos reservas y dividirse en unidades que pueden tener desde 8 bytes. Los objetos tienen tipo, lo que significa que cada uno fiene ciertas propiedades comunes a todos los objetos de su tipo. El tipo se indica en el encabezado con un apuntador a un objeto de fipo, como se muestra en la figura 11-9. La información de tipo del objeto incluye cosas co­ mo el nombre del tipo, si un subproceso puede esperar o no a ese objeto (sí en el caso de mu­ texes, no en el caso de archivos abiertos), y la reserva (paginada o no paginada) en la que se colocan los objetos nuevos de este tipo. Cada objeto apunta a su objeto de fipo. El úlfimo elemento de un objeto de tipo es también el más importante: apuntadores al có­ digo para ciertas operaciones estándar como open, close y delete. Cada vez que se invoca una de estas operaciones para un objeto, se sigue el apuntador al objeto de fipo y de ahí se locali­ za y ejecuta el código pertinente. Este mecanismo proporciona al sistema la oportunidad de asignar valores iniciales a los objetos nuevos y recuperar memoria cuando se eliminan. Los componentes del ejecutivo pueden crear nuevos objetos en forma dinámica. No exis­ te una lista definitiva de fipos de objetos, pero en la figura 11-10 se presentan los más comu­ nes. Demos un vistazo a los tipos de objetos de esa figura. Los procesos y subprocesos son obvios; hay un objeto para cada proceso y para cada subproceso, el cual contiene las principa­ les propiedades que se necesitan para administrarlo. Los siguientes tres objetos, semáforo, mutex y suceso, se ocupan de la sincronización de procesos. Los semáforos y mutexes funcionan como cabría esperar, pero con diversas funciones adicionales (como valores máximos y plazos). Los sucesos pueden estar en uno de dos estados: señalizados o no. Si un subproceso está esperando un suceso que está señalizado, el subproceso se libera de inmediato. Si el suceso no está seña­ lizado, el subproceso se bloquea hasta que algún otro subproceso envía una señal al suceso, con lo cual se liberan todos los subprocesos bloqueados. También es posible configurar un suceso de modo que, una vez que un subproceso ha esperado con éxito una señal, el suceso se revier­ ta de manera automática al estado no señalizado, en vez de quedarse en el estado señalizado. Los objetos de puerto, temporizador y cola también tienen que ver con la comunicación y la sin­ cronización. Los puertos son canales entre procesos para intercambiar mensajes. Los temporizadores ofrecen un mecanismo para bloquearse durante un intervalo específico. Las colas sirven para notifi­ car a los subprocesos que ya terminó una operación de E/S asincrona que se había iniciado antes.

RkJQdWJsaXNoZXIy MjI4NDcx