Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1311 Prácticas de laboratorio
Laboratorio #FS-3
Objetivos
- Cambiar las estructuras de directorios para lograr que el tamaño de los archivos de NachOS sea variable, punto 3
Requisitos
- Tener una instalación de NachOS, se puede emplear el primer proyecto, "userprog"
Procedimiento
-
Tamaño máximo de un archivo
-
Configuración actual
- El tamaño máximo de un archivo en NachOS es 3840 bytes en 32 bits, o 1792 en 64 bits:
- El contenido de un "FileHeader" debe caber en un sector de 128 bytes, que son 32 enteros (32 bits), se requiere dos enteros para "numBytes" y "numSectors" lo que deja 30 enteros para contener los números de sector que corresponden a los datos de este archivo; 30 punteros x 128 bytes/sector = 3840 bytes
- El contenido de un "FileHeader" debe caber en un sector de 128 bytes, que son 16 enteros (64 bits), se requiere dos enteros para "numBytes" y "numSectors" lo que deja 14 enteros para contener los números de sector que corresponden a los datos de este archivo; 14 punteros x 128 bytes/sector = 1792 bytes
- El tamaño máximo de un disco de NachOS es 128K, lo que representa el tamaño máximo de un archivo que su implantación debe soportar
- Ya que no es posible agregar más espacio a un sector (definido en 128 bytes), como el que se utiliza para almacenar el "FileHeader", será necesario utilizar alguna de las siguientes tres estrategias
-
Esquemas sugeridos
-
a) Lista enlazada de bloques
- Los primeros punteros de "FileHeader" apuntan a bloques de datos, pero el último apunta a un bloque que contiene punteros a bloques de datos, excepto en la última posición, que es un puntero a otro bloque que repite esta estructura, como se muestra en la siguiente figura
-
-
b) Bloques con punteros
- En este caso, los punteros no apuntan a bloques de datos, más bien cada puntero apunta a un bloque que contiene punteros a datos, tal y como lo hace el último del caso anterior
-
c) Mezcla de punteros
-
- Mapeo de los sectores de datos empleando indirección simple (single indirection), el puntero de "FileHeader" apunta a un bloque que contiene punteros a bloques de datos, como se muestra en la siguiente figura
-
- d) Mapeo de los sectores de datos empleando indirección doble (double indirection), el puntero de "FileHeader" apunta a un bloque que contiene punteros a bloques, estos bloques contiene punteros que apuntan a bloques de datos, como se muestra en la siguiente figura (con este segundo puntero es suficiente para lograr que los archivos de NachOS midan más de 128Kb, como se solicita en el proyecto)
-
- Mapeo de los sectores de datos empleando indirección triple (triple indirection)
-
-
Cambios propuestos
- En el " FileHeader" se define el tamaño de los bloques de datos directos (#define NumDirect ((SectorSize - 2 * sizeof(int)) / sizeof(int))), con el fin de dejar espacio para los punteros que no son directos a datos, es necesario ajustar esta declaración, de acuerdo con el modelo que escojan, para dejar espacio a los punteros que cumplen otra funcionalidad
- Es necesario cambiar los métodos de la clase "FileHeader" para que tome en cuenta la nueva estructura que escogieron
- Anote en su informe todos los cambios realizados, los archivos fuente involucrados y las pruebas realizadas
- Fin