Sistemas Operativos
Unidad V:
Sistema de archivos
Introducción
T odos los sistemas de cómputo necesitan almacenar y recuperar
informacion. Mientras un proceso se ejecuta, puede almacenar una
cantidad de información limitada dentro de su propio espacio de
direcciones.
La capacidad de almacenamiento está limitada al tamaño de
direcciones virtual.
En el caso de algunas aplicaciones, este tamaño es adecuado, pero
en el de otras resulta escesivamente pequeño
Introducción I
Un segundo problema de
mantener la información dentro
del espacio de direcciones de un
proceso es que cuando el
proceso termina la información
se volatina.
El tercer problema es que en
muchos casos es necesario que
múltiples procesos accedan a la
información al mismo tiempo.
La información debe ser
independiente a cualquier
proceso.
Introducción II
Existen tres requisitos esenciales para el almacenamiento de
información a largo plazo:
1 Debe ser posible almacenar una gran cantidad de información.
2 La información debe sobrevivir a la terminación del proceso
que la usa.
3 Múltiples procesos deben poder acceder a la información de
forma concurrente.
La solución ideal a todos esos requisitos es almacenar la información
en discos y otros medios externos en unidades llamadas archivos.
Así, los procesos pueden leerlos y escribir archivos nuevos si es
necesario.
Introducción III
La información almacenada en archivos debe ser persistente, es
decir no ser afectada por la creación y terminación de procesos.
Los archivos son administrados por el sistema operativo. La forma
en como se estructuran, nombran, accedan, usan, protegen e
implementan son temas importantes en el sistema de archivos.
Globalmente, la parte del sistema operativo que se ocupa de los
archivos se denomina sistema de archivos.
Nombre de archivos
Los archivos son un mecanismo de abstracción; proporcionan
una forma de almacenar información en el disco y leerla
después.
Las reglas para nombrar archivos varían de un sistema
operativo a otro, pero todos los sistemas operativos permiten
cadenas de uno a ocho caracteres como nombres de archivo
válidos.
Algunos sistemas de archivos distinguen entre minúsculas y
mayúsculas, mientras que otros no.
Algunos sistemas de archovos reconocen nombres de archivos
de dos partes, los cuales se separan con un punto. La parte
que sigue al punto se denomida extensión de archivo y, por
lo regular indica algo acerca del archivo. En UNIX un archivo
puede terner 2 o mas extensiones.
Estructura de archivos
Los archivos pueden estructurarse de varias maneras.
a)
Una secuencia no estructurada de bytes: el sistema
operativo no sabe que contiene el archivo; lo único que ve son
bytes. Cualquier significado que tenga deberán ponerlo los
programas en el nivel de usuario. Este enfoque ofrece el
máximo de flexibilidad ya que los programas de usuario pueden
poner cualquier cosa que deseen en los archivos y darles
cualquier nombre que crean conveniente.
b)
Secuencia de bytes: en este modelo un archivo es una
secuencia de registros de longitud fija cada uno con cierta
estructura interna. La idea de que un archivo es una secuencia
de registros se apoya en el concepto de que la operación de
lectura devuelve un registro y que la operación de escritura
sobreescribe o anexa un registro.
c)
Árbol: En ésta organización, un archivo consiste en un árbol
Unidad 4: S i std ea rdregistros,
ee garicshtivroos s, no
no necesariame
10n
/t e todos
de la dmisma
Me. elnaC m
. Hiesrm
m ea
s F lro
a nn
cig
s ciotu
Mdon,tes Casiano
44
em
de necesariamente longitud
Tipos de archivos
MS-DOS tiene dos tipos de archivos, archivos normales y
directorios. Por otro lado, UNIX tambien tiene dos tipos de
archivos, por caracter y por bloque.
Los archivos regulares son los que contienen información del
usuario.
Los directorios son archivos de sistema que sirven para
mantener la estructira del sistema de archivos.
Los archivos especiales por caracteres están relacionados con
E /S y sirven para modelar dispositivos de E /S en serie como
terminales, impresoras y redes.
Los archivos especiales por bloque sirven para modelar discos.
Archivos ASCII
Los archivos ASCII consisten en lineas de texto.
En algunos sistemas cada línea de texto termina con un
retorno de carro o el salto de línea. Las líneas no tienen que
ser de la misma longitud.
La ventaja de los archivos ASCII es que pueden visualizarse o
imprimirse tal cual se encuentran almacenados y se pueden
editar con editor de textos normal.
Si una gran cantidad de programas utilizan archivos ASCII
como entradas y salidas, es fácil conectar la salida de un
programa con la entrada de otro.
Archivos binarios
Si se visualizara o imprimiera un archivo binario, el resultado
sería incomprensible.
Por lo regular éstos archivos tienen una estructura interna.
En la primera version de UNIX un archivo binario tenia la
siguiente estructura: encabezado, datos, bits de reubicación y
tabla de símbolos.
El encabezado comienza con lo que se conoce como un
número mágico, que identifica al archivo como ejecutable.
Después siguen enteros de 16 bits que indican los tamaños de
los distintos componentes del archivo, la dirección en la que se
inicia la ejecución y algunos bits de bandera.
Después del encabezado vienen el texto y datos del programa
mismo.
Acceso a archivos
Los primeros sistemas operativos solo ofrecían un tipo de acceso a
los archivos: acceso secuencial. En estos sistemas, un proceso podía
leer todos los bytes o registros de un archivo en orden, comenzando
por el principio, pero no podía saltar de un lado a otro o leerlos en
desorden.
Cuando comenzaron a usarse los discos para almacenar archivos, se
hizo posible leer los bytes o registros de un archivo en desorden, o
acceder a los registros por la llave, no por posición.
Los archivos cuyos bytes se oueden leer en cualquier orden se
denominan archivos de acceso aleatorio.
Acceso a archivos I
Los archivos de acceso directo son esenciales para muchas
aplicaciones, por ejemplo, los sistemas de base de datos.
Se emplean dos métodos para especificar el punto donde debe
iniciarse la lectura. En el primero, cada operación READ indica la
posición dentro del archivo en que se debe comenzar a leer. En el
segundo, se cuenta con una operación especial, SEEK, para
establecer la posición actual.
Después de un SEEK, el archivo se puede leer secuencialmente a
partir de la posicion que ahora es la actual.
Características de un sistema de archivos
Un sistema de archivos es un mecanismo de abstracción de los
dispositivos físicos de almacenamiento que nos permite manejarlos
a nivel lógico sin la necesidad de conocer su arquitectura hardware
particular. El sistema de archivos de unix se caracteriza por:
Poseer una estructura jerárquica
Realizar un tratamiento consistente de los datos de los ficheros
Poder crear y borrar ficheros
Permitir un crecimiento dinámico de los archivos.
Proteger los datos de los archivos
T ratar los dispositivos periféricos
Características de un sistema de archivos I
Un sistema de archivos está estructurado, a nivel lógico, en forma
de árbol invertido, con un nodo principal conocido como raíz. Cada
nodo dentro del árbol representa un directorio y puede contener a
su vez otros nodos (subcarpetas, archivos normales o archivos de
dispositivos).
Los nombres de los archivos se especifican mediante la ruta (path
name), que describe como localizar un archivo dentro de jerarquía
del sistema.
La ruta de un archivo puede ser absoluta, es decir, referida al nodo
raíz o relativa, referida al directorio de trabajo actual (CWD
Current Work Directory).
Acceso a los archivos
Los programas que se ejecutan en UNIX no conocen el formato
interno con el que el núcleo almacena los datos.
Cuando accedemos al contenido de un fichero, el sistema lo presenta
como una secuencia de bytes sin formato. Las aplicaciones son las
encargadas de interpretar la secuencia de bytes y darle significado
según sus necesidades.
Estructura del sistema de archivos
Los sistemas de archivos suelen estar situados en dispositivos
de almacenamiento modo bloque, tales como cintas o discos.
Las cintas tienen un tiempo de acceso mucho más alto que los
discos, por lo cual no son una alternativa viable para la
instalación de un sistema de archivo en estas, pero si para
respaldos.
Lo normal es que un sistema UNIX se arranque desde cinta o
CDROM cuando queremos instalarlo por primera vez sobre un
disco.
Discos
Un sistema de archivos puede manejar uno o varios discos físicos,
cada uno de los cuales puede contener uno o varios sistemas de
archivos. Los sistemas de archivos se pueden considerar como
particiones lógicas del disco.
Estructura del sistema de archivos I
Hacer que un disco físico contenga varios sistemas de ficheros
permite una administración más segura.
El núcleo del sistema trabaja con el sistema de archivos a nivel
lógico y no directamente con los discos a nivel físico.
Cada disco es considerado como un dispositivo lógico que tiene
asociados unos números de dispositvos (minos number y major
number). Estos números se utilizan para indexar , dentro de
una tabla de funciones, la que se tiene que utilizar para acceder
al manejar de disco.
El manejador de disco es el encargado de tranformar las
direcciones lógicas del sistema a direcciones físicas del disco.
Un sistema de archivos se compone de una secuencia de
bloques lógicos, cuando uno de los cuales tiene un tamaño fijo.
El tamaño de cada bloque es el mismo para todo el sistema de
archivos y sele ser un multipo de 512 bytes.
Estructura del sistema de archivos II
A pesar de que el tamaño de un bloque es homogéneo en un
sistema de ficheros, puede variar de un sistema a otro dentro la
misma configiración UNIX con varios sistemas de archivos.
Interesa que los bloques de memoria sean grandes para que la
velocidad de transferencia entre el disco y la memoria sea grande.
Sin embargo, si los bloques son demasiado grandes, la capacidad
del disco puede verse desaprovechada cuando abundan archivos
pequeños que no llenan un bloque completo.
Estructura del sistema de archivos II
La estructura del sistema de ficheros en UNIX V:
bloque del boot superbloque lista de nodos-i bloques de datos
Estructura del sistema de archivos II
1 Bloque de arranque: Ocupa la parte inicial del sistema de
archivos, típicamente el primer sector, y puede contener el
código de arranque.
Código de arranque
Es un pequeño programa que busca al sistema operativo y cargarlo
en memoria para iniciarlo.
2 Superbloque: describe el estado de un sistema de archivos,
además contiene información acerca de su tamaño, el número
de archivos que puede almacenar, el espacio libre, etc.
Estructura del sistema de archivos II
3 Lista de nodos índice: se encuentra a continuación del
superbloque. Esta lista contiene una entrada por cada archivo,
donde se guarda una descripción del mismo (situacion del
archivo en el disco, propietario, permisos de acceso, fecha de
actualización, etc.)
4
Bloques de datos: empieza a continuación de la lista de
nodos-i y ocupan el resto del sistema de archivos. En esta zona
es donde se encuentra situado el contenido de los archivos a los
que hace referencia la lista de nodos-i.
Asignación de bloques
Cada uno de los bloques destinados a datos sólo puede ser asignado
a un archivo, lo ocupe totalmente o no.
El superbloque
Describe el estado actual del sistema de archivos
Contiene almenos la siguiente información
Tamaño del sistema de archivos Lista
de bloques libres disponibles
Índice del siguiente bloque libre en la lista de bloques libres
Tamaño de la lista de nodos-i.
Total de nodos-i libres Lista
de nodos-i libres
Índice del siguiente nodo-i libre en la lista de nodos-i libres
Indicador que informa si el superbloque ha sido modificado o no
El Superbloque I
Cada vez que, desde un proceso, se accede a un fichero, es
necesario consultar el superbloque y la lista de nodos-i.
Performance
Como el acceso al disco degrada bastante el rendimiento de un
programa, lo normal es que el núcleo realice las acciones de E /S
con el disco a través de un buffer caché y que el sistema tenga en
memoria una copia del superbloque y de la lista de nodos-i.
El programa shutdown
No se debe apagar el sistema sin una previa llamada a shutdown, ya
que el sistema de archivos podría quedar seriamente dañado.
Nodos índice (inodes)
Cada archivo en UNIX tiene
asociado un nodo-i. El nodo-i
contiene la información necesaria
para que un proceso pueda acceder
al fichero.
La lista de nodos-i se encuentra
situada en los bloques que hay a
continuación del superbloque.
Durante el proceso de arranque del
sistema, el núcleo lee la lista de
nodos-i del disco y carga una copia
en memoria, conocida como tabla
de nodos-i.
Nodos índice (inodes)
Existe un demonio del sistema,
syncer, que se encarga de
actualizar periódicamente el
contenido de la lista de nodos-i
con la tabla de nodos-i.
Nodos índice (inodes)
Los campos que componen un nodo-i son los siguientes:
Identificador del propietario del archivo
Tip o de archivo
Tip o de acceso al archivo
Tiempo de acceso a los archivos
Número de enlaces del fichero
Entradas para los bloques de dirección
T amaño del archivo
Nombre del archivo
Es importante mencionar que el nombre del fichero no queda
especificado en su nodo-i. Es en los archivos de tipo directorio
donde a cada nombre de fichero se le asocia su nodo-i
correspondiente.
Nodos índice (inodes) I
Existe una gran diferencia entre escribir el contenido de un
nodo-i en disco y escribir el contenido de un archivo.
El contenido del archivo - sus datos - cambia solo una vez
cuando se escribe en él. El contenido de un nodo-i cambia
cuando se modifican los datos del fichero o la situación
administrativa del mismo (propietario, permisos, enlaces, etc.).
La tabla de nodos-i contiene la misma información que la lista
de nodos-i, junto con la siguiente información:
Estado del nodo-i.
El número de dispositivo lógico del sistema.
El número del nodo-i.
Punteros a otros nodos-i cargados en memoria.
Un contador de nodos-i que indica el número de copias que
están activas.
Estructura de un fichero ordinario
Los bloques de datos están situados a partir de la lista de
nodos-i.
Si los datos de un archivo se almacenan en bloques
consecutivos, para poder acceder a ellos nos bastaría con
conocer la dirección del bloque inicial y el tamaño del archivo.
Esta política de gestión del disco produce a la larga un
desaprovechamiento del disco, ya que tenderá a proliferar áreas
libres demasiado pequeñas para poder ser usadas.
—– archivo A archivo B archivo C ——
—– archivo A (libre) archivo B archivo C ——
Estructura de un fichero ordinario
El núcleo puede minimizar la fragmentación del disco ejecutando
periódicamente procesos para compactarlo, pero esto produce una
degradación de las prestaciones del sistema en cuando a velocidad.
Para una mayor flexibilidad, el núcleo reserva los bloques para un
archivo de uno de uno en uno, y permite que los datos de un
archivo estén esparcidos por todo el sistema de archivos. Este
esquema de reserva complica la tarea de localizar los datos.
Las entradas de direcciones del nodo-i consisten en una lista de
direcciones de los bloques que contienen los datos del archivo.
Para conseguir que el tamaño de un nodo-i sea pequeño y a la vez
podamos manejar ficheros grandes, las entradas de direcciones de
un nodo-i se ajustan al esquema que muestra la figura.
Estructura de un fichero ordinario
Estructura de un fichero ordinario
En UNIX System V, los nodos-i tienen una tabla de 13
entradas.
Las 10 primeras entradas marcadas como directas contienen
direcciones de bloques en los que hay datos del archivo.
La entrada marcada como indirecta simple direcciona un
bloque de datos que contiene una tabla de direcciones de
bloques de datos.
Acceso a bloques
Para acceder a los datos a través de una entrada indirecta, el
núcleo debe leer el bloque cuya dirección nos indica la entrada
indirecta y buscar en él la dirección del bloque donde realmente
está el dato, para acontinuación leer ese bloque y acceder al dato.
La entrada marcada como indirecta doble contiene la dirección
de un bloque cuyas entrada3s0/a44ctúan como entradas indirectas
simples.
como
Estructura de un fichero ordinario
Éste método puede extenderse para soportar entradas
indirectas cuadruples, quíntuples, etc., pero en la práctica
tenemos más que suficientes con una dirección triple.
Estructura de un fichero ordinario
Ejemplo: Considerando bloques de 1 Kbyte y el bloque se
direcciona con 32 bits
Con 32 bits para dirección se tiene
232 = 4 Gdirecciones posibles
Un bloque de datos puede almacenar 256 direcciones de
bloques de datos y un archivo podría llegar a tener un tamaño
del orden de 16 Gbytes.
Estructura de un fichero ordinario
Los procesos acceden a los datos de un archivo indicando la
posición, con respecto al inicio del archivo, del byte que se
quiere leer o escribir.
Introducción
En los sistemas UNIX hay cuatro tipos de archivos:
ordinarios,
directorios,
archivos de dispositivos y
tuberías
Archivos ordinarios
Los archivos ordinarios contienen bytes de datos organizados
como un array lineal.
Las operaciones que se pueden hacer con los datos de un
archivo son:
Leer o escribir cualquier byte del archivo.
Añadir bites al final del archivo, con lo que aumenta su
tamaño.
Truncar el tamaño del archivo a cero bytes (es como si se
borrara el contenido del archivo).
Operaciones no permitidas
1
Insertar bytes en un archivo, excepto al final: no se debe confundir
con la inserción de bytes con la modificación de los que ya existen
(proceso de escritura).
2
Borrar bytes de un archivo: no se debe confundir el borrado de bytes
con la puesta a cero de los que ya existen
3
Truncar el contenido de un archivo a un valor distinto de cero.
Archivos ordinarios I
Dos o más procesos pueden leer y escribir concurrentemente
sobre un mismo archivo.
Los resultados de dicha operación dependen del orden de las
llamadas de entrada/salida individuales de cada proceso y de
la gestión que el planificador haga de los procesos y en general
son impredecibles.
Los archivos ordinarios, como tales, no tienen nombre y el
acceso a ellos se realiza a través de los nodos-i.
Directorios (UNIX V)
Los directorios son los archivos que permiten darle una
estructura jerárquica a los sistemas de archivos de UNIX.
Su función fundamental consiste en establecer la relación que
existe entre el nombre de un archivo y su nodo-i
correspondiente.
Un directorio es un archivo cuyos datos están organizados
como una secuencia de entradas, cada una de las cuales
contiene un número de nodo-i y el nombre de un archivo que
pertene a un directorio.
Al par [nodo − i ] ↔ [nombre defichero] se le conoce como enlace y
puede haber varios nombres de archivo, distribuidos por la jerarquía
de directorios, que esté enlazados con un mismo nodo-i.
Directorios (UNIX V)
El tamaño de cada entrada del directorio es de 16 bytes; dos
dedicados al nodo-i y 14 al nombre del archivo.
Las dos primeras entradas de un directorio reciben los nombres
’.’ y ’..’.
El archivo ’.’ tiene asociado el nodo-i correspondiente al
directorio actual y al fichero ’..’ se le asocia el nodo-i del
directorio padre del actual.
En el directorio / mediante el programa mkfs se logra que el
archivo ’..’ apunte al propio directorio raíz.
Directorios (UNIX V) I
El núcleo maneja los datos de un directorio con los mismos
procedimientos empleados para acceder a los datos de archivos
ordinarios.
Los procesos pueden leer el contenido de un directorio como si
se tratase de un archivo de datos, sin embargo no pueden
modificarlos.
El derecho de escritura en un directorio está reservado al
núcleo.
Los permisos de acceso a un directorio tienen los siguientes
significados:
Lectura, permite que un proceso lea ese directorio.
Escritura, permite a un proceso crear una nueva entrada en el
directorio o borrar alguna ya existente (create, mknod, link o
unlink).
Ejecución, autoriza a un proceso para buscar el nombre de una
archivo dentro del directorio.
Directorios (Sistema BSD)
Su fución principal es la de establecer los enlaces entre los
nombres de los archivos y los nodos-i.
La diferencia entre los directorios de UNIX V y B S D es que en
ésta los nombres de los archivos pueden ser más largos, 255
caracteres.
Los directorios se encuentran situados en unidades conocidas
como bloques de directorio - chuncks.
El tamaño de un bloque de directorio se elige de tal forma que
pueda ser transferido en una sola operación con el disco. Esto
permite actualizar los directorios en accesos atómicos.
Directorios (Sistema BSD) I
Bloques de directorio
Cada bloque de directorio se compone de entradas de directorio de
tamaño variable. No se permite que una entrada esté distribuida en
más de un bloque.
Los tres primeros campos de una entrada de directorio son de
tamaño fijo y contienen:
1 El tamaño de la entrada
2 La longitud del nombre del archivo al que se refiere la entrada
3 El número del nodo-i asociado al archivo.
El resto de la entrada es un campo de longitud variable que contiene
una cadena de caracteres que termina con el carácter nulo.
Acceso al contenido de un directorio
Para leer de un directorio se pueden utilizar las mismas
llamadas que se emplean para los archivos ordinarios: open,
read, lseek, close, etc.
B S D ofrece: opendir, readdir, rewindir, closedir, seekdir y
telldir. Estas no forman parte de las llamadas al sistema, sino
de la biblioteca estándar de E/S:
Conversión de ruta de acceso a nodo-i
La llamadas como open, chdir o link reciben como parámetro
de entrada la ruta de acceso de un archivo y no su nodo-i.
El núcleo es el que se encarga de traducir la ruta de acceso de
un fichero a su nodo-i correspondiente.
El algoritmo de transformación (namei) se encarga de analizar
los componentes de la ruta de acceso y de leer los nodos-i
intermedios necesarios para verificar que se trata de una ruta
correcta y que el archivo realmente existe.
Búsqueda de archivos
Si la ruta es absoluta, la búsqueda del nodo-i del archivo se iniciará
en el directorio raíz.
Si la ruta es relativa, la búsqueda se iniciará en el directorio de
trabajo actual que tiene el proceso que quiere acceder al archivo.
Conversión de ruta de acceso a nodo-i
A medida que se van recorriendo los nodos-i intermedios, se
verifican los permisos para comprobar si el proceso tiene
derechos de acceso a los directorios intermedios.
Preguntas.......