Sistemas de Ficheros: Organización y Gestión en Sistemas Operativos


1. Sistemas de Ficheros

Es el aspecto visual del S.O. Los sistemas de ficheros están formados por dos partes esenciales:

  • Una colección de ficheros, conteniendo cada uno de ellos datos relacionados.
  • Una estructura de directorios que organiza y proporciona información de todos los ficheros.

2. Almacenamiento de Memoria a Largo Plazo

Tres requisitos:

  1. Se debe poder almacenar una cantidad de información muy grande.
  2. La información debe permanecer después de la terminación de los procesos que la utilizan.
  3. Múltiples procesos deben poder acceder a la información a la vez.

La solución: almacenar en dispositivos de almacenamiento masivo, en unidades llamadas ficheros. La información almacenada en los ficheros es persistente (no se ve afectada por la creación o terminación de los procesos). Solo desaparece cuando el propietario borra dicho fichero.

Sistema de ficheros: Parte del S.O que se encarga de la gestión de ficheros. Un fichero es la unidad lógica más pequeña de memoria secundaria. En general, un fichero contiene simplemente información estructurada de la forma más conveniente en cada caso.

3. Atributos de los Ficheros

Los atributos de un fichero varían de un S.O a otro.

  • Nombre: Nombre que se le asigna al fichero.
  • Tipo: Si el S.O es capaz de reconocer el tipo, entonces puede operar con él. El nombre suele dividirse en dos partes, el nombre y la extensión (tipo).
  • Ubicación: Indica la dirección (cilindro y sector) del comienzo del fichero en el disco.
  • Tamaño: Expresa el tamaño actual del fichero.
  • Protección: Indica los permisos de acceso para los usuarios.
  • Fecha y hora: Momento de creación o modificación del fichero.

4. Operaciones con Ficheros

  • Creación: Dos pasos; asignarle espacio en disco y darle una entrada en el directorio correspondiente.
  • Escritura: Para escribir en un fichero hay que realizar una llamada al sistema indicando el nombre y la información que se desea escribir.
  • Lectura: El usuario debe indicar el nombre del fichero a leer y la dirección de un buffer de memoria local para depositar el contenido de la lectura solicitada.
  • Posicionamiento: Permite establecer el valor del punto de L/E del fichero.
  • Borrado: Para borrar un fichero simplemente hay que indicar su nombre.

La mayoría de estas operaciones consumen un tiempo muy significativo porque requieren buscar en el directorio la entrada correspondiente al nombre del fichero.

Para evitar esta búsqueda constante, los S.O disponen de la operación abrir fichero; que debe realizarse antes que cualquier otra instrucción sobre un fichero. Su cometido es copiar la entrada del directorio (en el disco) a la tabla de ficheros abiertos que se mantiene en memoria principal, así evitamos tener que ir al disco cada vez. Esto devuelve un descriptor de fichero que suele ser el índice de acceso a la tabla de ficheros abiertos.

En sistemas multiusuarios se mantienen dos niveles de tablas de ficheros abiertos: la tabla local del proceso y la tabla del sistema.

Cuando se abre un fichero se crea una entrada en las dos tablas y a medida que se realizan más aperturas de dicho proceso se suman a la tabla local de proceso con un contador, cuando este contador llega a cero, se borra la entrada de la tabla del sistema.

5. Directorios

  • Único directorio por partición: Ya que todos los ficheros están en el mismo directorio, resulta fácil de implementar y mantener. Los problemas con los directorios de un solo nivel aparecen cuando se comparte entre varios usuarios, pues ya que todos los ficheros están en el mismo directorio deben tener nombres distintos para poder distinguirlos. Incluso con un único usuario, a medida que aumenta el número de ficheros, empieza a resultar difícil asignarles nombres únicos.
  • Directorios de dos niveles: Hay un Directorio Maestro y múltiples Directorios de Usuario (DU). Todos los DUs tienen la misma estructura, pero cada uno de ellos contiene los nombres de fichero de un único usuario. Cuando un usuario se conecta al sistema, se busca en el Directorio Maestro, indexando en éste por el nombre su número de cuenta, obteniendo una entrada que apunta a su DU. Un usuario se refiere a un cierto fichero, solamente se busca en su directorio de usuario, por lo que diferentes usuarios pueden tener ficheros con el mismo nombre con tal de que todos los nombres dentro de cada directorio de usuario sean únicos. Inconvenientes: trabas cuando un grupo de usuarios quieren cooperar en alguna tarea y necesitan acceder a ciertos ficheros con datos comunes.
  • Árbol de directorios: Permite a los usuarios crear sus propios directorios, para organizar sus ficheros con cualquier estructura deseada. El directorio raíz es simplemente otro fichero, pero con una estructura interna conocida por el sistema operativo, el cual lo trata de forma especial. Para saber si un fichero contiene datos o es un directorio, un campo de la correspondiente entrada del directorio que lo contiene indica el tipo de fichero (datos/directorio).

6. Asignación del Espacio Libre

En un disco magnético, por su gran capacidad, se almacenan una gran cantidad de ficheros. El principal problema que se presenta es cómo asignar espacio a estos ficheros de tal forma que el espacio del disco se utilice eficientemente (sin desperdiciarlo) y sin perjuicio de la velocidad de acceso a todos los datos componentes de cada fichero.

  • Contigua: Cada fichero ocupe una serie de bloques contiguos en el disco. Se soporta bien cualquier método de acceso. La fragmentación externa, pues a medida que se crean y borran ficheros el espacio libre del disco se va descomponiendo en huecos cada vez más pequeños (no aprovechables). La única solución a este problema es la compactación. Determinar cuánto espacio se va a necesitar para un fichero, es decir, cómo saber en el momento de la creación de un fichero cuál va a ser su tamaño máximo.
  • Lista encadenada: Cada fichero está compuesto por una lista de bloques encadenados, de tal forma que ahora cada bloque puede estar situado en cualquier lugar del disco. Ya no se produce fragmentación externa, y cualquier bloque libre puede aprovecharse para satisfacer una petición de espacio. No es necesario indicar el tamaño en la creación de un fichero; a medida que va creciendo se van añadiendo bloques a su lista encadenada y, desde luego, nunca se requiere una compactación. Solamente se puede utilizar eficientemente para acceso secuencial. Además, los punteros consumen espacio. Último problema: si los ficheros están formados por una lista de punteros dispersos por el disco, la pérdida o daño de uno de ellos ocasiona también la pérdida de la información del fichero contenida en los restantes bloques de la lista.
  • Asignación indexada: Trata de solventar los problemas de la lista encadenada con el acceso directo. Para ello, lo que hace es reunir todos los punteros correspondientes a los bloques de un fichero en un único lugar: el bloque de índices. El problema que presenta este sistema es el desperdicio de espacio, pues el tamaño del bloque de índices normalmente es mayor que el requerido para los punteros en la lista encadenada. El dilema: si el bloque de índices es grande, se desaprovecha mucho espacio; si es pequeño, puede que no quepan todos los índices de un fichero extenso. La solución: Unix mantiene unos cuantos punteros a bloques de datos en el I-nodo (punteros directos), pero en caso de que se llenen estos bloques, entonces utiliza otro puntero (puntero indirecto) que indica la dirección de un bloque de índices, el cual contiene punteros a bloques de datos.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *