Sistema de Archivos


5  SISTEMA DE ARCHIVOS

5.1  CONCEPTO DE ARCHIVO

Para facilidad de uso de un sistema de cómputo, los sistemas operativos proporcionan un medio abstracto que permite manejar los dispositivos de almacenamiento del sistema, sin necesidad de conocer las propiedades físicas de éstos. Esto se hace mediante la definición de una unidad de almacenamiento lógico en lugar de una unidad de almacenamiento físico.

Esta unidad de almacenamiento lógico es el archivo.

Un archivo es una colección de información relacionada definida por su creador. Regularmente los archivos representan programas y/o datos.

En general un archivo es una secuencia de registros lógicos.

Los registros lógicos están constituidos por bytes o grupos de bytes que pueden significar para el usuario diferentes tipos de datos (por ejemplo valores numéricos o cadenas de caracteres).

Los registros lógicos pueden ser definidos de varios tamaños de anchura: sin embargo, si ésta no es la misma que la del registro físico (disco), crea el problema de desperdicio de espacio si es menor, o de no poder escribirlo si es mayor.

Este problema es solucionado en el S.O. mediante el uso del factor de bloqueo.

En este método, los registros lógicos son agrupados o empacados según su tamaño para luego ser almacenados en el registro físico.

Por ejemplo: Si la anchura del registro físico es de 256  bytes, y el registro lógico fue definido de 128 bytes, entonces tendremos un agrupamiento de dos registros lógicos por cada registro físico.

Se dice que se tiene un factor de bloqueo de dos.

 

Si el registro lógico se define de 80 bytes y el registro físico es de 256 bytes, el S.O. adopta un factor de bloqueo de 3.

Sin embargo en este tamaño de registro lógico se desperdicia algo de espacio.

 

También se puede dar el caso de que el registro lógico exceda en tamaño al registro físico. En este caso, un registro lógico es colocado en más de un registro físico. Por ejemplo si un registro lógico es de 500 bytes y el físico de 256, nos queda:

 

En la mayoría de los S.O., el usuario puede escoger el factor de bloqueo que considere más adecuado.

El registro físico no puede ser modificado dado que es una característica física de la unidad de disco.

El S.O. también provee la facilidad de tener registros de longitud variable, aunque esto es más común en cintas que en discos.  Las  cintas, dadas  sus  características físicas que solo permiten acceso secuencial,  son  utilizadas solo para respaldos de información.

 

5.2  OPERACIONES DE ARCHIVOS

Es deseable que un S.O. permita crear archivos, escribir en ellos, leerlos y eliminarlos cuando no se necesiten más.  También es deseable poder editar y modificar un archivo, copiarlo a otro dispositivo por ejemplo a la impresora, y renombrarlo.

 

5.3  TIPOS DE ACCESO

SECUENCIAL

Los registros lógicos se escriben uno detrás de otro por medio de un apuntador que se mueve automáticamente. El usuario no tiene control sobre el apuntador. Es difícil insertar una componente en medio de otras; así como eliminar una componente dada. Su uso de espacio es eficiente.

DIRECTO

Se puede especificar en  qué  registro posicionar  el apuntador y escribir o leer en él.  Si no se tiene cuidado se puede desperdiciar mucho espacio.

 

5.4 ACHIVOS CON LLAVES DE BUSQUEDA

Auque el acceso directo es el más rápido, si no se sabe en que registro está la información que buscamos no es posible llegar a ella. Para poder hacer una buena organización y acceso rápido a la información se utilizan los archivo con llaves de búsqueda. A continuación se revisan varias técnicas.

·        Archivos con índices. Constan de un archivo de datos y uno o más archivos de índices.

o       Indexado puro (no secuencial). Desarrollado con índices densos  (un apuntador por cada registro del archivo de datos). El archivo de datos se mantiene en orden cronológico (como se dio de alta), mientras que el de índices se mantiene ordenado por la llave de búsqueda. Se pueden tener varias llaves de búsqueda alternas. Ocupa más espacio y es más lento que el indexado secuencial. Es fácil agregar nuevos registros, pero se requiere reordenar el archivo de índices cada vez que se haga ésto.

 

o       Indexado secuencial.  Desarrollado generalmente con índices escasos (aunque también pueden desarrollarse con índices densos). El archivo de datos se ordena físicamente  de acuerdo a la llave de búsqueda y después se generan los archivos de índices. En el nivel de índices más alto se hace una búsqueda binaria que nos posiciona en otro nivel, y así sucesivamente hasta llevarnos al archivo de datos; una vez ahí, se busca secuencialmente ya que el archivo está ordenado físicamente. No se pueden tener llaves de búsqueda alternas. Si se necesita insertar nuevos registros se generan áreas de desborde (listas encadenadas). Ocupa menor espacio en disco y tiene un tiempo de acceso más rápido que los indexados puros. Se recomienda para mantener grandes volúmenes de información que no cambia con mucha frecuencia y que requiere tiempos de acceso rápidos.

 

o       Árboles. Se basan en la versatilidad que proporciona el tener  índices que se expanden o encogen dinámicamente. El archivo de datos se mantiene en forma cronológica. Sus algoritmos para buscar, insertar y eliminar registros son más complejos que los de ambos tipos de indexados, pero tienen la ventaja sobre éstos que sus archivos casi no necesitan ser reorganizados.  Existen varios tipos de archivos con árboles, como los Search Trees ,  los Balanceados B y B+, los Binarios Balanceados (AVL), y Binarios No-balanceados. Los más usados son los B y B+.

§        Árboles B+. Cualquier camino desde la raíz a una hoja tiene la misma longitud. Permiten tener llaves de búsqueda repetidas (por ejemplo, varios nombres homónimos). Impone un gasto extra durante la inserción o eliminación de nodos, además de requerir espacio extra. Su estructura es más sencilla que los B. Usa varios niveles de índices: los internos y los de hoja. El apuntador al archivo de datos se almacena siempre en los nodos hoja.

 

§        Árboles B. Similares a los B+ pero elimina el almacenamiento de valores de llave de búsqueda repetidos, por lo que requiere menos nodos para almacenar los índices. Su estructura es más compleja debido a que sus ramas son más largas y por lo tanto la eliminación de un nodo resulta más complicada que en un B+.  Su acceso es ligeramente más rápido que los B+. Usa varios niveles de índices: los internos y los de hoja. El apuntador al archivo de datos se puede almacenar en cualquier nivel. Puede requerir más niveles que los B+.

 

·        Hashing. Utiliza funciones que convierten las llaves de búsqueda a números enteros entre 0 y el número máximo de entradas en el archivo de datos. No existen archivos de índices; por esta razón, este método es el más rápido. Sin embargo, tiene el problema de que dos o más llaves pueden generar el mismo número de registro ocasionando colisiones. También tiene el problema de que si el archivo alcanza el número máximo de entradas ya no pueden insertarse nuevos registros. Existen varios métodos para manejar colisiones.

o       Memoria abierta. Si al tratar de insertar un nuevo registro, su llave genera una colisión, el registro se coloca en la posición más cercana al lugar que le correspondía. Por lo tanto, cuando una llave nos lleva a un registro en el archivo de datos y éste no es el que buscamos, se hace una búsqueda secuencial hasta  encontrar el registro deseado. 

o       Encadenamiento de colisiones. Se genera una lista encadenada por cada registro que genera colisiones. Cuando se llega a un registro y éste no es el que buscamos, entonces realizamos una  búsqueda secuencial en la lista encadenada hasta encontrar el registro deseado.

o       Doble hashing. Cuando una llave genera una colisión, se pasa por una segunda función de hashing (diferente a la primera), dando oportunidad de que la posibilidad de generar una colisión disminuya. Si aún así colisiona, se usa cualquiera de los otros dos métodos.

 

 5.5  DIRECTORIOS

Cada dispositivo de almacenamiento, mantiene una tabla de contenido, en la cual se especifica el nombre, dirección y tamaño de cada uno de los archivos existentes en esa unidad. Esta tabla es conocida como directorio.

La información contenida en un directorio es comúnmente la siguiente:

· Nombre de archivo.

· Tipo de archivo (por ejemplo binario o ASCII).

· Localización, dispositivo y dirección donde se encuentra el archivo.

· Tamaño en bytes, palabras o bloques.

· Máximo tamaño disponible.

· Protección de acceso para lectura, escritura,   ejecución, etc.

· Fecha de creación o última modificación.

· Otros.

 

ESTRUCTURA DE UN DIRECTORIO

Existen muchas formas y métodos de implementar un directorio. Algunas de las más comunes son las siguientes.

DIRECTORIO DE UN NIVEL

Es el más simple de todos. En este tipo de directorio se agrupan todos los archivos del sistema en una sola lista o tabla, por lo que si se tiene más de un usuario, es necesario que los nombres sean únicos. Es recomendable para sistemas de un solo usuario. Se puede implementar en forma lineal o con "hashing".

DIRECTORIO LINEAL.

Está constituido por una lista lineal encadenada. Es fácil de implementar pero es lenta en acceso ya que para saber si un archivo existe en el directorio hay que hacer una búsqueda secuencial. Sin embargo, si la lista se ordena alfabéticamente, es posible ejecutar búsquedas binarias que reducen notablemente el tiempo de búsqueda. La desventaja es que al dar de alta o de baja nuevos archivos, es necesario reordenar la lista.

DIRECTORIO CON TABLA HASH.

Este tipo de algoritmo mejora notablemente el tiempo de búsqueda y tanto las inserciones como las eliminaciones son muy directas.

Este algoritmo convierte los nombres de archivos a números enteros entre cero y el máximo tamaño asignado a la tabla Hash. Por ejemplo una tabla de 256 registros, generará números entre 0 y 255. Obviamente si la tabla se llena, no se podrá agregar otro más ya que habría que modificar el algoritmo.

Además un directorio con tabla Hash debe proveer un sistema de manejo de colisiones ya que dos o más archivos con nombres similares pueden producir el mismo número de registro.

  

DIRECTORIO DE DOS NIVELES

La principal desventaja de un directorio de un solo nivel, es la confusión de nombres de archivos entre diferentes usuarios.

La solución es crear un directorio propio para cada usuario. Esto se hace por medio de un árbol de dos niveles como se ilustra en la siguiente figura.

 

En este tipo de sistema, cuando un usuario se da de alta, el directorio maestro es buscado hasta encontrar el directorio del usuario correspondiente (generalmente a través de un número de cuenta). Cuando ese usuario lista el directorio, sólo los archivos contenidos en su directorio son mostrados. Esto permite tener nombres repetidos en otros directorios de otros usuarios, sin peligro de borrar o modificar el archivo equivocado, ya que cada usuario solo tiene acceso a los archivos de su propio directorio.

Esto último puede representar un problema cuando dos o más usuarios requieren trabajar en equipo y compartir archivos.

Esto se puede solucionar permitiendo que los usuarios tengan la capacidad de compartir algunos archivos. Por ejemplo, colocar los archivos más comúnmente usados (editores, compiladores, etc.) en un directorio público al cual se puede tener un acceso limitado.

DIRECTORIOS DE MULTIPLES NIVELES. (Estructura de árbol)

Cuando un usuario tiene diferentes aplicaciones en un mismo directorio, por ejemplo, programas de COBOL, BASIC y PASCAL, es deseable poder tener cada grupo de programas en directorios separados, pero bajo el control del mismo usuario.

Esto se logra por medio de la creación de subdirectorios o directorios de múltiples niveles. Ejemplo:

 

 

El S.O. MSDOS, permite al usuario organizar su directorio en forma de árbol, por ejemplo como el del usuario 1 de la figura anterior.

El S.O. Unix usa una estructura de árbol. El árbol tiene una raíz. Cada archivo tiene un nombre de trayectoria único. Un nombre de trayectoria, es el camino desde la raíz hasta el archivo pasando a través de los subdirectorios.

 

DIRECTORIO DE GRAFOS ACICLICOS

Son una generalización de los directorios del tipo de árbol.

Un directorio de árbol generalmente prohibe el compartir archivos o directorios. Un grafo acíclico sí permite compartir tanto archivos como subdirectorios completos. Esto se ilustra en la siguiente figura.

 

 

Note que no se generan ciclos de retorno a través de los mismos archivos y subdirectorios; de ahí su nombre acíclico.

Este tipo de directorios es recomendable en situaciones en que un grupo de usuarios trabajan como equipo. En este caso, todos los archivos a compartir se colocan en un directorio.

Los directorios individuales de cada miembro del equipo, contendrán el directorio  de archivos a compartir como un subdirectorio del suyo, por lo que cada uno puede listarlos y utilizarlos.

La búsqueda y eliminación de archivos es complicada debido a que puede existir más de una trayectoria a un mismo archivo, cosa que no sucede en los directorios de árboles (múltiples niveles).

 

DIRECTORIO DE GRAFO GENERAL

El directorio de grafo general permite una flexibilidad total para compartir archivos al permitir que haya trayectorias cíclicas a través de todo el directorio. Esto se ilustra en la siguiente figura.

 

 

Dado que es permitido tener trayectorias cíclicas, se puede caer en el problema de pasar por la misma trayectoria más de una vez al buscar un archivo, o incluso caer en un lazo infinito. Por lo anterior,  se requieren algoritmos muy complicados para mantener este tipo de directorios.

  

 5.6  PROTECCION DE ARCHIVOS

La necesidad de proteger los archivos es un resultado directo de la habilidad de compartir archivos. En un sistema que no permite compartir archivos, no es necesario un mecanismo de protección.

Los mecanismos de protección permiten compartir archivos en una forma controlada, limitando el tipo de acceso que se puede tener a un archivo.

Los tipos de acceso son los siguientes:

·        Lectura de un archivo.

·        Escritura o reescritura de un archivo.

·        Carga en memoria de un archivo y ejecución.

·        Agregar nueva información al final del archivo.

·        Eliminación de un archivo y liberación de su espacio para  re usarse.

 

Otras operaciones que pueden ser controladas son: renombrar, copiar, o editar un archivo, y listar un directorio.

 

SISTEMAS DE PROTECCIÓN DE ACHIVOS

Los siguientes son algunos de los esquemas de protección más utilizados por la mayoría de sistemas operativos

1.      No permitir listar los archivos de otro usuario. De esta manera, si no se conoce le nombre de un archivo, será muy difícil lograr el acceso ya que se tendría que recurrir a tratar de adivinar el nombre, cosa muy poco probable.

 

2.      Sistema de "passwords" o palabras de pase para cada archivo. Este sistema es eficiente mientras se escojan los passwords al azar y se cambien frecuentemente. La protección se puede redondear utilizando otro password para el acceso del usuario al sistema (número de cuenta).

 

3.      Hacer que el acceso al sistema sea dependiente de la identidad del usuario. Existen varias maneras de implementar esto. Dos de las más comunes son las siguientes:

 

·      Asociar una lista de acceso a cada archivo y a cada directorio, en la cual se especifican los nombres de los usuarios y tipo de acceso que tiene cada uno de ellos a ese archivo o directorio.  De  esta  manera, cuando un usuario solicita usar un  determinado archivo, el S.O. checa primero la lista de acceso de ese archivo. Si ese usuario esta listado para ese tipo de acceso (por ejemplo escribir), entonces le permite el acceso; si no, un mensaje de error es mostrado al usuario. Una desventaja de este método, es que si la lista de  usuarios es grande, es tardado leer toda la lista para determinar si el acceso es válido o no.

 

·      Para condensar la lista de acceso, muchos sistemas reconocen tres  clasificaciones de  usuarios:  "creador", "grupo" y "cualquier otro" (ANY). Cada archivo tiene un creador, el usuario que lo generó.  Adicionalmente, el creador puede pertenecer a un grupo de usuarios que están compartiendo el archivo y necesitan un acceso similar (por ejemplo los miembros de un equipo de programadores que están desarrollando un sistema, o los miembros  de  una clase  que  requieren compartir  un graficador).  Finalmente todos los demás usuarios que ni crearon el archivo ni pertenecen a ese grupo, forman la clasificación "cualquier otro".  Con esta clasificación, combinada con los tipos de acceso se puede generar una plantilla o matriz de protección. Ejemplo:

 

 

ARCHIVO: TAREA1                         ARCHIVO: GRAF                 ARCHIVO: FTN

 

PROTECCION: R W X         PROTECCION: R W X         PROTECCION: R W X

                          G G A                                      C C G                                    C C A

 

El S.O. Unix utiliza el método arriba descrito. Usa 3 bits para almacenar los valores C, G, A, y otros 6 bits para almacenar el nombre del creador y usuarios del grupo al que pertenece el archivo. Así, 9 bits son suficientes para proporcionar protección al archivo.

Los sistemas HP-3000 utilizan un esquema similar, sólo que además de los campos R W X, existen otros como A (Append) agregar, y S (Save) guardar.

 

Regresar al menú principal