Supplementary Page Table

La media naranja faltante

Un poco de Explicación...

Como debes saber, un proceso tiene dentro de su Process Control Block (PCB) guardado la Page Table, que sirve para traducir las direcciones virtuales a direcciones físicas.

En PintOS, cada proceso también tiene su propia Page Table, pero está muy limitado; es decir, tiene un límite sobre la información que puede guardar sobre una página del proceso. Esta Page Table solamente puede guardar la dirección física y un vector de flags (este vector de flags te servirá mucho, te recomiendo que leas el archivo pde.c).

Es necesario poder expandir esta Page Table para guardar información extra sobre las páginas, y por eso surge la necesidad de implementar una "Supplementary Page Table".

Objetivo

La Page Table que PintOS utiliza para cada proceso es muy limitada, por ello es necesario crear una Tabla que pueda complementarla y suplementar cierta información extra.

Archivos

No encontrarás en ninguna parte algún archivo que haga referencia a esta tabla complementaria. debes implementarla desde 0 y el primer paso es creando el archivo.

SUGERENCIA: crea los archivos dentro del directorio vm.

Crea los archivos page.h y page.c. Dentro del archivo page.h estarás colocando la definición de estructuras que necesites y la declaración de métodos y funciones. Y dentro del archivo page.c estarás implementando todas aquellas funciones que declaraste en el archivo anterior.

Código

Al igual que la Frame Table, la forma de cómo quieres construir la Supplementary PageTable también dependerá mucho de ti. Puedes utilizar una lista, un hashmap o cualquier otra estructura que desees, pero el mejor consejo sigue siendo que utilices aquella estructura que tengas experiencia y sepas manejarla correctamente.

El código base que te estaré proporcionando es sobre las entradas de la Supplementary Page Table, es decir, lo que estarás guardando dentro de dicha tabla.

struct supplementary_page_table_entry {
    void * page_address;
    bool writeable;    // ¡Esto nos servirá mucho en un futuro!
    
    // Decide cómo quieres guardar esta entrada
};

Este struct lo estarás modificando conforme a las necesidades que surjan a lo largo de esta fase.

Se estará utilizando el término SPTE para referirse a Supplementary Page Table Entry.

FAQ

  • ¿Es una estructura que muchos procesos estarán consultándola o modificándola?

    No. Cada proceso tiene su propio Supplementary Page Table. No tiene sentido que otros procesos estén consultando las páginas de otros procesos de manera directa.

En alguna parte debes de declarar una estructura propia de cada proceso que represente a su "Supplementary Page Table".

Pista: threads/

  • ¿En dónde puedo inicializar la Supplementary Page Table?

    Te daré una pista: busca dentro del directorio de threads/

  • ¿Tiene alguna ventaja utilizar algún tipo de estructura de datos?

    No, queda a tu discreción cuál utilizar.

  • ¿Estaré utilizando esta Tabla frecuentemente o en toda la parte de VM?

    En toda la parte de VM.

Última actualización