Está en la página 1de 10

Gestión del sistema de archivos |1

5. GESTIÓN DEL SISTEMA DE ARCHIVOS


Se necesitan tres condiciones para el almacenamiento de la información a largo plazo:

a) La información debe permanecer cuando el proceso termina


b) Se debe poder almacenar una cantidad grande de información
c) Debe ser posible que varios procesos tengan acceso concurrente a la información

5.1 Archivos
Normalmente, los archivos corresponden a programas y a datos. En general, es una seria de
bits, bytes o registros cuyo significado está definido por su autor y los usuarios.
Los archivos son nombrados y referenciados por su nombre. La forma de hacerlo varía de un
SO a otro. Por regla general son cadenas de caracteres alfanuméricos, aunque también es
normal usar caracteres especiales, como puntos, guiones o blancos.

Además del nombre, los archivos tienen otras propiedades como su tipo, la fecha y hora de su
creación, el nombre o identificador del creador, su longitud y algunos más (conocidos como
atributos).

5.1.1 Tipos y estructuras de los archivos

Dependiendo del uso, los archivos tendrán una determinada estructura. El SO puede tener
conocimiento de estas distintas estructuras lógicas y considerar diferentes tipos de archivos.
Las desventajas de que el SO tenga conocimiento de los tipos de archivos se pueden resumir
en dos:
1) Mayor tamaño del SO, ya que tendrá que tener el código para soportar cada uno de los
tipos de archivos considerados.
2) Se tiene una gran rigidez. Si en algún momento se necesita crear un archivo diferente,
se entraría en conflicto con el SO.

En SO como UNIX no se definen tipos de archivos, dejando plena libertad al usuario. La


interpretación corre a cuentas de las aplicaciones. Se tiene una gran flexibilidad, con un
soporte mínimo.

5.1.2 Operaciones con los archivos

CREATE (Crear)
Se tienen que realizar las siguientes acciones:
Gestión del sistema de archivos |2

OPEN (Abrir)
Se establece un enlace entre el programa y el archivo. Para ello se trasladan los atributos y la
lista de direcciones del archivo a la memoria principal.

SEEK (Buscar)
Se cambia la posición del apuntador para señalar al byte o registro cuya dirección lógica se
suministra en la llamada.

READ (Leer)
Por lo general, la lectura se hace en la posición actual y en la llamada se tiene que especificar
la cantidad de datos necesarios y proporcionar un buffer para su transmisión.
Gestión del sistema de archivos |3

WRITE (Escribir)
La única diferencia importante con READ es que sirve también para ampliar el archivo.
Algunos sistemas tienen una forma restringida de WRITE, con la que sólo pueden añadir datos
al final del archivo (APPEND).

CLOSE (Cerrar)
Cuando un archivo no se va a utilizar, es necesario cerrarlo, de forma que se libere la tabla con
la lista de atributos y direcciones que se mantenía en la memoria principal y que ya no es
necesaria.
Gestión del sistema de archivos |4

DELETE (Borrar)

RENAME (Renombrar)
La opción de renombrar no siempre es necesaria, ya que se puede copiar el archivo con otro
nombre y borrar el original.

COPYFILE (Copiar)

Lectura y modificación de los atributos


También se permite en muchos sistemas el cambio de algunos atributos, o por lo menos la
lectura de los mismos.

5.2 Directorios de archivos


Los directorios son tablas simbólicas de archivos. Una entrada típica de directorio puede
contener:
a) Nombre, tipo y número de versión del archivo.
b) Puntero de acceso al archivo, dirección de comienzo en el disco.
c) Lista de atributos: tamaño, dueño, modos de protección, fecha de creación, fecha de la
última copia de seguridad, fecha de la última modificación o referencia, etc.
Gestión del sistema de archivos |5

El número de directorios varía de un SO a otro. El diseño más sencillo es el directorio de nivel


único: un único directorio contiene todos los archivos del sistema o volumen. Tiene muchos
inconvenientes, sobre todo en sistemas multiusuarios, y se presentan más problemas para
asignar protección a los archivos.

Una mejora se obtiene al considerar un directorio por usuario. Pero los usuarios que tienen
muchos archivos siguen teniendo un gran problema de organización de los mismos. La
solución es permitir una jerarquización total, creando un árbol de directorios.

Normalmente, cada usuario tiene su “directorio inicial”. Cuando un usuario se conecta, el


sistema operativo busca en un archivo de “cuentas” una entrada para este usuario.

Los nombres de los caminos pueden ser de dos tipos: completos o relativos.

La mayoría de los SO con estructura de directorios jerárquicos tienen dos entradas especiales
para cada directorio:
1) “.” (punto): es una entrada para el propio directorio (con un puntero a sí mismo)
2) “..” (punto-punto): es una entrada para el directorio padre (el que está por encima en la
jerarquía)

Otro problema es donde y como ubicar los directorios. Como suelen ser muy grandes, el mejor
sitio es el disco.

5.2.1 Operaciones con directorios

MAKEDIR (Crear directorio)


En el directorio actual se crea una entrada para un nuevo subdirectorio que estará vacío salvo
las entradas relativas a él mismo, “.”, y al directorio padre “..”.

REMOVEDIR (Borrar directorio)


Eliminar un directorio supone que está vacío. Si no es el caso se pueden hacer dos cosas:
1) No permitir borrar un directorio que no esté vacío. Primero borrar los archivos
contenidos en él.
2) Suponer que cuando se hace una petición de eliminar un directorio se quiere borrar
todos los archivos que contiene.

OPENDIR (Leer directorio)


En muchos sistemas abrir un directorio supone copiar las tablas del directorio en la memoria
principal de forma que se agilice la gestión. Cuando se termina de utilizar el directorio se cierra,
actualizándose en el disco las tablas.

READDIR (Leer directorio)


En un principio esta llamada era la misma que para los archivos (READ), pero suponia que el
programador o usuario debía conocer la estructura de los archivos. Por este motivo se utiliza
esta llamda, distinta, para devolver en un formato estándar la entrada actual del directorio.

RENAMEDIR (Cambiar de nombre)

LINK (Enlazar)
Forma de hacer que un archivo o subdirectorio aparezca en varios directorios. Se crea un
enlace entre el camino de acceso al archivo y el archivo.

UNLINK (Desenlazar)
Operación contraria a LINK.
Gestión del sistema de archivos |6

5.3 Realización del sistema de archivos


De forma general existen dos estrategias para almacenar un archivo de n bytes:
1) Asignar n bytes consecutivos del espacio del disco
2) Dividir el archivo en bloques que no necesitan estar adyacentes

En la asignación del espacio del disco los tres métodos más usados son:
a) Asignación contigua
b) Mediante listas enlazadas
c) Mediante índices

5.3.1 Gestión del espacio libre

La cuestión clave es mantener una lista del espacio libre en el disco. Para ello, se usan
principalmente dos métodos:
a) Mapa de bits de bloques libres: Un disco con n bloques, necesitará un mapa de bits de
n bits. No ocupa mucho espacio, y es preferible este método si existe espacio
suficiente en la memoria principal para mantenerlo.
b) Lista enlazada: Manteniendo un puntero al primer bloque libre. No es muy eficiente,
porque para recorrer la lista hay que leer todos los bloques. Una modificación de éste
método es utilizar una lista enlazada de bloques, en la que cada bloque contiene tantos
números de bloques libres como pueda.

Otra cuestión es la elección del tamaño de los bloques para la asignación. Un compromiso
habitual es elegir los bloques de 512 bytes, 1 Kb o 2 Kb.

5.3.2 Método de asignación contigua

La asignación contigua de un archivo se define por la dirección del primer bloque y la longitud
del archivo. Si un archivo ocupa n bloques y comienza en el bloque b, ocupará los bloques b,
b+1, … b+n-1.
La dificultad es la asignación de espacio correcto cuando se crea el archivo. Esto se debe a
que se tiene que buscar un hueco de bloques libres en el que se pueda introducir al archivo.
Las soluciones a esto son los algoritmos de primero en ajustarse o mejor en ajustarse.

Este método tiene buen rendimiento cuando se quiere leer un archivo completo. Pero también
tiene grandes inconvenientes: no es realizable salvo que se conozca el tamaño máximo del
archivo en el momento de su creación. El problema es grave en muchas aplicaciones en las
que los archivos crecen dinámicamente. El segundo problema es la fragmentación resultante
en el disco. La solución es la compactación, pero es una operación costosa.

5.3.3 Método de asignación mediante listas enlazadas

Se mantienen los archivos como una lista enlazada de bloques en el disco. Las entradas en el
directorio sólo tienen que guardar un puntero al primer bloque del disco asignado al archivo.
Escribir en el archivo supone coger uno de los bloques libres y añadirlo al final de la lista. Esta
técnica no causa fragmentación externa. El problema principal es el acceso aleatorio a un
archivo que es extremadamente lento.

5.3.4 Método de asignación mediante indexación

Una alternativa a las listas enlazadas es colocar los índices a los bloques de los archivos en
una tabla de índices. El directorio contiene la dirección del bloque donde están los índices a los
bloques de datos del archivo. Todo el bloque está disponible para los datos y se soporta con la
misma eficacia el acceso aleatorio y el secuencial. Aunque presenta pérdida de espacio, hay
una solución, utilizar sistemas de indexación de varios niveles.
Gestión del sistema de archivos |7

5.3.5 Algunos aspectos de diseño

Un sistema de archivos tiene dos problemas de diseño. Por una parte hay que definir cómo
verá el usuario al sistema de archivos. Y se tienen que crear los algoritmos y las estructuras de
datos que relacionan al sistema de archivos lógicos con el dispositivo físico de
almacenamiento.

Por otra parte, el sistema de archivos se puede considerar compuesto por varios niveles:
- El nivel más bajo consiste en los dispositivos físicos de control de las transferencias de
información entre la memoria y el disco
- El siguiente nivel es el sistema básico de archivos, que usa las características del nivel
anterior para leer y escribir bloques al y desde el disco.
- La indicación de os bloques que tiene que leer o escribir el sistema básico de archivos lo
hace un módulo de organización de archivos.
- La estructura de directorios la conoce el sistema de archivos lógicos. Los directorios se
pueden tratar como archivos de forma que el módulo de organización de éstos puede leer
y escribir los directorios.
- Por último se tendrían los programas de aplicaciones.

Otro aspecto que hay que cuidar es el control de acceso.

5.3.6 Compartición de archivos

Un archivo o un directorio compartido no es lo mismo que dos copias del archivo.


La compartición de archivos se puede realizar de distintas formas. Una de las más comunes
consiste en tener una pequeña estructura de datos, el nodo-i, asociada al propio archivo, de
forma que los directorios apuntarían al nodo-i correspondiente.

Mediante enlaces simbólicos. Se crea un nuevo archivo que contiene solamente la ruta de
acceso al archivo al que se quiere enlazar. Sólo el propietario verdadero del archivo tiene un
apuntador al nodo-i. Los usuarios enlazados al archivo tienen nombres de rutas de acceso y no
apuntadores al nodo-i. Cuando el propietario elimina el archivo este se destruye, y los
posteriores intentos de otros usuarios de acceder a él fracasarán. El inconveniente de los
enlaces simbólicos es su alto coste.

5.4 Cachés de disco


Como consecuencia de los diferentes tiempos de acceso entre la memoria principal y la
secundaria, muchos sistemas operativos han sido diseñados para reducir el número necesario
de accesos.
Una de las técnicas más comunes son las cachés de disco. La idea es mantener un depósito
de copias de bloques del disco en la memoria principal.

Uno de los algoritmos más comunes para la administración de la caché es verificar todas las
solicitudes de lectura/escritura para saber si el bloque solicitado se encuentra en la caché.
Cuando se tiene que cargar un bloque en una caché totalmente ocupada se pueden utilizar
algoritmos tipo FIFO, LRU, etc.

Una de las dificultades de uso de las cachés surge en las peticiones de escritura al disco, ya
que se si la escritura se hace en la caché y posteriormente se hace realmente en el disco, se
pueden presentar situaciones de inconsistencia o corrupción de archivos si entre ambas
escrituras se produce un fallo del sistema. En Unix se vacía la caché a intervalos periódicos
mediante una llamada al sistema (sync), que obliga a todos los bloques modificados a
actualizarse en el disco.
Otra técnica es la utilización de cachés de escritura directa, en este caso los bloques
modificados se escriben inmediatamente en el disco. Con esta solución disminuye el
rendimiento.
Gestión del sistema de archivos |8

El uso de la caché supone una gestión más compleja en el acceso a los archivos de los discos
y presenta además el peligro potencial de las inconsistencias o corrupciones indicadas, pero
estos inconvenientes quedan compensados por sus ventajas, entre las que se encuentran:
a) Mejora del tiempo efectivo de acceso al disco y del tiempo de respuesta de las
aplicaciones
b) Eliminación de algunos accesos al disco, puesto que mientras los bloques están en la
caché pueden ser leídos y escritos varias veces antes de actualizarse en el disco.
c) En la utilización de discos compartidos en red supone una gran reducción de la carga
en el servidor de archivos y en la res, ya que los archivos de los discos compartidos
pueden ser capturados en caché.

5.5 Seguridad y protección

5.5.1 Integridad del sistema de archivos

Los problemas del sistema de archivos pueden venir por el uso de bloques del disco que están
en mal estado. Se puede solventar conociendo cuales son los bloques defectuosos.
Las inconsistencias en el SO pueden ocurrir por otras causas: si el sistema falla en la mitad de
una operación de lectura, modificación y escritura de un bloque…

Los problemas usuales de inconsistencia:


a) Que un bloque aparezca en la lista de bloques usados y bloques libres. La solución es
eliminarlo de la lista de bloques libres.
b) Que un bloque no aparezca en ninguna lista. La solución es añadirlo a la lista de
bloques libres.
c) Que un bloque esté repetido en la lista de bloques libres. La solución es reconstruir la
lista de bloques libres, con una entrada para cada bloque libre.
d) Que un bloque esté asignado a dos o más archivos. Si se elimina uno de los archivos
se presenta la situación a), o si se eliminan los dos la c). La solución es que se asigne
un bloque libre a un archivo y se copie el contenido del bloque que estaba asignado a
los dos.

Suele haber utilidades del SO que las detectan y, si nos extremadamente graves, las pueden
corregir.

La forma más fácil de realizar copias de seguridad es haciendo volcados periódicos de todo el
sistema de archivos. Otra forma es mediante los volcados incrementales. Sólo se transfieren
aquellos archivos que han sido modificados desde la última vez que se hizo un volcado de
seguridad. La principal desventaja de los volcados incrementales es la cantidad de datos que
se generan y la complejidad del procedimiento de restauración.

5.5.2 Ataques a la integridad y seguridad del sistema de archivos

El objetivo de la seguridad es prevenir y eliminar las amenazas de intrusos.

La penetración en un sistema informático se puede hacer de diferentes formas y por diversos


medios:
a) La utilización por parte del intruso de la cuenta de un usuario legítimo. Cuando el
usuario legítimo deja una sesión abierta en un terminal, u obteniendo la contraseña de
un usuario.
b) La ejecución de “caballos de Troya”, frecuentemente destinada a obtener datos o
derechos de acceso del usuario. El intruso crea un programa falso de login para
conocer la contraseña.
c) Gusanos y virus informáticos. El virus es parte del código de un programa, que
infectará a otros programas copiándose. Por lo general, también realiza actividades
dañinas, como eliminar archivos o corromper los bloques de arranque del disco. El
Gestión del sistema de archivos |9

gusano es un programa en si mismo. Causa graves problemas al sistema debido a que


carga en exceso al computador.
d) La inspección del sistema de archivos. Hay sistemas que permiten por defecto leer los
archivos a todos los usuarios.

5.5.3 Principios de diseño de sistemas seguros

1) El diseño del sistema debe ser público. Los algoritmos pueden ser conocidos, pero las
claves deben ser secretas.
2) El estado predefinido es el de no acceso. Los derechos de acceso deben ser
adquiridos sólo con permiso explícito.
3) Verificar la autorización actual. Cada petición de acceso a un objeto debe conllevar la
comprobación de la autorización.
4) Mínimos privilegios. Cada proceso debe utilizar el mínimo grupo de de privilegios para
completar su tarea.
5) Mecanismo simples e integrados. Un diseño tan sencillo como sea posible facilita la
verificación y corrección de las implementaciones.
6) Psicológicamente aceptable. Debe ser fácil de usar de forma que sea aplicado
correctamente y no sea rechazado por los usuarios.

5.5.4 Identificación de usuarios

Para que un usuario acceda al sistema, debe ser validado por el mismo. La validación se basa
en:
1) Posesión de un secreto (contraseña).
2) Posesión de un artefacto (tarjetas magnéticas, llaves…).
3) Uso de alguna característica fisiológica o de comportamiento del usuario (huellas
dactilares, patrones de voz…).

5.6 Mecanismos de protección y control de acceso


La necesidad de compartir objetos tanto en memoria principal como en la memoria secundaria
motivó que los mecanismos de acceso se hicieran más complejos.
Hay que distinguir entre política de protección y mecanismo de protección. Los mecanismos
dicen como se hará algo, mientras que la política dice qué se hará.

5.6.1 Dominios de protección

Un proceso sólo debe poder acceder a aquellos recursos para los cuales está autorizado y que
necesita en ese momento para completar su tarea (principio de la necesidad de saber).
Cada proceso trabaja dentro de un dominio, el cual especifica los recursos a los cuales puede
tener acceso. Cada dominio define un conjunto de objetos y las operaciones que se les pueden
aplicar.

5.6.2 Matriz de acceso

Las relaciones entre dominios y objetos se pueden representar con una matriz (matriz de
acceso). Las filas de la matriz representan dominios y las columnas objetos.
El problema es como realizar de forma eficaz la matriz.
Generalmente es una matriz dispersa, con muchos huecos vacíos. Por ello, una forma sencilla
de realizarla es mediante una tabla global, consistente en tripletas ordenadas (dominio, objeto,
derechos). Lo malo es que la tabla suele ser grande y no se puede conservar en memoria
principal, por lo que requiere operaciones de E/S. Hay dos métodos prácticos, almacenar la
matriz por columnas (lista de accesos) o por filas (lista de capacidades).
G e s t i ó n d e l s i s t e m a d e a r c h i v o s | 10

5.6.3 Lista de accesos

A cada objeto se le asocia una lista ordenada con todos los dominios que pueden tener acceso
al objeto y la forma de dicho acceso.
El principal inconveniente es el retardo que se provoca con la búsqueda para verificar la
autoridad de un sujeto para acceder al objeto solicitado. Para evitar búsquedas largas, algunos
sistemas dividen a los usuarios en grupos y sólo almacenan los derechos de acceso de los
grupos.

5.6.4 Lista de capacidades

A cada dominio se le asocia una lista de objetos a los cuales puede tener acceso, junto con
una indicación de las operaciones permitidas sobre cada objeto.
Las capacidades se propusieron como un tipo de apuntador seguro para satisfacer la
necesidad de protección de recursos en los sistemas multiprogramados.
Nunca se permite que una capacidad se mueva al espacio de direcciones accesibles por un
proceso de un usuario. Manteniendo las capacidades seguras, los objetos a los que protegen
también están seguros frente a un acceso no autorizado.
Uno de los inconvenientes es la revocación de acceso a un objeto, ya que el sistema tiene que
determinar todas las capacidades existentes para cierto objeto y eliminarlas. La forma de
invalidar la capacidad es romper el enlace entre el objeto indirecto y el real.

También podría gustarte