La siguiente es una duda que encontré al hacer una asignación de inicio del sistema operativo; sin embargo, parece más basada en el concepto que una pregunta de codificación directa, por lo que en mi humilde opinión, no creo que la etiqueta de tarea sea adecuada para esto.
En un esquema de paginación de demanda pura para múltiples procesos que se ejecutan al mismo tiempo, dada una cantidad fija de RAM y memoria de intercambio, lo que sucede en los siguientes 2 casos es el espacio de intercambio, cuando
Un proceso encuentra una falla de página, y no hay marcos libres disponibles en la RAM, por lo tanto, se requiere que una de las páginas del fragmento de Kernel Frames del proceso se escriba para intercambiar (por simplicidad, no estoy considerando la copia -en caso de escritura). Explícitamente, ¿en qué parte del espacio Swap se escribiría este marco y qué estructuras de datos deben actualizarse para eso?
Cuando un proceso necesita paginar en una página en particular, ¿dónde se ve en la memoria de Swap y cómo sabría si esa página en particular estaría presente en Swap?
Como se puede imaginar, estoy teniendo dificultades para comprender de qué manera administrar el espacio Swap durante el esquema de gestión de la demanda pura, y qué estructuras de datos serían esenciales. Sería genial si pudiera hacer referencia a cualquier enlace en su respuesta (busqué en "Conceptos del sistema operativo - 8ª edición por Silberschatz, no pude encontrar una respuesta explícita para mi pregunta").
Respuestas:
Para responder a esta pregunta, visitaré algunos requisitos previos de comprensión. La paginación de demanda pura no se puede lograr sin soporte de hardware. Todas las arquitecturas informáticas modernas admiten la paginación, sin embargo, muchas tienen detalles de implementación diferentes.
Los procesadores x86 usan lo que se llama una tabla de páginas para realizar un seguimiento de los espacios de direcciones virtuales y las asignaciones de páginas, así como también bits sobre los privilegios de acceso y, más relevante, si esa página está presente o no en la memoria física. Las violaciones desencadenan fallas de página que quedan atrapadas por el sistema operativo.
Para obtener más información al respecto, consulte este artículo .
Para responder a la pregunta sobre el intercambio de páginas, primero debemos visitar la pregunta de cómo el sistema operativo realiza un seguimiento de qué páginas son utilizadas por qué proceso y cómo se asignan. Hay muchas estructuras de datos diferentes que se pueden utilizar para tal. Una matriz de bits plana que marca si un cuadro está asignado o no es unidireccional. Listas o pilas enlazadas es otra. Con la paginación de demanda pura, las páginas asignadas en realidad no se marcan como presentes cuando se asignan. Esto tiene el efecto de que no se reserva ningún carnero físico para un proceso hasta que realmente lo escriba. Una vez que lo hace, el hardware arroja una falla que el sistema operativo atrapa, y luego el sistema operativo utiliza un algoritmo de intercambio si no hay páginas físicas disponibles para asignar a la página virtual ya asignada.
Para obtener más información sobre la asignación de marcos de página, consulte aquí . Allí verá una descripción general de algunas estructuras de datos adecuadas.
Una vez que se implementa un algoritmo adecuado para la asignación de páginas, se debe elegir otro para asignar espacio en disco para el intercambio. Windows, como ejemplo, históricamente ha utilizado un archivo plano en el sistema de archivos para el intercambio de páginas. Me imagino que para cada nodo en la estructura de datos que realiza un seguimiento de las páginas asignadas hay un puntero asociado a un desplazamiento en el archivo, que indica la posición de la página en el disco. Los sistemas operativos tipo Unix han usado tradicionalmente particiones separadas para el intercambio de páginas, lo que podría decirse que es más rápido ya que no existe una capa de sistema de archivos.
También es posible divorciar las estructuras de datos del algoritmo de intercambio de las del algoritmo de asignación, sin embargo, las dos están relacionadas, por lo que probablemente esto no se haga con frecuencia.
Espero que eso responda a su pregunta a pesar de la relativa brevedad con que la he tratado. Descubrí que la mejor manera de aprender sobre los sistemas operativos es sumergirse en los detalles arquitectónicos específicos a veces desagradables que se pueden encontrar en sitios como wiki.osdev.org y www.osdever.net que tratan específicamente sobre la fabricación de sistemas operativos hobby y proporcionan excelentes tutoriales en tales detalles.
fuente