Introducción en la administración de archivos

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar

Se trata de la parte del sistema operativo que se encarga de la organización de los ficheros en el sistema operativo. También se le conoce como 'sistema de ficheros'.

Estructura lógica del sistema de ficheros

Fichero

Un fichero es un contenedor de información que consta como mínimo de un nombre, además de una serie de atributos (llamados metadatos) como la fecha de creación, última actualización, propietario, grupo entre otros; y un número de bloques asignados.

Directorio (Carpeta)

Un directorio o carpeta es un contenedor de ficheros. Por lo general, disponen a su vez de dos pseudodirectorios denominados "." y ".." que sirven como referencia al propio directorio y al directorio padre. De esta manera, los directorios se organizan en una estructura arbórea con una cierta raíz.

Árbol directorios

La organización de los directorios y ficheros en los sistemas operativos modernos emplea una estructura arbórea en la que existe un directorio raíz del que penden todos los demás directorios y ficheros.

                                        raíz
                                         /\
                                        /  \
                                       d1  d2
                                      / \    \
                                     f1  f2   d3
                                              /\
                                             /  \
                                            f3  f4

En el caso de sistemas operativos tipo Unix, la raíz se identifica con el directorio /. Para sistemas operativos de tipo-Microsoft, existe un directorio raíz por unidad. Cada unidad se trata de un sistema de fichero independiente que se identifica mediante una letra seguida de dos puntos, por ejemplo C:\ .

Propietario, grupo y permisos

Todo fichero o directorio en un sistema operativo moderno dispone de al menos un propietario que define las acciones que se pueden realizar sobre los ficheros. Por lo general son las siguientes:

  • Lectura: Da la posibilidad de leer el contenido del fichero.
  • Modificación: Da la posibilidad de modificar el contenido del fichero.
  • Ejecución: Da la posibilidad de ejecutar el fichero.

En general, este esquema se aplica al propietario, al grupo y al resto del mundo, de manera que el propietario de cualquier fichero o directorio establece los permisos. Por ejemplo, un fichero con un documento ofimático puede ser leído y modificado por el propietario y por el grupo, pero no por el resto del mundo.

Ejemplo:

 propietario     grupo    resto del mundo
     rwx          rwx          rwx 
 fichero.odt: rw------- (fichero openoffice con sólo lectura y escritura para el propietario)
 sudoku:      rwxr-xr-x (fichero ejecutable con permisos de lectura, modificación y ejecución para el propietario)

El propietario, el grupo y los permisos asociados son metainformación que se almacena en el sistema de ficheros.

Directorio de trabajo actual

Todo sistema de fichero dispone de un cursor que indica cuál es el directorio de trabajo actual. Este directorio de trabajo actual puede alterarse a través de la llamada al sistema 'sys_chdir'.

Ruta absoluta

Las rutas absolutas, o completas, señalan la ubicación de un archivo o directorio desde el directorio raíz del sistema de archivos. Por ejemplo, es una ruta absoluta /home/dir/ff.txt, que señala la ubicación del archivo ff.txt desde la raíz del sistema de archivos.

Ruta relativa

Las rutas relativas señalan la ubicación de un archivo o directorio a partir del directorio de trabajo actual.

Por ejemplo, es una ruta relativa dir/ff.txt que señala al ff.txt dentro del directorio dir en la ubicación actual. En sistemas tipo UNIX, la ruta ~/ es una ruta relativa que lleva al directorio personal del usuario que ha insertado la ruta relativa; por ejemplo, si el usuario Fulano tiene una imagen en su directorio personal, esta imagen podría tener dos rutas de acceso, una relativa y una absoluta: -La absoluta: /home/fulano/imagen.jpg -La relativa: ~/imagen.jpg

Las rutas relativas utilizan dos símbolos especiales, un punto (.) y dos puntos seguidos (..), lo que significa el directorio actual y el directorio padre. Los dos puntos seguidos se utilizan para subir en la jerarquía. Un único punto representa el directorio actual.

Gestión del sistema de ficheros

Un sistema de fichero se trata de la estructura lógica (mediante un tipo abstracto de datos como una tabla, una lista o un árbol) y el conjunto de mecanismos que se emplean para gestionar los bloques asignados a ficheros y los bloques libres.

Bloque

La memoria disponible en un dispositivo de almacenamiento masivo se divide en porciones de igual tamaño denominados bloques. Dichos bloques se asignan completamente y en exclusividad a un fichero de manera que un fichero está compuesto por un conjunto de bloques.

El tamaño de bloque es un parámetro que se establece en el tiempo de formateo. Por lo general, se emplean bloques de 4 KB y 8 KB dependiendo del tamaño de palabra del procesador. No obstante, es un parámetro configurable. En el caso de un sistema que tenga que alojar gran cantidad de ficheros muy pequeños, podría reducirse el tamaño de bloque para hacer un mejor aprovechamiento del espacio de almacenamiento en disco.

  • Aspectos relevantes en la elección del tamaño de los bloques:

Podemos destacar los siguientes 4 aspectos:

Desperdicio interno: Cuanto mayor sean los bloques mayor desperdicio interno se producirá en el último bloque del fichero.

Tiempos de espera: Cuanto mayor sea el bloque menos bloques formarán los ficheros con lo que se reduce el numero de accesos al soporte y, en consecuencia, los tiempos de espera.

Espacio intermedio: Cuanto mayor sean los bloques mayor será el espacio necesario para mantenerlos cargados en memoria mientras se opera con ellos.

Aprovechamiento de las operaciones de lectura y escritura: Si el proceso no realiza accesos a memoria secuenciales, sino que son aleatorios, es muy probable que solo necesite unos pocos octetos de cada bloque del fichero. Sin embargo en cada lectura y escritura los bloques se leen o escriben completamente, lo que significa un desaprovechamiento de las operaciones de lectura y escritura.

Tabla de entrada de ficheros

Todo directorio dispone de una tabla de entrada de ficheros. Por cada entrada existe al menos una referencia al primer bloque que forma parte de dicho fichero, así como otros atributos como el propietario del fichero, la fecha de último acceso, modificación, etc.


Directorios2.png


Cada tabla de entrada de ficheros ocupa como mínimo un bloque. Por cada entrada se almacena la siguiente información:

  • Nombre del fichero o directorio (tamaño variable)
  • Fecha de creación y último acceso (entero sin signo de 64-bits)
  • Propietario (entero sin signo de 32-bits para el identificador de usuario)
  • Grupo (entero sin signo de 32-bits para el identificador de grupo)
  • Permisos (entero sin signo de 16 bits que codifican los permisos).

De esta manera, cada entrada ocupa un número de bytes. Suponiendo que toda entrada requiera 64 bytes, si se emplea un tamaño de bloque de 4 KB, con un bloque se podrían mantener hasta 64 entradas. En caso de que un directorio tuviera más entradas, serían necesarios más bloques para la tabla de entrada de ficheros.


Llamadas a sistema para manejo de archivos

El UNIX proporciona un conjunto de llamadas al sistema para la manipulación de archivos. Todas las aplicaciones o utilidades que en UNIX trabajan con archivos están fundamentadas en estos servicios básicos. La biblioteca estándar de C dispone de un conjunto de funciones para utilizar directamente estas llamadas al sistema, proporcionando al programador la misma visión que sobre los recursos tiene el sistema operativo UNIX. Dentro del kernel de Linux, este descriptor es manejado por un entero (del tipo C int) llamado el descriptor del archivo, abreviado fd. Una gran parte de la programación del sistema Linux consiste en abrir, manipular, cerrar y usar descriptores de archivos.


Llamada a sistema Número Descripción
sys_close 3 cerrar un descriptor de archivo
sys_creat 85 abrir archivo, y si no existe, crealo
sys_open 2 abrir un archivo
sys_rename 82 renombrar un archivo
sys_truncate 76 truncar un archivo a una longitud especificada
sys_link 86 crear un enlace simbolico o duro a un archivo
sys_unlink 87 eliminar un archivo
sys_chdir 80 cambiar directorio de trabajo actual (Cambia el Current Working Directory)
sys_chroot 161 cambiar el directorio raíz (Sólo para el administrador)
sys_mkdir 83 crea un directorio
sys_rmdir 84 elimina un directorio (sólo si está vacío el directorio)
sys_stat 4 obtener metadatos de archivo
sys_chmod 90 cambiar los permisos de un archivo
sys_chown 92 cambiar el propietario y grupo de un archivo
sys_utime 132 Cambiar tiempos de último acceso y de modificación de un archivo
sys_getcwd Obtiene el directorio de trabajo actual (Current Working Directory)

12.2 FAT

Material suplementario

Sistemas de ficheros por Daniel García Archivo:Sistemas-de-ficheros-fat-ext2-ext3-y-ext4.pdf.