Subido por Hugo De Lamo Martínez

Tema 7

Anuncio
TEMA 7
GESTIÓN DE FICHEROS Y DIRECTORIOS.
FUNCIONES Y ESTRUCTURA DE UN SGF
Un Sistema de Gestión de Ficheros (SGF) es aquel sistema software que proporciona a los usuarios y
aplicaciones un conjunto de servicios relativos al empleo de ficheros. Al ser la única forma de acceder a
los ficheros, es necesario desarrollar software de propósito específico para cada aplicación.
Esta funcionalidad del SGF puede resumirse en cuatro grandes puntos:




El SGF es responsable de la gestión de los soportes físicos de la información (por supuesto a través de
los correspondientes drivers) ocultando al usuario los detalles de la organización física de los ficheros.
El SGF es responsable de garantizar la seguridad y protección de los ficheros, asegurando la integridad
de estos en caso de incidente, así como de garantizar que se respeten las reglas de utilización
establecidas.
El SGF implementa la parte de alto nivel de las E/S independientes de dispositivo.
El SGF realiza la correspondencia entre las organizaciones lógica y física de los ficheros. La organización
lógica vendrá definida por los usuarios en función de la naturaleza de la aplicación concreta de que se
trate. La organización física está directamente relacionada con los dispositivos de almacenamiento.
NOCIONES SOBRE FICHEROS
Los ficheros son entidades que permiten el almacenamiento de datos y programas. El concepto de
fichero está soportado por el SGF que gestiona los dispositivos de almacenamiento masivo. Es el sistema
de ficheros quien se interpone entre el dispositivo físico de almacenamiento secundario y el usuario,
ocultando a este último las características físicas del dispositivo y dotándole de una herramienta lógica
de manipulación de la información independiente del dispositivo concreto.
Es una unidad de almacenamiento lógico que hace abstracción de las características físicas del
dispositivo. Desde el punto de vista de su contenido, podeos decir que un fichero es una colección de
informaciones relacionadas que han sido definidas por su creador.
Cuando se habla de ficheros se utilizan cuatro términos comunes:




Campo. Elemento de datos básico. Un campo individual contiene un valor único. Su contenido es
proporcionado por un usuario o un programa.
Registro. Es una colección de campos relacionados que pueden tratarse como una unidad en algunos
programas de aplicación (ejemplo: registro empleado contiene nombre, apellidos, DNI, . . .).
Fichero. Es una colección de registros similares. Los usuarios y las aplicaciones tratan al fichero como
una entidad única y se refieren a él por un nombre.
Base de datos. Colección de datos relacionados. Las relaciones existentes entre los datos son explicitas y
que están diseñadas para ser usadas por varias aplicaciones. Consta de una o más clases de ficheros.
TIPOS DE FICHEROS

Regular (-): ficheros que contienen información introducida por un usuario, un programa de aplicación,
un programa de utilidad del sistema o un usuario. ASCII o binarios

Directorios (d): Contiene una lista de nombres de fichero y punteros a inodos (nodos de información)
asociados. Los directorios están organizados jerárquicamente. Los ficheros de directorio son en realidad
ficheros regulares con unos privilegios especiales de protección de forma que solo el sistema de ficheros
pueda escribir en ellos, mientras que los programas de usuario disponen de acceso de lectura.

Especiales: Usados para acceder a dispositivos periféricos, como terminales o impresoras. Cada
dispositivo de E/S está asociado a un fichero especial, que puede ser de bloques (b) o de caracteres (c),
en función de cómo se realiza la transferencia de datos con el periférico.

Enlace simbólico (l): Es un camino a otro fichero del sistema de ficheros.

Pipes o tuberías (p): Fichero temporales que permiten la comunicación entre procesos.
PROPIEDADES O ATRIBUTOS DE LOS FICHEROS
Todo fichero consta de un nombre, la información contenida en ´el y una información adicional acerca
del propio fichero como entidad del SGF. Esta información adicional contiene los atributos del fichero.





Tipo de fichero. Esta información es necesaria en aquellos sistemas que soportan varios tipos.
Localización. Es un puntero a un dispositivo y la localización del fichero en dicho dispositivo.
Protección asociada al fichero. Especifica quien puede y quien no puede acceder al mismo, así como el
modo de acceso (lectura, escritura, ejecución, . . .).
Identificador del usuario creador.
Identificador del usuario propietario actual.
Fecha de creación.
Fecha de la última modificación.

Tamaño (en bytes, palabras o bloques).

Operaciones sobre ficheros
Los ficheros permiten almacenar información en dispositivos de memoria secundaria con independencia
del dispositivo particular. Un fichero puede ser atendido como un tipo abstracto de datos sobre el que
están definidas una serie de operaciones que se invocan mediante llamadas al sistema donde el nombre
del fichero actúa como parámetro.
crear (Fichero, Atributos) El fichero es creado en el sistema con el nombre y los atributos indicados.
borrar (Fichero) El fichero es eliminado del sistema de ficheros.
abrir (Fichero, operaciones Permitidas) La apertura de un fichero provoca la creación de una estructura
en memoria llamada descriptor de fichero que recoge los atributos del fichero y su ubicación en el disco.
Asimismo, la apertura de un fichero origina la creación de un buffer en memoria principal donde se
almacenan los bloques leídos del disco y desde donde se escriben los bloques al disco.
cerrar (Fichero) Con esta operación se libera el descriptor de fichero y la memoria asignada a las
operaciones de entrada y salida.
leer (Fichero, Buffer, NumeroDeRegistrosLogicos) La llamada al sistema especifica el fichero, el número
de los registros lógicos que queremos leer desde la posición actual y la estructura de datos en espacio
de usuario donde se almacenarán estos. En sistemas con ficheros no estructurados, como Unix, un
registro lógico es un byte, por lo que el tercer parámetro es el número de bytes que se leen.
escribir (Fichero, Buffer, NumeroDeRegistrosLogicos) La llamada al sistema especifica el fichero, el
número de los registros lógicos que queremos escribir desde la posición actual y la estructura de datos
en espacio de usuario donde residen los registros lógicos.
posicionar (Fichero, NumeroDeRegistrosLogicos) Esta operación aparece en ficheros de acceso
aleatorio. Contiene como parámetros el nombre del fichero y el número de secuencia del registro lógico
al que queremos acceder
obtener Atributos (Fichero) Permite obtener los atributos del fichero pasado como parámetro.
poner Atributos (Fichero, Atributos) Permite cambiar los atributos del fichero pasado como parámetro.
renombrar (Fichero) Permite cambiar de nombre a un fichero.
En MS-DOS





Dir a*: listado de los ficheros del directorio actual que comienzan por a.
Type pepe: muestra por pantalla el contenido del fichero pepe.
Del pepe: borra el fichero pepe.
Copy pepe copia: copia el fichero pepe y al nuevo fichero le da el nombre copia.
Rename pepe nuevo: renombra el fichero pepe, siendo el nuevo nombre nuevo.
En Windows
Las llamadas al sistema para la manipulación de ficheros pueden ser utilizadas bien de forma directa
desde un programa, o de forma indirecta a través de los comandos de la Shell del sistema operativo.
DIRECTORIOS
El directorio contiene información sobre los ficheros que pertenecen a él. Gran parte de la información,
especialmente la de almacenamiento, es gestionada por el S.O. Un directorio es un fichero del S.O.
accedido únicamente a través de rutinas de gestión de ficheros. La mayor parte de la información se
proporciona indirectamente a usuarios y aplicaciones a través de rutinas del sistema. Los usuarios no
acceden directamente al directorio, incluso en modo lectura.
ESTRUCTURA DE DIRECTORIOS
Un sistema de directorio proporciona un mecanismo para dotar a los numeroso ficheros del sistema de
una estructura lógica. La organización de los ficheros atiende a un criterio jerárquicos. En el nivel más
alto se encuentra el denominado directorio raíz. El directorio raíz es un fichero que contiene una tabla.
Las entradas de dicha tabla son de dos tipos: ficheros y subdirectorios.
La información que puede almacenarse en cada entrada de directorio es la siguiente:
Nombre del fichero, Tipo de fichero (Texto, binario, Volumen), Dirección de comienzo, tamaño usado y
asignado, propietario, información de acceso, acciones permitidas, fecha de creación, fecha de última
lectura, identidad del último lector, fecha de última modificación, identidad del último modificador,
fecha de la última copia de seguridad, utilización actual
ESTRUCTURA DE ÁRBOL (DE PROFUNDIDAD ARBITRARIA)
Los directorios contienen ficheros (bit en la entrada a 0) o subdirectorios (bit en la entrada a 1).
Permite a los usuarios crear su propia estructura de subdirectorios dada por diferentes temas: datos,
programas, textos, . . .
Al utilizar una estructura de árbol es necesario introducir nuevas
operaciones de gestión de subdirectorios (creación, eliminación)
e implementarlas mediante nuevas llamadas al sistema.
El árbol tiene un directorio raíz. Cada fichero en el sistema tiene
un único camino (camino desde la raíz, a través de todos los
subdirectorios, hasta un fichero especificado)
El sistema de ficheros proporciona servicios para cambiar de
directorio actual y cuando se referencia un fichero, este se busca
en el directorio actual.
El directorio actual tiene influencia en el tratamiento que se da a una ruta de fichero:


Ruta absoluta de nombre de fichero: comienza en el directorio raíz.
Ruta relativa al directorio actual de nombre fichero: comienza en el directorio actual.
Prohíbe la compartición de ficheros o directorios.
Sistemas operativos que implementan este sistema de directorios: DOS y Windows.
ESTRUCTURA DE GRAFO ACÍCLICO
Un grafo acíclico es una generalización de una estructura de árbol que permite a los directorios tener
ficheros o subdirectorios compartidos (hay varias entradas de directorio apuntando a ese fichero o
directorio).
Los ficheros y subdirectorios compartidos pueden ser implementados de diferentes maneras:
Creación de un enlace simbólico: Se crea una nueva entrada de directorio que es realmente un nuevo
fichero de tipo especial que hace referencia al fichero o subdirectorio compartido mediante una ruta
relativa o absoluta. Cuando se hace una referencia a un fichero especial, el sistema busca el fichero en el
directorio actual. Si la búsqueda tiene éxito y la entrada del directorio está marcada como enlace, se
toma esa ruta como referencia al fichero objetivo.
Creación de un enlace no simbólico. Se crea una nueva entrada de directorio con contenido igual a la
entrada de directorio del fichero sobre el que se hace el enlace. No se crea un nuevo fichero, se añade
una entrada de directorio que hace referencia un fichero que existe previamente.
Problemas derivados del grafo acíclico:


Las operaciones que involucren un recorrido de la
estructura de directorios (backup o recoger información
estadística) no deben recopilar dos veces información
de un mismo fichero, debido a enlaces.
Para liberar y reusar el espacio asignado a un fichero se
borran las entradas de directorio y sólo se borran los
ficheros cuando se borra el último nombre que lo
referencia mediante enlaces no simbólicos. Para ello se
dispone de un contador que decrementa en cada
operación de borrado y se liberará el espacio de
memoria física cuando el contador sea igual a 0.
OPERACIONES SOBRE DIRECTORIOS
CrearDir(Directorio) Crea un subdirectorio en el directorio actual.
BorrarDIr(Directorio) Borra un subdirectorio del directorio actual.
CambiarDir(Directorio) Cambia el directorio actual al directorio especificado como parámetro. Es
posible especificar el directorio al que se quiere acceder de forma absoluta (al directorio raíz) o de
relativa al directorio actual.
Mostrar(Directorio) Obtiene una relación de los ficheros y los subdirectorios de un directorio y la
información asociada a cada uno de ellos.
Enlazar(fich1, fich2) Permite que un fichero pueda aparecer en varios directorios. link(fichero) en Unix
Desenlazar(fichero) Se borra una entrada del directorio. Si el fichero está sólo presente en un directorio
es borrado del sistema de ficheros. Si está presente en varios directorios, permanece en el sistema.
Unlink (fichero) en Unix.
ALMACENAMIETNO DE LOS FICHEROS
En disco, un fichero consta de un conjunto de bloques. El sistema operativo o el sistema de gestión de
ficheros es responsable de la asignación de los bloques de disco a los ficheros. Esto plantea dos
cuestiones: debe elegirse cómo asignar el espacio de disco a los ficheros y es necesario guardar
constancia del espacio disponible para asignar
En la asignación de ficheros surgen varias cuestiones:
1.
2.
3.
Cuando se crea un nuevo fichero, ¿se asigna de una sola vez el máximo espacio que necesite?
El espacio se asigna a un fichero en forma de una o más unidades contiguas, que se llaman secciones. El
tamaño de una sección puede variar desde un ´único bloque a un fichero entero. ¿Qué tamaño de
sección debería usarse para asignar ficheros?
¿Qué tipo de estructura de datos o tabla se usaría para guardar constancia de las secciones asignadas a
un fichero? Dicha tabla se conoce normalmente como tabla de asignación de ficheros.
Para poder acceder al contenido de los ficheros es necesario realizar una traducción desde la visión
lógica de los ficheros (cómo los ve el usuario final) a la visión física (cómo están almacenados realmente
en disco). Ante una llamada al sistema de lectura de un fichero hay que realizar una serie de pasos para
obtener los bloques físicos.

A partir de la posición actual de lectura del fichero, la llamada al sistema read indica cuántos bytes se
van a leer, se delimitan en el fichero lógico (secuencia de bytes) las posiciones de inicio y final de los
datos a leer.

Como la información almacenada en los
ficheros está agrupada en bloques, se
debe identificar a qué bloques lógicos
corresponde la información a leer. Se
obtienen los bloques lógicos que se
deben leer del disco. Muy
probablemente no se necesite la
información completa contenida en el
primer y último bloque, pero se ha de
obtener todo el bloque del disco al ser la
unidad mínima de lectura y escritura.

Para cada bloque lógico se ha de obtener en qué bloque físico está almacenado. Esto depende del
proceso de asignación de bloques y del diseño de la tabla de asignación de ficheros.
ESTRATEGIAS DE ASIGNACIÓN DE ESPACIO
El objetivo de un método de asignación es el espacio debe ser asignado para aprovecharlo de forma
eficaz y, por otra, el acceso al fichero debe ser lo más rápido posible.
ASIGNACIÓN CONTINUA
Cuando se crea un fichero se le asigna un único conjunto contiguo de bloques. Es una estrategia de
asignación previa que emplea secciones de tamaño variable. La tabla de asignación de ficheros necesita
una entrada por cada fichero que muestre el bloque de comienzo y la longitud.
Facilita el acceso secuencial. Se pueden traer múltiples bloques de una vez para mejorar el rendimiento
en los tratamientos secuenciales. La recuperación de un bloque es sencilla: si un fichero empieza en el
bloque b y se necesita el bloque i-ésimo del fichero, su ubicación en memoria secundaria viene dada por
b+i.
El principal inconveniente es la fragmentación externa que surge conforme los ficheros son creados y
borrados lo que hace que, aunque exista espacio suficiente para contener un fichero, no se pueda
asignar por no disponer de suficiente espacio contiguo. Para prevenir pérdidas de espacio por
fragmentación externa, el usuario debe ejecutar un procedimiento de compactación, que consiste en
una reasignación de los ficheros del disco en nuevos bloques físicos para obtener un único y gran hueco
al final.



Primer ajuste y siguiente ajuste: Se examina la lista de huecos libres y se asigna al fichero el primer
hueco que tenga un tamaño suficiente para contenerlo. La búsqueda puede comenzar donde terminó el
anterior ajuste (siguiente ajuste) o al comienzo de la colección de huecos (primer ajuste). Tiene la
ventaja de la rapidez y el inconveniente de mala utilización del espacio del disco ya que deja muchos
pequeños espacios que no podrán
ser usados.
Mejor ajuste: Asignación del
hueco más pequeño que pueda
contener al fichero. Permite
aprovechar mejor el espacio del
disco, pero es más lento ya que la
lista debe ordenarse o recorrerse
enteramente. Produce espacios
libres de más pequeños que el método anterior.
Peor ajuste: Se asigna el hueco más grande. Consigue que es espacio libre que queda sea lo
suficientemente grande para contener más ficheros, pero no permite la existencia de ficheros grandes.
Es lento ya que a no ser que esté ordenada, ya que la lista debe estar ordenada o recorrerse
enteramente.
El método que funciona peor es el peor ajuste. Los otros dan mejores resultados de tiempo y de
utilización del almacenamiento. El método del primer ajuste es el más rápido.
Otro problema es la inserción. Si se añade al final del fichero no existe problema mientras no se alcance
el espacio del fichero o el final del disco. Si se inserta a mitad del fichero, hay que desplazar toda la
información.
La asignación continua debe utilizarse cuando el tamaño y número de los ficheros sea fijo (backup).
ASIGNACIÓN ENLAZADA
Asignación por bloques individuales en donde cada uno contendrá un puntero al siguiente bloque de la
cadena. La tabla de asignación de ficheros necesita una entrada por cada fichero que muestre el bloque
de inicio y la longitud del fichero.
Es posible la asignación previa, pero es común la asignar bloques conforme se necesiten. El fichero se
almacena en el disco como una lista enlazada de bloques, los cuales pueden estar en cualquier parte del
disco.
Se elimina la fragmentación externa y la
necesidad de compactación. El SO
maneja una lista de bloques libres o un
mapa de bits para conocer los bloques
libres.
El acceso secuencial se basa en el
recorrido de los bloques según los
punteros. El acceso directo se ve muy
afectado, hasta el punto de no existir.
Para llegar al bloque i se ha de recorrer
todos los bloques anteriores.
Para facilitar las inserciones y borrados en mitad del fichero se incluye un campo en el bloque para
indicar el número de bytes ocupados. La inserción y borrado de un nuevo bloque intermedio es un
problema de gestión de listas.
Los bloques sin ocupar por completo introducen el problema de fragmentación interna y surge el
problema de la fiabilidad. Como los ficheros están encadenados por punteros distribuidos por todo el
disco si uno de ellos se pierde o daña se rompe la cadena de bloques asignados a un fichero y se
reconducirá erróneamente hacia espacio no asignado o al espacio de otro fichero.
Una solución a esto consiste en utilizar listas doblemente enlazadas hacia delante y hacia atrás o en
almacenar en cada bloque el nombre del fichero y un número relativo de bloque.
ASIGNACIÓN INDEXADA
La tabla de asignación de ficheros contiene un índice separado
de un nivel para cada fichero, el índice posee una entrada para
cada sección asignada al fichero. Existe un bloque índice que
posee una entrada por cada bloque asignado al fichero. Los
índices no están almacenados físicamente en la tabla de
asignación de ficheros. En la tabla de asignación de ficheros se
guarda un puntero a un bloque que contiene los índices de
ficheros. La asignación puede hacerse por bloques de tamaño
fijo o en secciones de tamaño variable.
Cuando el fichero se crea, todos los bloques de índice son
puestos a nil. Cada vez que un fichero solicita un nuevo
bloque, se extrae de la lista de espacios libres y su dirección se
escribe en una nueva entrada del bloque de índices del
fichero.
Elimina la fragmentación externa y permite el acceso directo.
El inconveniente es el consumo añadido de espacio ya que el desperdicio de espacio para los bloques de
índice es mayor que en la asignación encadenada, ya que necesita al menos un bloque físico por fichero
que almacene los índices (la mayor parte de los ficheros son pequeños)
Con un fichero de 1 o 2 bloques; en la asignación encadenada sólo se desperdicia el espacio
correspondiente a un puntero en cada bloque; en la asignación indexada se debe utilizar un bloque
entero por fichero, aunque sólo dos punteros del bloque sean distintos de nil.
El bloque de índices deber ser tan pequeño como sea posible para reducir el desperdicio de espacio y lo
suficientemente grande como para contener los punteros necesarios para almacenar el fichero más
largo que vaya a utilizar el sistema. Los ficheros grandes contienen más bloques físicos de los que un
bloque de índices con pocas entradas es capaz de referenciar.
Índices multinivel
Utiliza un bloque de índices cuyas entradas contienen apuntadores a bloques de índices. Esta
aproximación puede continuar con sucesivos niveles de indexación.
Con 256 entradas en un bloque de índices con dos niveles de indexación, se tienen 256 ∗ 256 = 64 K
punteros a los bloques físicos asignados al fichero. Si cada bloque físico contiene 1024 bytes, se permite
almacenar ficheros de 64 Mbytes.
Índices enlazadas
Se mantiene en la entrada de un fichero en el directorio una tabla reducida de punteros, entre ellos las
direcciones de los primeros k bloques físicos ocupados por el fichero. Si el fichero requiere más de k
bloques, el puntero k + 1 y último, que es nil para ficheros pequeños, apunta a un bloque de índices
adicional.
Si este bloque resulta insuficiente se enlaza con otro bloque sucesivamente hasta que se asigna un
fichero completamente. Los ficheros pequeños no necesitan índices separados y no pierden un bloque
completo en el bloque de índices. Si el fichero es grande (mayor de k bloques) se puede utilizar un
bloque de índice ya que el espacio adicional requerido no es alto.
Índices combinados
Utilizado por UNIX. La entrada en el directorio de un fichero determinado consiste en el nombre del
fichero y un puntero a un inodo asociado al fichero. El inodo contiene k punteros que referencian
bloques de datos. Si el fichero es pequeño, toda la información de direccionamiento del fichero se hace
disponible con una lectura del bloque que contiene el inodo por lo que no es necesario gastar bloques
de índice. Si el fichero crece, es necesario recurrir a los siguientes punteros del inodo:



El puntero k + 1 referencia un bloque físico que contiene punteros a bloques de datos.
El puntero k+2 referencia un bloque que contiene punteros a bloques que apuntan a bloques
de datos.
El puntero k + 3 consigue un tercer nivel de indexación.
Se combina el acceso directo a bloques de datos con el uso de índices multinivel.
GESTIÓN DE MEMORIA LIBRE
Para gestionar el espacio libre se utiliza la lista de espacio libre, en donde figuran los bloques del disco
que pueden ser utilizados.
Para crear un nuevo fichero, se busca en la lista de espacio libre según un parámetro que indica el
espacio que se necesita. Cuando se encuentra este espacio, se resta de la lista de espacio libre y se
coloca ahí el fichero.
Para borrar un fichero, se suma a la lista de espacio libre los bloques que ocupaba para que puedan ser
utilizados por otro fichero. Formas de implementación de la lista de espacio libre:
MAPA DE BITS
Utiliza un vector que contiene un bit por cada bloque del disco, con valor 0 si corresponde a un bloque
libre y 1 si está ocupado.
Tiene la ventaja de la sencillez para encontrar un bloque o un grupo contiguo de bloques libres y que
puede ser tan pequeña como sea posible y mantenerse en memoria principal, evitando traer la tabla de
asignación de disco cada vez que se realice una asignación.
Pierde eficiencia si no resulta posible conservar el mapa completo en memoria principal. Método
empleado en Unix.
Ejemplo.: dentro de un Disco de 120 Mbytes y bloques de 512 bytes. El disco tiene 240 K bloques, y
necesitará un mapa de 240 Kbits, que pueden ser almacenados en 60 bloques. Esto representa
60/245760 = 1/4096 del espacio total del disco.
LISTA ENLAZADA DE BLOQUES LIBRES
Existe una lista que contiene todos los bloques libres del disco, con un puntero al primer bloque libre.
Tiene el inconveniente ser ineficiente, ya que recorrer una lista de n bloques supone n accesos al disco.
LISTA ÍNDICE DE BLOQUES LIBRES
Lista de bloques donde en cada bloque se almacenan las direcciones de n bloques libres. La dirección
última se utiliza para encadenar con otro bloque que también contenga información de bloques libres.
Más eficiente que la lista enlazada de bloques libres, ya que al poder mantener constantemente en
memoria uno o dos bloques de la lista, se dispone de forma inmediata de un conjunto de n o 2n bloques
libres.
A diferencia del mapa de bits, a medida que los bloques se van ocupando, el tamaño de la lista
disminuye. La ventaja es conocer con rapidez las direcciones de un gran número de bloques libres, aun
dedicando poca memoria principal para utilizar la lista. Empleado por el sistema operativo DOS.
Ejemplo.: Disco de 200 Mbytes y bloques de 1 Kbyte. El disco tendrá 200 K = 204800 bloques.
Consideremos direcciones de bloque de 32 bits. En un bloque de 1024 bytes caben 256 direcciones de
bloque de 32 bits, de las cuales una de ellas se utiliza para el encadenamiento. En este caso n vale 255.
Almacenar 200 K direcciones exige 804 bloques. La lista requiere entonces una fracción 804/204800 =
1/255 del espacio total del disco cuando se halla totalmente vacío.
LISTA ENLAZADA DE SECCIONES LIBRES
Las secciones libres pueden encadenarse juntas mediante un puntero y un valor de longitud en cada
sección libre. En el mismo bloque libre (el primero del grupo) puede almacenarse información necesaria:
puntero al siguiente hueco y número de bloques que conforman el hueco. Solamente hay que
almacenar un puntero al primer hueco y este suele ubicarse en un bloque concreto al inicio del disco. Se
utiliza mucho junto con asignación contigua.
Casos de estudio
ORGANIZACIÓN FÍSICA
El Bootstrap es una rutina que ocupa el inicio de un sistema de ficheros (tamaño de un único bloque). Su
misión es cargar en memoria el núcleo. Todo sistema de ficheros contiene este bloque y sólo será
utilizado en el sistema de ficheros raíz de la configuración.
El superbloque describe el estado actual del sistema de ficheros (tamaño del sistema de ficheros,
número de bloques libres, número de inodos libres…)
Mapa de bits: vector con un bit por cada bloque que contiene su estado (asignado o libre).
Lista de inodos: ocupa una serie de bloques de disco donde está almacenada la información general
relativa a cada fichero del sistema (los inodos son los descriptores de ficheros en disco).
Lista de bloques de datos: comienza al final de la lista de inodos. Se almacena la información de los
ficheros, directorios, bloques de datos libres…
INODOS
Un inodo es una estructura de control que contiene la información clave de un fichero necesaria para el
SO. Pueden asociarse varios nombres de fichero a un mismo inodo, pero un inodo activo se puede
asociar con un único fichero y cada fichero es controlado por un solo inodo. Los atributos, permisos e
información de control del fichero se almacenan en el inodo.
Para acelerar las operaciones sobre ficheros, el núcleo mantiene una caché de inodos en memoria
principal.
ESTRUCTURA DE UN DIRECTORIO
Un directorio es un fichero cuyos datos son una secuencia de entradas o registros con la estructura:
El offset es el desplazamiento respecto al
comienzo del fichero que contiene el
directorio.
Para cada fichero contenido en el directorio
se indica su inodo (información mínima
asociada a una entrada de directorio).
Cuando se borra un fichero se indica el
número 0 de inodo para que la entrada
pueda ser reutilizada posteriormente.
El directorio es almacenado físicamente en el disco igual que un fichero regular, utilizando el mismo
sistema de indexación.
MONTADO DE SISTEMAS DE FICHEROS
En sistemas operativos con unidades de disco en donde cada partición/dispositivo contiene un sistema
de ficheros, para poder acceder a su contenido, cada sistema de ficheros debe ser integrado en el
sistema de ficheros raíz utilizando un punto de montaje (directorio reservado para ello). Si el punto de
montaje contenía ficheros, desaparecerán, y únicamente se visualizarán los del dispositivo montado.
Para realizar el montado se utiliza la orden mount /dev/usb /mnt/usb, donde /dev/usb es el fichero
especial que representa al dispositivo USB y /mnt/usb es el punto de montaje.
Para realizar el desmontado, y poder extraer físicamente el dispositivo sin dañar los ficheros que
contiene, se utiliza la orden umount /mnt/usb
Una vez realizado el montado de sistemas de ficheros, se permite acceder a todas las particiones desde
un único directorio raíz.
ORGANIZACIÓN FÍSICA
Sector de arranque secundario: accedido desde el sector de arranque si la tabla de particiones indica
que esta es la partición activa.
Fat: (File Allocation Table)
Copia de la FAT: utilizada para recuperar la FAT en caso de que se corrompa.
Bloque de datos.
LA FAT
Equivalente a la tabla de inodos de Unix. Contiene una entrada por cada bloque del disco, cada una
ocupa 16 bits (lista ordenada de los bloques asignados a un fichero). Utiliza además 16 bits para
direccionar cada bloque, lo que permite hasta 64K (216) bloques por partición.
Las dos primeras entradas de la FAT codifican el tipo de disco. A partir de la tercera, cada entrada se
corresponde una a una con un bloque del disco y contiene posibles valores:
Número de bloque indica cual es el siguiente bloque del fichero.
Marca de fin de fichero que es el último bloque del fichero.
Código especial indica que el bloque está libre.
Código especial: indica que el bloque es defectuoso.
El aumento en el tamaño de los discos y la necesidad de direccionar un mayor número de bloques hizo
que se utilizara un esquema similar con un aumento en el número de bits usados para direccionar un
bloque, pasando de 16 a 32. Se puede hablar de FAT16 y FAT32 en función del número de bits usados.
Los sistemas FAT32 permiten direccionar 232 bloques
ESTRUCTURA DE UN DIRECTORIO
Un directorio es un fichero que con una entrada de 32 bytes para cada fichero o subdirectorio contenido
en él. Cada entrada tiene la siguiente estructura:
Los primeros 11 bytes se reservan para el nombre del fichero y su extensión
Un byte de atributos, que con los siguientes bits:






A: bit para control de modificaciones del fichero entre copias de seguridad.
D: indica que la entrada es un directorio (con valor 1).
V: indica que la entrada se utiliza para la etiqueta del volumen (con valor 1).
S: indica que el fichero es de sistema (con valor 1).
H: indica que el fichero es oculto (con valor 1).
R: indica que el fichero es de solo lectura (con valor 1).
 10 bytes reservados para uso futuro.
 2 bytes para la hora de la última modificación del fichero
 2 bytes para la fecha de la última modificación del fichero
 2 bytes para almacenar el número del primer bloque del fichero (el resto de bloques Se
obtienen recorriendo la FAT).
 4 bytes para almacenar el tamaño del fichero.
Cada directorio MS-DOS contiene más datos además del nombre (información relativa a tamaño,
fechas…) lo que impide que exista el concepto de enlace (no simbólico) ya que podría ocurrir que un
fichero tuviera dos fechas de modificación distintas. Este problema no aparece en Unix ya que en un
directorio únicamente se almacena el nombre del fichero y el numeró de inodo, y es en el inodo donde
se guardan los atributos del fichero.
Descargar