Frame Table

Bookkeeping!

Un poco de Explicación...

En la fase 2 estabas en un mundo ideal, bello y hermoso... todo era de color rosa porque los procesos no tenían la capacidad de crecer. Pero ahora que llegas a esta fase, esa premisa se vuelve falsa.

Un OS le permite a un proceso crecer, pero limita hasta cuánto debe crecer.

La premisa anterior resume toda la fase 3 de memoria virtual y debemos comenzar desde 0.

Dado que la RAM es limitada, necesitamos saber qué frames están en uso y cuáles no. El objetivo de esta tabla es mantener un registro sobre qué frames el OS le ha prestado a los distintos procesos que están corriendo concurrentemente.

La Frame Table (resumido a FT) debe ser la primera implementación en la que debes enfocarte.

Objetivo

Implementar una forma de administrar qué frames están en uso y cuáles no.

Archivos

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

SUGERENCIA: crea los archivos dentro del directorio vm.

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

Además, existe un archivo llamado Makefile.build, en este archivo debes de ir añadiendo las referencias a todos los archivos que estés creando a lo largo de esta fase.

Código

La forma de cómo quieres construir la Frame Table dependerá mucho de ti. Puedes utilizar una lista, un hashmap o cualquier otra estructura que desees, pero el mejor consejo que puedo darte es que utilices aquella estructura con la que estás muy familiarizado así te ahorras un par de días.

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

struct frame_table_entry {
    void * frame_address;
    struct thread * owner;
    
    // 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.

Para no estar escribiendo mucho, se resumirá "Frame Table Entry" a FTE.

FAQ

  • ¿En dónde puedo inicializar la Frame 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.

Debes tener mucho cuidado con la Frame Table. Existe la posibilidad que muchos procesos estén consultándola o modificándola.

Última actualización