Swap File

El hermanastro de la RAM

Un poco de Explicación...

Bien, como ya he mencionado anteriormente, en algún momento el OS no podrá darle un frame al proceso porque ya todas están siendo ocupadas por otro proceso. Cuando esta situación se da, el Swap File toma gran importancia.

Para implementar las siguientes secciones de Paging, es necesario implementar de primero el Swap File.

Objetivo

Implementar el Swap File para ser capaces de realizar todo lo de Paging.

Archivos

Deberás crear tus propios archivos para la implementación del Swap File y los debes de añadir al Makefile.build

Implementación

Debes de recordarte de todas las clases que has tenido sobre el File System y sobre los discos, porque estarás aplicando esos conocimientos en esta parte.

Primero lo primero, debes de recordar que en PintOS, el tamaño de una página es de 4096 Bytes y el tamaño de un sector es de 512 Bytes, es decir, se ocupan 8 sectores para guardar un frame.

La política de cómo guardarás los frames queda a tu propia discreción, pero lo recomendable es ir por un modelo de Contiguos Allocation.

Debes tomar en cuenta lo siguiente:

  • Debes de mantener un registro sobre qué sectores están disponibles en el Swap File (te invito a tomarte el tiempo de ir a revisar los archivos que se encuentran en el directorio lib/kernel).

  • Cuando escribes al Swap, debes ser capaz de recordar los sectores que se usó para guardar la frame.

  • Cuando lees del Swap, debes de liberar todos los sectores asociados a la frame.

  • El Swap File es un recurso compartido.

  • Si en algún punto el Swap File se llena, realiza un Kernel Panic.

Te daré un pequeño empujón:

// Declaramos la variable que hace referencia al Swap File
static struct block * swap_file;

void swap_init(void) {
	// Con esto, le estamos declarando que esa variable
	// tendrá la función de Swap File.
	swap_file = block_get_role(BLOCK_SWAP);
}

Gran ayuda, ¿verdad? Sé que hice un excelente trabajo :D (y se dice gracias...).

FAQ

  • ¿En dónde se inicializa el Swap File?

    Si hiciste la parte de Frame Table, ahí encontrarás la respuesta.

  • ¿Cuántas funciones debo de hacer?

    Depende de cómo lo estés implementando, pero en general son pocas.

  • ¿Puedo utilizar otro modelo que no sea Contiguos Allocation?

    Sí, eres totalmente libre.

  • ¿De cuánto es el tamaño del Swap File?

    Cuando inicias una prueba, puedes declarar el tamaño (en MB) del Swap File.

  • ¿Puedo manejar frames en lugar de sectores como unidad mínima de almacenamiento en el Swap File?

    Si sabes lo que estás haciendo y no te confundes con la matemática, entonces sí.

Última actualización