Los sistemas de ficheros usan los ficheros como abstracción para no hacer al usuario preocuparse de como y donde se almacena físicamente la información en disco. [#!Tanebaum!#]
La característica mas importante es la abstracción, la forma de nombrar los objetos que se manejan. Cuando un proceso crea un archivo le da un nombre y cuando acaba otros procesos pueden hacer uso de él mediante ese nombre.
Las reglas de nombrado de ficheros varían de unos sistemas operativos a otros. Unos usan un numero de caracteres determinados, otros omiten en los nombres varios caracteres, otros consideran extensiones, otros no lo hacen, algunos distinguen mayúsculas y minúsculas, otros no, etc...
Las extensiones son usadas en los sistemas operativos para saber muchas veces de que tipo de archivo se trata, y con que aplicación va relacionado.
En un sistema de ficheros tenemos varios tipos de archivos, archivos regulares y los directorios. Los directorios son archivos que sirven para mantener la estructura del sistema de ficheros.
Gracias a los directorios podemos tener estructuras jerárquicas en los sistemas de ficheros.
En cuanto al contenido de los archivos se dan de dos tipos básicamente, que son tipo ASCII y el resto.
Los archivos ASCII normalmente consisten en lineas de texto. La gran ventaja de estos archivos es que pueden editarse e imprimirse tal y como están. Ademas, una gran cantidad de programas usan archivos ASCII como entradas y salidas, ya que es fácil conectar la salida de un programa a la entrada del otro.
Por otro lado los otros archivos , los que no son archivos ASCII. Si listamos estos archivos en una impresora, obtendremos un listado incomprensible. Por lo general estos archivos tienen alguna estructura interna. (cabeceras, texto, datos, bits de reubicación, tabla de símbolos).
El acceso a los archivos puede ser de varias formas, secuencial, o a una posición determinada del fichero(directo),o según la aplicación y como la misma use el archivo.
Los accesos directos son mucho mas rápidos que los secuenciales. Por eso es bueno que las aplicaciones manejen los ficheros de manera que siempre sepan a que posición del mismo deben acceder para obtener una posición determinada del fichero.
Los ficheros tienen atributos que dan información al usuario y facilitan su manejo y tratamiento. Estos atributos dependen del sistema operativo, aunque normalmente suelen ser: Protección, contraseña, creador, propietario, flag de solo lectura, flag de oculto, flag de sistema, flag de archivado, flag de ASCII, flag de acceso aleatorio, flag de temporal , flag de candado, longitud de registro, fecha de creación, fecha de ultima acceso, fecha de ultimo cambio, tamaño actual y tamaño máximo.
Dependiendo del sistema operativo del que estemos hablando, la lista de atributos anterior puede verse aumentada o disminuida según el criterio de necesidad de los mismo que se siga.
Una parte muy importante de los sistemas de ficheros es la cantidad de operaciones que permiten y la comodidad de las mismas para el usuario que lo maneje.
Las operaciones que ofrece el sistema de ficheros suelen ser: Create, Delete, Open, Close, Read, Write, Append, Seek, Get Attributes, Set Attributes y Rename .
Create. El archivo se crea sin datos. El propósito de la llamada es anunciar que va a haber un archivo y establecer algunos de los atributos.
Delete. Cuando el archivo ya no se necesita, es preciso eliminarlo para desocupar el espacio en disco. Siempre hay una llamada al sistema para este fin.
Open. Antes de usar un archivo , un proceso debe abrirlo. El propósito de la llamada Open es permitir al sistema que obtenga los atributos y la lista de direcciones de disco y los coloque en la memoria principal a fin de agilizar el acceso en llamadas posteriores.
Close. Una vez concluidos todos los accesos, los atributos y las direcciones de disco ya no son necesarios, por lo que se debe cerrar el archivo para liberar el espacio correspondiente en las tablas internas. Muchos sistemas fomentan esto limitando a los procesos a un número máximo de archivos abiertos. Las escrituras en disco son por bloque, y el cierre de un archivo obliga a escribir el ultimo bloque del archivo, aunque todavía no esté totalmente lleno.
Read. Se leen datos del archivo. Por lo regular, los bytes provienen de la posición actual. El invocador debe especificar cuántos datos se necesitan y también debe suministrar un buffer para colocarlos.
Write. Se escriben datos en el archivo, también, por lo general, en la posición actual. Si dicha posición es actual está al final del archivo, el tamaño del archivo aumenta. Si la posición actual esta a la mitad del archivo, se sobreescriben en los datos existentes.
Append. Esta llamada es una forma restringida de Write que solo puede agregar datos al final del archivo. Los sistemas que ofrecen un juego mínimo de llamadas al sistema generalmente no cuentan con Append.
Seek. En el caso de archivos de acceso aleatorio, se requiere de un método para especificar de donde extraer los datos. Un enfoque común es tener una llamada al sistema , Seek, que ajuste el apuntador a la posición actual haciéndole que apunte a un lugar especifico del archivo. Una vez efectuada esta llamada, se pueden leer datos de esa posición o escribirlos en ella.
Get Attributes. Es frecuente que los procesos necesiten leer los atributos de un archivo para realizar su trabajo. Para eso existe esta llamada que se encarga de leerlos y devolvérselos al proceso que los haya solicitado.
Set Attributes. Algunos de los archivos pueden ser establecidos por el usuario y modificarse después de que se creo el archivo. Esta llamada al sistema lo hace posible. Por ejemplo se usa para modificar los flags del fichero.
Rename. Es común que un usuario necesite cambiar el nombre de un archivo existente. Esta llamada permite hacerlo, aunque no siempre es indispensable, ya que el archivo por lo regular puede copiarse en un archivo nuevo con el nombre, eliminando después el viejo.
En cuanto a los sistemas de ficheros jerárquicos, los directorios tienen un papel importantísimo.
Un directorio contiene varias entradas, una por archivo que contiene. Cada una de esas entradas contiene información relativa al fichero. Por ejemplo el nombre y sus atributos.
Cuando se abre un archivo, el sistema operativo examina su directorio hasta encontrar el nombre del archivo por abrir, y luego extrae los atributos y las direcciones en disco.
El tener una jerarquía permite por ejemplo que varios usuarios puedan tener archivos con el mismo nombre ya que cada uno los tendrá en su directorio correspondiente.
Al aparecer en el sistema de ficheros los directorios, tenemos dos nuevos conceptos. El de ruta relativa y el de ruta absoluta. La ruta absoluta consiste en la ruta desde el directorio raíz hasta el archivo. Por ejemplo /bin/rc/termrc. La ruta relativa, por otro lado, se considera cuando el nombre de ruta no empieza por raíz, en cuyo caso se toma a partir del directorio actual en el que estemos. Por ejemplo, si estamos en /bin , la ruta al fichero del ejemplo anterior seria rc/termrc.
Al igual que con los archivos normales, con los ficheros también se pueden realizar distintas operaciones.
Las mas comunes son: Create, Delete, Opendir, Closedir, Readdir, Rename, Link, Unlink.
Create. Se crea un directorio, que este vacío con la excepción de punto y punto punto, que el sistema coloca automáticamente.
Delete. Se elimina un directorio. Solo puede eliminarse un directorio vacío. Un directorio que solo contiene punto y punto punto se considera vacío, ya que estos normalmente no pueden eliminarse.
Opendir. Los directorios pueden leerse. Por ejemplo, para listar todos los archivos de un directorio, un programa para emitir listados abre el directorio y lee los nombres de los archivos que contiene. Antes de poder leer un directorio, es preciso abrirlo, de forma análoga a como se abren y leen los archivos.
Closedir. Una vez que se ha leído un directorio, debe cerrarse para liberar espacio de tablas internas.
Readdir. Esta llamada devuelve la siguiente entrada de un directorio abierto. Antes, era posible leer directorios empleando la llamada al sistema Read normal, pero ese enfoque tiene la desventaja de obligar al programador a conocer y manejar la estructura interna de los directorios. En contraste, Readdir siempre devuelve una entrada en un formato estándar, sin importar cual de las posibles estructuras de directorios se esté usando.
Rename. En muchos sentidos, los directorios son iguales que los archivos y podemos cambiar su nombre tal como hacemos con los archivos.
Link. El enlace es una técnica que permite a un archivo aparecer en más de un directorio. Esta llamada al sistema especifica un archivo existente y un nombre de ruta, y crea un enlace del archivo existente al nombre especificado por la ruta. De este modo, el mismo archivo puede aparecer en múltiples directorios.
Unlink. Se elimina una entrada de directorio. Si el archivo que esta siendo desvinculado solo esta presente en un directorio , se eliminara del sistema de archivos. Si el archivo esta presente en varios directorios, solo se eliminará el nombre de ruta especificado; los demás seguirán existiendo.
Lo mismo que con las operaciones con ficheros, dependiendo del sistema operativo en el que estemos trabajando, podemos encontrarnos con mas o con menos llamadas.