Directorio Los directorios no son más que estructuras de datos especiales que contienen información acerca de otros archivos y directorios. Esas estructuras de datos reciben el nombre de tablas de directorios. Generalmente existe una tabla de directorio raíz que se construye cuando se formatea el dispositivo (por ejemplo el disco) y que no puede ser alterada nunca. Algunos campos de esa estructura pueden apuntar a archivos especiales que contienen tablas de directorios iguales (en su forma) que la tabla de directorio raíz, son los denominados subdirectorios. La figura 1 presenta una tabla de directorio típica de un SO hipotético, como se puede apreciar en esta estructura de datos están presentes diversos campos para especificar datos acerca de los archivos referidos desde esa tabla. Algunos sistemas de archivos no poseen mucha información en el directorio, se pueden tener dos extremos, en uno el directorio solo contiene un nombre y un puntero a otra estructura que complementa la información (Unix) en el otro extremo el directorio contiene toda la información relativa al archivo, incluso su localización completa (el ya obsoleto CP/M). Nombre Tipo Dirección Fecha Hora Tamaño de inicio Figura 1. Tabla de directorio de un SO hipotético. Propietario / bin lib var dev temp Trabajo etc X Tarea Figura 2. Estructura de árbol típica de un directorio del SO UNIX. Un ejemplo, el sistema de archivo del SO Unix En UNIX los archivos están organizados en directorios jerárquicos en forma de árbol invertido (la raíz está arriba y las hojas abajo) esos directorios son a su vez archivos especiales que contienen información acerca de otros archivos. En la figura 2, el símbolo / representa al directorio raíz mientras bin, lib, var, temp, etc, se dicen que son hijos del directorio raíz. Obsérvese que el directorio temp tiene a su vez dos hijos: ¾ el primero, Trabajo, es un archivo, (por convenio, se han representado los directorios por elipses y los archivos por rectángulos) ¾ el segundo, X, es un directorio, el cual a la vez tiene un hijo. Es fácil observar como se forma la estructura de árbol. Para acceder a un determinado archivo, se necesita recorrer el camino que conduce a él, por ejemplo el camino que conduce al archivo Trabajo se debe especificar de la siguiente forma: Los caminos se denominan ¾ caminos absolutos, si comienzan especificando el directorio raíz (/) como primer elemento, ejemplo /temp/X. Obsérvese que un camino absoluto proporciona la ruta desde el directorio raíz hasta el directorio especificado en la última parte de la cadena. ¾ caminos relativos, si comienzan a partir de un directorio dado que no sea el raíz, ejemplo X/Tarea UNIX utiliza dos estructuras de datos para localizar un archivo en disco: ¾ La tabla de directorio ¾ El nodo i (ó i-node) Algunos nombres de directorios son estándar en todas las versiones de UNIX (al menos en la mayoría), por ejemplo: /bin. Contiene los comandos más comunes. /dev. Contiene manipuladores de dispositivos (device drivers) especiales que controlan el acceso a los periféricos. /etc. Contiene programas y archivos de datos del sistema. Los archivos en el directorio /etc/default contienen información que usa el sistema por defecto. /lib. Contiene bibliotecas para "C" y otros lenguajes de programación. /mnt. Es un directorio vacío reservado para montar sistemas de archivos. /tmp. Contiene archivos temporales creados por programas del SO. Los archivos están presentes cuando se está ejecutando el programa. /usr. Aloja los directorios de todos los usuarios del sistema y otros directorios que contienen comandos y archivos de datos adicionales. La tabla de directorio de UNIX es una estructura de datos bien simple que contiene dos campos: ¾ El primer campo contiene el nombre del archivo. ¾ El segundo campo contiene un puntero o referencia a otra estructura de datos, denominada nodo i o i-node. La figura 3, proporciona una idea general de esta organización. En este caso se muestra un disco que contiene una tabla de directorio que contiene dos archivos ordinarios (f1 y f2) y un directorio (D1). Cada entrada de la tabla de directorio apunta a un nodo i que se detallará mas adelante, por ahora es importante comprender que existe un nodo i para cada archivo o directorio. Aunque D1 es un subdirectorio del directorio que se muestra como ejemplo, no existe mucha diferencia entre él y los archivos f1 y f2 debido a que un subdirectorio no es más que un archivo especial que contiene referencias a otros archivos. Nombre Ref. nodo i f1 f2 D1 Figura 3. La Tabla de Directorio de UNIX Información general acerca del archivo Puntero 1 . . . Puntero 10 Bloque indirecto Bloque indirecto doble Bloque indirecto triple Figura 4. El Nodo-i Un directorio del sistema operativo Windows, contiene mucha más información, UNIX también necesita de esa información (y de otra más) pero la tiene localizada en el nodo i, a diferencia de Windows que la tiene en el directorio. El nodo i Todo sistema de archivo necesita conocer donde está localizada la información que contienen sus archivos y también necesita conocer la cantidad de espacios libres y ocupados que existen en sus medios de almacenamiento. El nodo i es una estructura muy importante en el sistema de archivo del SO UNIX. Cada archivo posee un nodo i que es referenciado desde la tabla de directorio. Esa estructura de datos posee mucha información acerca del archivo y además contiene un conjunto de punteros que permiten encontrar los lugares del disco donde está localizado el archivo. Observe la figura 4.