Sistemas operativos modernos

cesita. Así pues, el único propósito de la tabla de descripción de archivo abierto es permitir a un padre y un hijo compartir una posición de archivo, pero que un proceso no relacionado ten­ ga su propio valor de posición. Para volver al problema de cómo efectuar read, ya hemos mostrado cómo se localiza la posición de archivo y el nodo-i. Este último contiene las direcciones en disco de los primeros 10 bloques del archivo. Si la posición de archivo cae dentro de los 10 primeros bloques, el blo­ que correspondiente se lee y los datos se copian en el espacio del usuario. En el caso de archi­ vos de más de 10 bloques, un campo en ei nodo-i contiene la dirección en disco de un bloque de indirección sencilla, como se muestra en la figura 10-33. Este bloque contiene las direccio­ nes en disco de más bloques de disco. Por ejemplo, si el tamaño de bloque es de 1 KB y una dirección de disco ocupa 4 bytes, el bloque de indkección sencilla podrá contener 256 direc­ ciones de disco. Por tanto, el esquema funciona para archivos de hasta 266 KB en total. Más allá de ese tamaño, se usa un bloque de doble indirección, que contiene las direc­ ciones de 256 bloques de indirección sencilla. Este mecanismo alcanza a manejar archivos de hasta 10 + 2 '^ bloques (67,119,104 bytes). Si ni siquiera eso basta, el nodo-i tiene espacio pa­ ra un bloque de triple indirección. Sus apuntadores apuntan a muchos bloques de doble in­ dirección. Fast File System de Berkeley La descripción anterior explica cómo funciona el sistema de archivos clásico de UNIX. Vea­ mos ahora cómo lo mejoró Berkeley. En primer lugar, se reorganizaron los directorios. En lu­ gar de limitar los nombres de archivo a 14 caracteres, el límite se fijó en 255. Claro que modificar la estructura de todos los directorios implicó que ya no funcionarían los programas que leían directorios de manera inocente (que estaba y sigue estando permitido) y que espera­ ban una sucesión de entradas de 16 bytes. Para que los programas pudieran usarse con ambos tipos de directorios, Berkeley proporcionó las llamadas al sistema opendir, closedir, readdir y rewinddir para que los programas pudieran leer directorios sin tener que conocer su estruc­ tura interna. Los nombres de archivo largos y estas llamadas al sistema para leer directorios se añadieron más tarde a todas las demás versiones de UNIX y a POSIX. La estructura de directorios BSD permite nombres de archivo de hasta 255 caracteres y se ilustra en la figura 10-34. Cada directorio consta de algún número entero de bloques de disco, lo que permite escribir en forma atómica los directorios en el disco. Dentro de un directorio, las entradas de archivos y directorios aparecen en desorden, cada una inmediatamente después de la que la precede. Una entrada no puede cruzar una frontera de bloque, así que a menudo hay cierto número de bytes desocupados (de relleno) al final de cada bloque de disco. Cada entrada de directorio de la figura 10-34 consta de cuatro campos de longitud fija y uno de longitud variable. El primer campo es el número de nodo-i, que es 19 para el archivo co­ losal, 42 para el archivo voluminoso y 88 para el directorio dirgde. Luego viene un campo que indica qué tan grande es la entrada (en bytes), lo cual incluye el posible relleno después del nom­ bre. Este campo es necesario para localizar la siguiente entrada en caso de que el nombre de ar­ chivo tenga un relleno de longitud desconocida. Ése es el significado de la flecha en la figura 10-34. Luego viene el campo de tipo: archivo, directorio, etc. El último campo fijo es la longi-

RkJQdWJsaXNoZXIy MjI4NDcx