Sistemas de archivos
Archivos
- Su estructura puede ser:
- Secuencia de bytes
- Secuencia de registros de longitud fija
- Árbol
- Un árbol de registros de tamaño dinámico con un campo de longitud fija (índice/ID)
- Pueden ser de tipo:
- Regular
- ASCII o Binario
- Directorio
- de Caractér (especial)
- de Bloque (especial)
- Regular
- El acceso puede ser:
- Secuencial
- Aleatorio
Directorios
- Se usan en sistemas de archivos jerárquicos, a diferencia de sistemas de archivos de un solo nivel que tienen todos los archivos en un sólo directorio raíz
- Un archivo se puede referenciar por su:
- Nombre de Ruta absoluta: el camino desde el directorio raíz hasta el archivo
C:\Users\Miguel\Documentos\UTN\SO\Tanenbaum.pdf
- Nombre de Ruta relativa: Cuando se trabaja desde una shell (línea de comandos) se pueden referenciar archivos de forma relativa al directorio actual
.
se refiere al directorio actual,..
se refiere al directorio padre- Si tengo una shell abierta en el directorio
/home/miguel/UTN/SO/
, puedo referenciar otros archivos de la siguiente forma:
- Nombre de Ruta absoluta: el camino desde el directorio raíz hasta el archivo
Ruta relativa | Ruta absoluta |
---|---|
Tanenbaum.pdf |
/home/miguel/UTN/SO/Tanenbaum.pdf |
./Tanenbaum.pdf |
Ídem |
Resúmenes/38 págs.pdf |
/home/miguel/UTN/SO/Resúmenes/38 págs.pdf |
../AdeSI/Cockburn.pdf |
/home/miguel/UTN/AdeSI/Cockburn.pdf |
Implementación de archivos
Asignación contigua
- Almacena cada archivo como una serie continua de bloques
Ventajas
- Simple de implementar
- Llevar registro de la ubicación de los bloques necesita sólo dos números: dirección del primer bloque y número de bloques en el archivo
- Rendimiento de lectura excelente
- Todo el archivo está disponible en una sola lectura del disco
Desventajas
- Eventualmente habrá fragmentación
- Archivos relacionados (o partes nuevas de un archivo que creció en tamaño) estarán lejos de sí, físicamente en el disco
Asignación de lista ligada (linked list)
- El disco duro se convierte en una lista ligada
- Aprovechando que el disco se divide lógicamente en bloques (de 512 bytes c/u, por ejemplo), se usa la primera palabra (primeros 16 bits = 2 bytes) de cada bloque para guardar un puntero al siguiente bloque de información del archivo
- El último bloque guarda un puntero a
0x0000
que indica el fin de archivo- (supongo yo. en realidad el apunte dice que en la tabla FAT se pone un puntero a un índice inválido de bloque para significar un fin de archivo)
Ventajas
- No se pierde espacio por fragmentación
- Para la entrada de un directorio sólo necesita la dirección de disco del primer bloque
Desventajas
- El acceso aleatorio es muy lento (hay que seguir los punteros por toda la lista ligada para llegar al deseado)
- Ahora cada bloque sólo guarda 510 bytes de información en lugar de 512
Asignación de lista enlazada usando tabla en memoria
- En lugar de ocupar espacio en cada bloque del archivo, se mantiene una tabla ordenada en MP llamada FAT (file allocation table)
- En esta tabla, cada índice representa un bloque y guarda el puntero al siguiente bloque
- De esta forma, ya están en memoria todas las direcciones de disco que el sistema debe consultar
Ventajas
- El acceso aleatóreo es más rápido pues las búsquedas se hacen en memoria
- (no hay que esperar a que el disco lea el siguiente puntero)
- Para la entrada de un directorio sólo necesita la dirección de disco del primer bloque
Desventajas
- Para que funcione, la tabla FAT debe estar siempre en MP
- No escala bien en discos grandes
- Para una tarjeta SD de 8 GB con bloques de 512 bytes, la FAT ocupa 62,5 MB
- Para un pendrive de 16 GB con bloques de 512 bytes, la FAT ocupa 125 MB
- Para un disco duro de 200 GB con bloques de 1 KB, la FAT ocupa 800 MB
Nodos-i (inodes)
- Se asocia cada archivo con un nodo índice (nodo-i, inode), una estructura de datos que contiene los atributos y las direcciones en disco de los bloques del archivo
Ventajas
- El nodo-i sólo está en memoria cuando se necesita el archivo
Implementación de directorios
- En el sistema de archivos, los archivos se guardan en directorios que pueden contener varios archivos
- Dependiendo de la implementación, la entrada de directorio contendrá primero el nombre, y segundo la dirección en disco del inicio de archivo, ó la dirección al primer bloque, ó el número de nodo-i
- Los atributos pueden guardarse en la tabla de directorio, junto con el nombre y dirección, o no (en el caso de los nodos-i, cuando se guardan los atributos en el nodo)
Operaciones
De archivos
(Los primeros 7 son los más importantes)
-
Create
-
Delete
-
Open: lleva los atributos y la lista de direcciones a memoria
-
Close
-
Read
-
Write
-
Rename
-
Append
-
Seek: Para los archivos de acceso aleatorio
-
Get Attributes
-
Set Attributes
De directorios
- Create
- Delete
- Opendir: Lista todos los archivos en el directorio
- Closedir
- Readdir: Devuelve la siguiente entrada en un directorio abierto
- Rename
- Link
- Unlink
Métodos para registrar los bloques libres
Se lleva el registro de igual forma que se hace con la MP libre
- Usar una lista enlazada de los bloques de disco
- Similar a la administración de memoria libre con lista ligada
- Mapa de bits
- Similar a la administración de memoria libre con mapa de bits
Cuotas de disco
- Existen un limite suave (que se puede exceder) y un límite duro
- El administrador de un sistema puede asignar a cada usuario una cantidad máxima de archivos y bloques y el SO garantiza este límite
- Cuando un usuario abre un archivo, los atributos y direcciones se colocan en una tabla en MP
- Cualquier aumento de tamaño en el archivo se suma a la cuota del usuario
- Otra tabla registra las cuotas de cada usuario que tenga archivos abiertos