Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1311 Prácticas de laboratorio
Laboratorio #FS-2
Objetivos
- Hacer mejoras al sistema de archivos (File System) de NachOS para soportar acceso concurrente, punto 1
- Lograr que los archivos en los sistemas de archivos de NachOS sean de tamaño variable, punto 2
Requisitos
- Tener una instalación de NachOS, se puede emplear el primer proyecto, "userprog"
Procedimiento
- Sincronización Multi-Hilos
- Recuerde que una operación lógica de escritura en el disco puede generar varias escrituras físicas en el disco de NachOS, por ejemplo, es necesario reescribir el BitMap de sectores del disco, es necesario actualizar la entrada en el directorio y puede ser necesario escribir otros sectores para mantener actualizada la estructura de bloques del archivo
- Analice los casos en los que se requiere más de una escritura física al disco y modifique los métodos correspondientes para que las actualizaciones se lleven a cabo de manera segura. Recuerde que las lecturas no harán modificaciones al disco, por lo que puede permitir que varios hilos realicen lecturas simultáneamente; tenga presente que la estructura de sincronización elegida tendrá su propia cola para la atención de las solicitudes
- Debe agregar sincronización a todas las operaciones que se realiza en el sistema de archivos, puede utilizar semáforos o "locks"
- Archivos de tamaño variable (incluye directorios de tamaño variable)
- Configuración actual
- Cuando un archivo se crea, es necesario indicar el tamaño, no puede cambiar esta definición. Se asignan los bloques del disco necesarios para cubrir este tamaño. Detalles de cómo se crean los archivos se pueden revisar en "filesys.cc" en el método "FileSys::Create". Los efectos de establecer el tamaño se puede observar en "openfile.cc" en el método "OpenFile::WriteAt" en esta función existe una verificación para no escribir más allá del tamaño definido, la posición de escritura se ajusta para que no sobrepase ese límite
- Cambios propuestos
- El primer cambio es hacer que el parámetro "size" sea opcional, haciendo este cambio
- De esta manera se hace que el valor inicial del archivo sea cero bytes, asi el llamado a este método no necesite indicarlo y haga que el archivo inicie en cero bytes, como en Unix. Debe verificar que este cambio no produzca errores en los demás métodos
- El siguiente paso es modificar el método "WriteAt" en "openfile.cc" de manera que tome en cuenta el cambio en el número de bytes, podría ser un cambio simple a nivel del parámetro "fileSize" en "FileHeader" si el cambio no abarca más de un sector; si se abarcan varios sectores, éstos deben ser asignados incrementando las variables "numBytes" y "numSectors" en "FileHeader", lo cual se puede llevar a cabo agregando un nuevo método a esta clase
- Anote en su informe todos los cambios aplicados y las pruebas realizadas
- Fin.