SISTEMA DE FICHEROS UNIX J. Santos REPRESENTACIÓN INTERNA DE FICHEROS Inodos • Existe un inodo para cada fichero del disco. • Los inodos se encuentran: En disco, en la lista de inodos. o En memoria, en la tabla de inodos, de estructura semejante al buffer cache. o Inodo en disco Inodo en memoria PROPIETARIO COPIA INODO DISCO GRUPO ESTADO TIPO DE FICHERO NÚMERO DE DISPOSITIVO PERMISOS DE ACCESO NÚMERO DE INODO FECHAS: acceso, escritura, PUNTEROS A COLAS HASH modificación inodo Y FREE LIST NÚMERO DE LINKS CONTADOR DE TAMAÑO REFERENCIAS DIRECCIONES DE DISCO Detalles: • El núcleo asigna inodos en llamadas del tipo open. • Los inodos en memoria quedan libres cuando no hay ningún proceso que tenga abierto el fichero correspondiente al inodo. • Funcionamiento análogo al buffer cache: algoritmos iget, iput (getblk, brelse). 29 SISTEMA DE FICHEROS UNIX J. Santos Esquema de las principales estructuras del núcleo referentes al sistema de ficheros (Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7th Edition, Feb 6, 2005) Estructura de un fichero • Cada fichero tiene asociado: o o Un inodo de la lista de inodos. Bloques del área de datos. Lo bloques del fichero figuran como información del inodo, con el siguiente esquema de acceso: Direcciones de disco en el inodo [Tanenbaum, 2003] Detalles: 30 • Con bloques de 1K y direcciones de 4 bytes, el tamaño máximo resulta: 10K + 256K + 64M + 16G • Acceso más lento a ficheros grandes. SISTEMA DE FICHEROS UNIX J. Santos ALGORITMO bmap 31 SISTEMA DE FICHEROS UNIX J. Santos ALGORITMO iget 32 SISTEMA DE FICHEROS UNIX J. Santos ALGORITMO iput 33 SISTEMA DE FICHEROS UNIX J. Santos Directorios • Un directorio es un fichero cuyo contenido se interpreta como “entradas de directorio”. • Formato de entradas de directorio: En System V: Nombre (14 bytes) Número inodo (2 bytes) En BSD: Número inodo (4 bytes) 34 Longitud entrada (2 bytes) Longitud nombre (2 bytes) Nombre (terminado en '\0' hasta una longitud múltiplo de 4) (variable) SISTEMA DE FICHEROS UNIX J. Santos Ejemplo de pasos necesarios en la búsqueda del inodo de /usr/ast/correo [Tanenbaum, 2003] 35 SISTEMA DE FICHEROS UNIX J. Santos CREACIÓN DE FICHEROS. ASIGNACIÓN DE INODOS Y BLOQUES SUPERBLOQUE TAMAÑO SISTEMA DE FICHEROS Detalles: • Al crear un fichero: se asigna inodo y bloques de datos. • Cuando un fichero crece: se asignan datos. • La lista de inodos libres del SB es incompleta. • La lista de bloques libres del SB es incompleta. NÚMERO DE BLOQUES LIBRES LISTA DE BLOQUES LIBRES ÍNDICE SIGUIENTE BLOQUE LIBRE TAMAÑO LISTA DE INODOS NÚMERO DE INODOS LIBRES LISTA DE INODOS LIBRES ÍNDICE SIGUIENTE INODO LIBRE FLAG OCUPADO/DISPONIBLE LISTA INODOS LIBRES LISTA BLOQUES LIBRES FLAG SUPERBLOQUE MODIFICADO 36 SISTEMA DE FICHEROS UNIX J. Santos 37 SISTEMA DE FICHEROS UNIX J. Santos Dos ejemplos: Asignación de un inodo de la lista del SB cuando ésta no está vacía. Asignación cuando la lista del SB está vacía. 38 SISTEMA DE FICHEROS UNIX J. Santos Dos ejemplos (con lista de SB llena): Inodo liberado < inodo recordado Inodo liberado > inodo recordado 39 SISTEMA DE FICHEROS UNIX Ejemplo de concurrencia: 40 J. Santos SISTEMA DE FICHEROS UNIX J. Santos Ejemplo de situación de la lista encadenada de bloques libres, partiendo de la lista de libres del SB: 41 SISTEMA DE FICHEROS UNIX J. Santos Ejemplo de funcionamiento en la liberación y asignación de bloques libres: 42 SISTEMA DE FICHEROS UNIX J. Santos LLAMADAS AL SISTEMA PARA EL MANEJO DE FICHEROS int open (char *nombre, int modo, int permisos); modo apertura: modo 0: lectura modo 1: escritura modo 2: lectura-escritura O usando las constantes definidas en el cabecera <fcntl.h> O_RDONLY O_RDWR O_WRONLY O_APPEND O_CREAT sólo lectura lectura-escritura sólo escritura añadir crear ... 43 SISTEMA DE FICHEROS UNIX int read (int df, char *buff, int n); df – descriptor de fichero devuelto por open buff – dirección a donde se trasvasan los datos, en el espacio de usuario n – número de bytes a leer 44 J. Santos SISTEMA DE FICHEROS UNIX J. Santos 45 SISTEMA DE FICHEROS UNIX 46 J. Santos SISTEMA DE FICHEROS UNIX J. Santos DIFERENCIAS ENTRE EL SISTEMA DE FICHEROS SYSTEM V y BSD • Estructura de directorios. • Asignación de espacio mediante bloques y fragmentos. • Introducción de Grupos de cilindros. Estructura disco en BSD: BOOT SUPERBLOQUE GRUPO GRUPO CILINDROS nº 1 CILINDROS nº 2 … GRUPO CILINDROS N Estructura de cada Grupo de Cilindros: COPIA SB CABECERA GC • LISTA DE INODOS ÁREA DE DATOS Falta aquí figura de disco con GC Organización del disco en grupos de cilindros [Márquez, 2004] 47 SISTEMA DE FICHEROS UNIX The Linux Ext2fs File System J. Santos Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7th Edition, Feb 6, 2005 Ext2fs uses a mechanism similar to that of BSD Fast File System (ffs) for locating data blocks belonging to a specific file The main differences between ext2fs and ffs concern their disk allocation policies. z In ffs, the disk is allocated to files in blocks of 8Kb, with blocks being subdivided into fragments of 1Kb to store small files or partially filled blocks at the end of a file. z Ext2fs does not use fragments; it performs its allocations in smaller units: The default block size on ext2fs is 1Kb, although 2Kb and 4Kb blocks are also supported. z Ext2fs uses allocation policies designed to place logically adjacent blocks of a file into physically adjacent blocks on disk, so that it can submit an I/O request for several disk blocks as a single operation. Ext2fs Block-Allocation Policies 48 SISTEMA DE FICHEROS UNIX J. Santos Bibliografía: [Batch, 1986] Bach, M.J., The Design of the UNIX Operating System, PrenticeHall, 1986. [Carretero y col., 2001] Carretero Pérez, J., de Miguel Anasagasti, P., García Carballeira, F., Pérez Costoya, F., Sistemas Operativos: Una Visión Aplicada, McGraw-Hill, 2001. [Márquez, 2004] Márquez, F.M., UNIX. Programación Avanzada, Ra-Ma, 2004. [Sánchez Prieto, 2005] Sánchez Prieto, S., Sistemas Operativos, Servicio Public. Univ. Alcalá, 2005. [Silberschatz y col. 2005] Silberschatz, A., Galvin, P. and Gagne, G., Operating System Concepts – 7th Edition, Feb 6, 2005. [Stallings 2005] Stallings, W. Operating Systems (5th Edition ), Prentice-Hall, 2005. [Tanenbaum 2003] Tanenmaum, A., Sistemas Operativos Modernos, PrenticeHall, 2003. 49