8  Sistema de Archivos

Todo el trabajo que realiza una computadora termina, tarde o temprano, en datos que deben guardarse de forma permanente: un documento que seguirá existiendo cuando apaguemos el equipo, una foto que podremos abrir mañana, un programa que se instaló hace meses. La memoria principal (RAM) es volátil y limitada; el almacenamiento secundario (disco rígido, SSD, memoria USB) es persistente pero, en bruto, no es más que una enorme sucesión de bloques numerados. El sistema de archivos es la capa del sistema operativo que convierte ese almacenamiento crudo en algo que personas y aplicaciones pueden usar: archivos con nombre, organizados, protegidos y fáciles de localizar.

En esta unidad estudiamos esa abstracción desde dos miradas complementarias: primero qué es un archivo para el usuario y las aplicaciones, sin preocuparnos por su almacenamiento interno; y luego cómo lo implementa el sistema operativo por debajo. Esta sesión cubre los fundamentos: la noción de archivo, sus metadatos, las operaciones y métodos de acceso, el concepto de sistema de archivos y sus componentes, y los tipos de archivos junto con los enlaces.


8.1 Objetivos de Aprendizaje

  • Definir qué es un archivo como abstracción del sistema operativo y reconocer sus atributos o metadatos.
  • Comprender la estructura lógica de un archivo como secuencia de bytes y el rol del SO como gestor —no intérprete— de su contenido.
  • Identificar las operaciones básicas sobre archivos y distinguir el acceso secuencial del directo.
  • Explicar qué es un sistema de archivos y describir sus tres componentes fundamentales: bloques de datos, inodos y estructura de directorios.
  • Seguir el flujo de resolución de un nombre de archivo hasta sus datos en disco.
  • Diferenciar los tipos de archivos y comprender la diferencia entre enlaces duros y enlaces simbólicos.

8.2 ¿Qué es un Archivo?

Note

Definición fundamental. Un archivo es una colección de información relacionada, identificada por un nombre, que el sistema operativo trata como una unidad lógica de almacenamiento. Para el usuario es una entidad coherente —un documento, una foto, una canción—; el SO crea esta abstracción simple y poderosa para ocultar la complejidad del hardware de almacenamiento.

La clave está en la palabra abstracción. Por debajo, un disco solo entiende de bloques físicos numerados; el usuario, en cambio, piensa en términos de “mi tesis”, “la canción que descargué” o “el informe del mes”. El archivo es el puente entre ambos mundos: un nombre y un contenido que se comportan como una unidad, sin que nadie necesite saber en qué bloques del disco residen realmente.

8.2.1 Atributos del archivo: su “tarjeta de identificación”

Además de su contenido, todo archivo lleva asociado un conjunto de metadatos (datos sobre el archivo) que lo describen. Los más importantes son:

Atributo Qué guarda
Nombre El identificador legible por humanos.
Identificador interno Un número único (p. ej. el número de inodo) que el SO usa para rastrear el archivo. Es el identificador “oficial” para el sistema.
Tamaño La cantidad de datos que contiene, medida en bytes.
Marcas de tiempo Fechas y horas de creación, última modificación y último acceso.
Propiedad y permisos Quién es el dueño del archivo y qué acciones (leer, escribir, ejecutar) puede realizar cada quién (propietario, grupo, otros).

Tabla 1: Metadatos típicos de un archivo.

Note

Idea clave. El nombre que ve el usuario y el identificador interno que usa el sistema son dos cosas distintas. Esta separación —que retomaremos al hablar de inodos y directorios— es la que permite que un mismo contenido tenga varios nombres, o que renombrar un archivo no implique mover sus datos.

8.2.2 Estructura lógica: la visión del sistema operativo

Para el SO, casi todos los archivos comparten la misma estructura fundamental: una secuencia de bytes no estructurada. El sistema no sabe —ni le interesa— si esos bytes representan texto, una imagen o audio.

Tip

El sistema operativo es un gestor, no un intérprete. El SO no interpreta el contenido; su trabajo es almacenar y entregar fielmente esa secuencia de bytes. La responsabilidad de darle sentido —verlos como texto, imagen o música— recae enteramente en la aplicación que los lee o escribe. Por eso el mismo archivo datos.bin puede ser una imagen para un visor y “basura” ilegible para un editor de texto: los bytes son los mismos; cambia quien los interpreta.

Un mismo archivo representado como una tira horizontal de celdas numeradas (byte 0, 1, 2, …, n), idéntica en todos los casos. Desde esa tira parten tres flechas hacia tres aplicaciones distintas: un editor de texto que la muestra como letras, un visor de imágenes que la muestra como una foto y un reproductor que la muestra como una onda de audio. Un rótulo sobre la tira dice “El SO solo ve bytes”; un rótulo bajo las aplicaciones dice “La aplicación les da significado”.

Un mismo archivo representado como una tira horizontal de celdas numeradas (byte 0, 1, 2, …, n), idéntica en todos los casos. Desde esa tira parten tres flechas hacia tres aplicaciones distintas: un editor de texto que la muestra como letras, un visor de imágenes que la muestra como una foto y un reproductor que la muestra como una onda de audio. Un rótulo sobre la tira dice “El SO solo ve bytes”; un rótulo bajo las aplicaciones dice “La aplicación les da significado”.

8.3 Operaciones sobre Archivos

El sistema operativo ofrece un conjunto reducido de operaciones para manipular archivos. Todas se solicitan mediante llamadas al sistema (system calls); la aplicación nunca toca el disco directamente. Las cuatro operaciones esenciales son:

  • Crear: el SO reserva una entrada para el nuevo archivo y le asigna su identificador interno y sus metadatos iniciales (tamaño cero, dueño, permisos, fechas).
  • Leer: copia bytes desde el archivo hacia la memoria del proceso, a partir de la posición actual.
  • Escribir: copia bytes desde la memoria del proceso hacia el archivo, a partir de la posición actual, ampliándolo si hace falta.
  • Borrar: elimina el archivo y libera los recursos (entrada de directorio, metadatos y bloques) para que el sistema pueda reutilizarlos.

Para que las operaciones de lectura y escritura sean eficientes, antes de usar un archivo se lo abre (operación open), lo que carga sus metadatos en memoria y devuelve un identificador temporal; al terminar se lo cierra (close), liberando ese identificador.

Note

Borrar no siempre es destruir. En muchos sistemas, “borrar” un archivo solo elimina su entrada de directorio y marca sus bloques como libres, pero los datos permanecen en el disco hasta que otro archivo los sobrescribe. De ahí que existan herramientas de recuperación de archivos borrados “por error”.

8.4 Métodos de Acceso

Las aplicaciones recorren la secuencia de bytes de un archivo con ayuda de un puntero de archivo (también llamado offset o posición actual) que mantiene el SO y que indica desde dónde se hará la próxima operación. Según cómo se mueva ese puntero, distinguimos dos métodos de acceso:

  • Acceso secuencial: se leen o escriben los bytes en orden, uno tras otro, desde el principio hacia el final. Cada operación avanza el puntero automáticamente. Es como leer un libro página por página o escuchar una cinta de casete: para llegar al final hay que pasar por todo lo anterior.
  • Acceso aleatorio (o directo): la aplicación puede saltar el puntero a cualquier posición del archivo y leer o escribir directamente allí, sin recorrer los datos previos. Es como ir directamente a una canción de un CD o a un capítulo concreto de un libro.

Comparación en dos paneles. Izquierda, “Acceso secuencial”: una cinta de casete con una flecha que avanza byte a byte de principio a fin; rótulo “para llegar al byte 800 hay que pasar por los 799 anteriores”. Derecha, “Acceso directo”: un CD con pistas numeradas y una flecha que salta directamente de la posición 0 a la 800; rótulo “el puntero salta a cualquier posición”.

Comparación en dos paneles. Izquierda, “Acceso secuencial”: una cinta de casete con una flecha que avanza byte a byte de principio a fin; rótulo “para llegar al byte 800 hay que pasar por los 799 anteriores”. Derecha, “Acceso directo”: un CD con pistas numeradas y una flecha que salta directamente de la posición 0 a la 800; rótulo “el puntero salta a cualquier posición”.
Tip

¿Cuál se usa? La mayoría de los sistemas de archivos modernos permiten ambos sobre el mismo archivo: la aplicación elige según lo que necesite. Un reproductor de música usa acceso directo para “saltar” a un punto de la canción; un programa que procesa un registro de eventos (log) suele leerlo secuencialmente de principio a fin.

8.5 ¿Qué es un Sistema de Archivos?

Hasta aquí vimos el archivo “desde arriba”, como lo percibe la aplicación. Ahora bajamos un nivel para ver cómo el sistema operativo lo organiza y almacena físicamente.

Note

El organizador maestro. Un sistema de archivos (filesystem) es la estructura y el conjunto de reglas lógicas que utiliza el SO para organizar, almacenar, localizar y gestionar los archivos sobre un dispositivo de almacenamiento (disco rígido, SSD, USB, etc.).

Sin un sistema de archivos, un disco sería solo una secuencia gigante de bloques sin significado. El sistema de archivos impone orden: decide en qué bloques va el contenido de cada archivo, dónde se guardan sus metadatos y cómo se traduce un nombre legible en una ubicación física. Ejemplos conocidos son ext4 (típico en Linux), NTFS (Windows) y APFS (macOS); todos resuelven el mismo problema con estructuras distintas.

8.5.1 Componentes fundamentales

Para cumplir su tarea, casi todo sistema de archivos se apoya en tres componentes que trabajan juntos:

  1. Bloques de datos. Son las unidades físicas de tamaño fijo (típicamente 4 KB) en las que se divide el dispositivo. El contenido real de los archivos —su secuencia de bytes— se guarda dentro de estos bloques.
  2. Inodos (metadatos). Un inodo (nodo de índice) es una estructura de datos que almacena todos los atributos de un archivo (tamaño, permisos, fechas, propietario) y, de forma crucial, los punteros que indican en qué bloques de datos reside su contenido. Cada archivo tiene exactamente un inodo.
  3. Estructura de directorios (nombres). Un directorio es un tipo especial de archivo cuyo contenido es una tabla que asocia nombres de archivo (legibles por humanos) con números de inodo.

La gran idea es la separación de responsabilidades: el directorio guarda el nombre, el inodo guarda los metadatos y la ubicación del contenido, y los bloques guardan el contenido. Cada pieza hace una sola cosa.

8.5.2 El flujo completo: de nombre a datos

Cuando abrimos un archivo —por ejemplo /home/user/doc.txt— el SO encadena esos tres componentes en una secuencia de pasos:

Flujo de resolución de un nombre de archivo, de izquierda a derecha en cuatro cajas enlazadas por flechas. La primera caja es el nombre de ruta /home/user/doc.txt; una flecha “busca el nombre” lleva al Directorio, que contiene la tabla nombre → inodo y la entrada doc.txt → 6529; una flecha “nº de inodo” lleva al Inodo 6529, que guarda los metadatos y los punteros a bloques; una flecha “punteros a los bloques” lleva a los Bloques de datos, que contienen el contenido real.

Flujo de resolución de un nombre de archivo, de izquierda a derecha en cuatro cajas enlazadas por flechas. La primera caja es el nombre de ruta /home/user/doc.txt; una flecha “busca el nombre” lleva al Directorio, que contiene la tabla nombre → inodo y la entrada doc.txt → 6529; una flecha “nº de inodo” lleva al Inodo 6529, que guarda los metadatos y los punteros a bloques; una flecha “punteros a los bloques” lleva a los Bloques de datos, que contienen el contenido real.

Figura 1: Resolución de un nombre de archivo. El nombre se busca en el directorio, que entrega un número de inodo; el inodo aporta los metadatos y los punteros; los punteros llevan a los bloques con el contenido.

  1. Navegación: el SO recorre la estructura de directorios (/, luego home, luego user) hasta encontrar la entrada de doc.txt.
  2. Resolución de inodo: en esa entrada lee el número de inodo asociado a doc.txt.
  3. Acceso a metadatos: con ese número localiza el inodo en el disco y obtiene tamaño, permisos, fechas y, sobre todo, las direcciones de los bloques.
  4. Acceso a datos: desde el inodo llega a los bloques de datos donde finalmente reside el contenido del archivo.
Tip

Por qué importa esta separación. Como el nombre (en el directorio) está desacoplado de los metadatos y el contenido (en el inodo), renombrar un archivo solo cambia una entrada de texto en el directorio —no mueve ni un byte de datos— y un mismo inodo puede tener varios nombres apuntándole. Esto último es justamente lo que hace posibles los enlaces, que veremos a continuación.

8.6 Tipos de Archivos

No todos los archivos guardan datos de usuario. El sistema de archivos reconoce varios tipos, cada uno con un propósito:

  • Archivo regular: contiene datos del usuario: texto, datos binarios o programas ejecutables. Es el tipo más común.
  • Directorio: contiene las entradas nombre → número de inodo que organizan la jerarquía de archivos. Es, técnicamente, un archivo cuyo contenido son otras referencias.
  • Enlace: un puntero o referencia a otro archivo. Permite que un mismo contenido sea accesible desde varios nombres o ubicaciones.

8.6.1 Enlaces: duros y simbólicos

Gracias a la separación entre nombre e inodo, un archivo puede ser alcanzable por más de un nombre. Existen dos mecanismos para lograrlo, con comportamientos muy distintos.

8.6.2 Tabla comparativa

Característica Enlace duro Enlace simbólico
A qué apunta Al inodo (metadatos y contenido) del archivo. A una ruta de acceso (un nombre de archivo).
Inodo propio No: comparte el mismo inodo que el original. Sí: es un archivo separado con su propio inodo.
Si el original se borra El contenido permanece accesible mientras quede algún enlace. Se convierte en un enlace roto.
Cruza sistemas de archivos No. Sí.
Puede apuntar a directorios No. Sí.
Analogía Un apodo o alias para la misma persona. Una nota con la dirección de una persona.

Tabla 2: Enlaces duros frente a enlaces simbólicos.


8.7 Implementación Física de los Archivos

Note

De la abstracción al disco. En la sección anterior vimos que el archivo es una abstracción: una secuencia de bytes con nombre. Ahora respondemos la pregunta que quedó abierta: ¿en qué bloques del disco se guardan realmente esos bytes y cómo lleva la cuenta el sistema de archivos?

El disco se organiza como una estantería dividida en casilleros de tamaño fijo llamados bloques (típicamente 4 KB). Sobre esa estantería, el sistema de archivos enfrenta dos problemas complementarios: dónde colocar los bloques de cada archivo —el método de asignación de espacio— y cómo saber qué bloques quedan libres —la gestión del espacio libre—. Esta sección recorre ambos.

8.8 Métodos de Asignación de Espacio

El método de asignación es la estrategia que usa el SO para decidir en qué bloques físicos guarda el contenido de un archivo. Hay tres enfoques clásicos, y la elección impacta directamente en la velocidad de acceso, el aprovechamiento del disco y la facilidad para que un archivo crezca.

8.8.1 Asignación contigua

Todos los bloques de un archivo se almacenan en una secuencia de bloques adyacentes. El directorio solo necesita registrar dos datos: el bloque de inicio y la longitud en bloques.

Su gran virtud es el acceso muy rápido: tanto secuencial (los bloques están uno tras otro) como directo (el bloque k del archivo está en inicio + k, un simple cálculo). Sus debilidades son serias: sufre fragmentación externa —con el tiempo quedan huecos libres demasiado pequeños y dispersos para alojar archivos nuevos— y los archivos no pueden crecer con facilidad, porque el espacio inmediatamente posterior puede estar ocupado. Por eso es ideal para medios de solo lectura como los CD-ROM, donde los archivos nunca cambian de tamaño.

8.8.2 Asignación enlazada

Los bloques de un archivo pueden estar dispersos por todo el disco; cada bloque guarda, además de los datos, un puntero al siguiente bloque del archivo. El directorio solo registra el primer bloque; el último lleva un puntero nulo (NULL).

Así se elimina por completo la fragmentación externa y el archivo crece con total flexibilidad: basta enganchar un bloque libre cualquiera al final de la cadena. El precio es alto para el acceso directo: para llegar al bloque k hay que recorrer la cadena desde el principio, bloque por bloque. Además es poco fiable: si un puntero se daña, se pierde el resto del archivo. Es la base del histórico sistema de archivos FAT.

8.8.3 Asignación indexada

Cada archivo tiene un bloque de índice que contiene la lista ordenada de todos sus bloques de datos. Para acceder al bloque k del archivo, el SO consulta la entrada k del índice y salta directamente al bloque correspondiente.

Combina lo mejor de los enfoques anteriores: soporta acceso directo rápido y no sufre fragmentación externa. Su costo es el overhead del bloque de índice, que ocupa espacio adicional (más notorio en archivos muy pequeños). Es la base de los sistemas de archivos modernos: NTFS, ext4 y APFS.

Tres tiras de bloques de disco numerados (0 a 7) ilustran cada método para el mismo archivo.txt. En asignación contigua, los bloques del archivo (1, 2, 3, 4) están coloreados y son adyacentes; el directorio anota inicio = 1 y longitud = 4. En asignación enlazada, los bloques del archivo (1, 4, 6) están dispersos y unidos por flechas que van de uno al siguiente hasta NULL; el directorio solo anota el bloque inicial. En asignación indexada, un bloque de índice (bloque 7, resaltado en azul) contiene la lista [1, 4, 6] y desde él parten flechas hacia los bloques de datos dispersos.

Tres tiras de bloques de disco numerados (0 a 7) ilustran cada método para el mismo archivo.txt. En asignación contigua, los bloques del archivo (1, 2, 3, 4) están coloreados y son adyacentes; el directorio anota inicio = 1 y longitud = 4. En asignación enlazada, los bloques del archivo (1, 4, 6) están dispersos y unidos por flechas que van de uno al siguiente hasta NULL; el directorio solo anota el bloque inicial. En asignación indexada, un bloque de índice (bloque 7, resaltado en azul) contiene la lista [1, 4, 6] y desde él parten flechas hacia los bloques de datos dispersos.

8.8.4 Comparativa

Método El directorio guarda Acceso directo Fragmentación externa Crecimiento Uso típico
Contigua Inicio + longitud Muy rápido Sí, la sufre Difícil CD-ROM
Enlazada Primer bloque Lento (seguir la cadena) No Flexible FAT
Indexada Bloque de índice Rápido No Flexible NTFS, ext4, APFS

Tabla 3: Comparación de los métodos de asignación de espacio.

Tip

Conexión con el inodo. La asignación indexada es exactamente la idea que vimos en la sección anterior: el inodo de un archivo cumple el rol de bloque de índice, ya que guarda los punteros a los bloques de datos. Los sistemas reales la refinan con niveles de indirección (punteros que apuntan a otros bloques de punteros) para soportar archivos muy grandes sin desperdiciar espacio en los pequeños.

8.9 Gestión del Espacio Libre

Ya sabemos cómo se organizan los bloques de un archivo. Queda una pregunta igual de importante: entre los millones de bloques de un disco, ¿cómo sabe el sistema de archivos cuáles están libres y cuáles ocupados? Para asignar espacio a un archivo nuevo —o recuperarlo al borrar uno— necesita un registro de los bloques disponibles. Las dos técnicas más usadas son el mapa de bits y la lista enlazada.

8.9.1 Mapa de bits (bitmap)

Es la técnica más común en sistemas modernos como ext4 y NTFS. Consiste en un vector de bits en el que cada bit representa un bloque del disco: el primer bit es el bloque 0, el segundo el bloque 1, y así sucesivamente. La convención habitual es:

  • 0 → el bloque está libre.
  • 1 → el bloque está ocupado.

Cuando el SO necesita un bloque, busca un 0 en el mapa y, al asignarlo, lo cambia a 1; al borrar un archivo, los bits de sus bloques vuelven a 0. Encontrar varios bloques contiguos es sencillo: basta buscar una secuencia de ceros consecutivos.

Arriba, un mapa de bits de 16 bloques con los valores 1110100111010011: las celdas con 1 (ocupadas) se muestran en gris y las celdas con 0 (libres) en verde, cada una rotulada con su índice de 0 a 15; quedan libres los bloques 3, 5, 6, 10, 12 y 13. Abajo, una lista enlazada de bloques libres: un superbloque apunta al bloque 3, que apunta al 5, luego al 6, 10, 12 y 13, y este último apunta a NULL.

Arriba, un mapa de bits de 16 bloques con los valores 1110100111010011: las celdas con 1 (ocupadas) se muestran en gris y las celdas con 0 (libres) en verde, cada una rotulada con su índice de 0 a 15; quedan libres los bloques 3, 5, 6, 10, 12 y 13. Abajo, una lista enlazada de bloques libres: un superbloque apunta al bloque 3, que apunta al 5, luego al 6, 10, 12 y 13, y este último apunta a NULL.
Note

Costo en espacio. El mapa de bits ocupa memoria proporcional al tamaño del disco. Para un disco de 4 TB con bloques de 4 KB, el mapa ocupa unos 128 MB. Con la RAM actual, mantenerlo en memoria rara vez es un problema, y a cambio se obtiene una búsqueda de bloques libres muy rápida.

8.9.2 Lista enlazada de bloques libres

Esta técnica encadena todos los bloques libres del disco como si fueran un único archivo. Un puntero en una zona especial (el superbloque) apunta al primer bloque libre; ese bloque contiene un puntero al siguiente, y así hasta el último, que apunta a NULL.

La asignación es muy rápida: el SO toma el primer bloque de la lista y mueve la cabecera al segundo. La liberación también: el bloque recién liberado se engancha al principio de la lista. Su gran ventaja es que no desperdicia espacio, porque la información de la cadena vive dentro de los propios bloques libres. Su desventaja es la ineficiencia cuando se necesita más de un bloque —hay que seguir la cadena tantas veces como bloques— y es especialmente mala para localizar bloques contiguos.

8.9.3 Comparativa

Técnica Dónde se almacena Ventaja Desventaja
Mapa de bits Estructura aparte (vector de bits) Búsqueda rápida, ideal para bloques contiguos Ocupa espacio proporcional al disco
Lista enlazada En los propios bloques libres No usa espacio extra Lenta para varios bloques o contiguos

Tabla 4: Mapa de bits frente a lista enlazada para la gestión del espacio libre.


8.10 Directorios y Organización Jerárquica

En la primera sección vimos que un directorio es un tipo especial de archivo cuyo contenido es una tabla de nombre → número de inodo. Esa es la pieza básica; ahora veamos cómo, encadenando directorios unos dentro de otros, el sistema de archivos organiza todos los archivos en una estructura ordenada y fácil de recorrer.

8.10.1 El árbol de directorios

Los sistemas de archivos modernos organizan los archivos en una jerarquía en forma de árbol. En la cima hay un único directorio especial llamado raíz, que en los sistemas tipo UNIX se denota con una barra (/). De la raíz cuelgan directorios; dentro de cada directorio puede haber archivos y, a su vez, más directorios (subdirectorios); y así sucesivamente, en tantos niveles como haga falta.

Árbol de directorios. En la cima, la raíz / (resaltada); de ella cuelgan dos directorios, home y etc. Dentro de home están los directorios personales ana y luis. Dentro de ana hay un archivo doc.txt y un subdirectorio proyectos; dentro de proyectos está el archivo informe.pdf. Dentro de luis está el archivo notas.txt. Una leyenda distingue las cajas de directorio de las de archivo.

Árbol de directorios. En la cima, la raíz / (resaltada); de ella cuelgan dos directorios, home y etc. Dentro de home están los directorios personales ana y luis. Dentro de ana hay un archivo doc.txt y un subdirectorio proyectos; dentro de proyectos está el archivo informe.pdf. Dentro de luis está el archivo notas.txt. Una leyenda distingue las cajas de directorio de las de archivo.

Figura 3: Un árbol de directorios. La raíz / contiene a home y etc; dentro de home están los directorios personales de cada usuario, que a su vez contienen archivos y subdirectorios.

Esta organización es poderosa porque combina orden y escalabilidad: agrupa los archivos por tema o por dueño, evita choques de nombres (dos archivos pueden llamarse igual si están en directorios distintos) y permite localizar cualquier archivo siguiendo el camino desde la raíz.

Tip

Analogía. El árbol de directorios es como un archivador con cajones, carpetas y subcarpetas: el archivador completo es la raíz, cada cajón es un directorio, dentro hay carpetas (subdirectorios) y, finalmente, los documentos (archivos). Para llegar a un papel concreto se abre el cajón correcto, luego la carpeta correcta, y así.

8.10.2 Rutas: absolutas y relativas

Para nombrar un archivo dentro del árbol se usa una ruta (path): la secuencia de directorios que hay que atravesar para llegar a él, separados por /. Hay dos formas de escribirla:

  • Ruta absoluta: parte siempre desde la raíz /. Por ejemplo, /home/ana/doc.txt indica, sin ambigüedad, exactamente un archivo, sin importar dónde se encuentre el usuario en ese momento.
  • Ruta relativa: parte desde el directorio actual (o directorio de trabajo) del proceso. Si el usuario ya está situado en /home/ana, la ruta relativa doc.txt apunta al mismo archivo que la absoluta /home/ana/doc.txt.

Para moverse por el árbol con rutas relativas, todo directorio contiene dos entradas especiales:

  • . (punto) hace referencia al propio directorio actual.
  • .. (punto punto) hace referencia al directorio padre, el que está un nivel más arriba.

Así, desde /home/ana/proyectos, la ruta relativa ../doc.txt sube un nivel (a /home/ana) y llega a doc.txt.

Note

Conexión con el flujo de apertura. Resolver una ruta como /home/ana/doc.txt es exactamente el proceso de navegación que vimos en la primera sección: el SO parte de la raíz, busca home en su tabla, obtiene su inodo, abre ese directorio, busca ana, y así hasta encontrar la entrada final y su número de inodo.

8.11 Protección de Archivos

En un sistema multiusuario, varios usuarios comparten el mismo disco. Surge entonces una pregunta esencial: una vez que un archivo existe, ¿quién puede leerlo, modificarlo o ejecutarlo? El mecanismo que responde esto se llama control de acceso. En los sistemas tipo UNIX se basa en un modelo de permisos sencillo y eficaz.

Tip

Analogía. Pensemos en los permisos como las llaves de un edificio: hay llaves que solo abren tu oficina (tus archivos), otras que abren áreas comunes de tu departamento (archivos del grupo) y una llave maestra para el administrador (el superusuario o root).

8.11.1 Las identidades: usuario, grupo y otros (UGO)

Cada archivo y directorio tiene asociado un propietario y un grupo. Los permisos se definen para tres clases de identidad:

  • Usuario (user/owner): el propietario del archivo. Por defecto, quien crea un archivo se convierte en su dueño y tiene el mayor control sobre él.
  • Grupo (group): el grupo al que pertenece el archivo. Permite que varios usuarios del mismo grupo compartan el acceso a ciertos archivos.
  • Otros (others): cualquier otro usuario del sistema que no sea el propietario ni miembro del grupo.

8.11.2 Los permisos básicos: leer, escribir y ejecutar (rwx)

Sobre cada una de las tres identidades se pueden conceder o denegar tres permisos. Lo crucial es que su significado cambia según se apliquen a un archivo o a un directorio:

Permiso Valor octal En un archivo En un directorio
r (read) 4 Leer el contenido del archivo. Listar los nombres que contiene el directorio.
w (write) 2 Modificar o borrar el contenido del archivo. Crear, renombrar o borrar archivos dentro del directorio.
x (execute) 1 Ejecutar el archivo (si es un programa o script). Entrar al directorio para acceder a su contenido.

Tabla 5: Significado de los permisos rwx según se apliquen a archivos o directorios.

Important

El permiso x en los directorios es la llave. Sin permiso de ejecución (x) sobre un directorio, no se puede acceder a ninguno de sus archivos ni subdirectorios, aunque se tenga permiso de lectura sobre ellos. El x es la “llave” que permite “abrir la puerta” del directorio y atravesarlo.

8.11.3 Cómo se representan los permisos

Los permisos de un archivo se resumen en una cadena de diez caracteres. El primero indica el tipo (- archivo regular, d directorio, l enlace simbólico); los nueve restantes son tres grupos de rwx, uno por cada identidad, en el orden usuario – grupo – otros. Cada grupo de tres también puede expresarse como un dígito octal, sumando los valores de los permisos activos (r=4, w=2, x=1).

Desglose del conjunto de permisos -rwxr-xr–. La cadena se separa en cuatro partes etiquetadas: el primer carácter es el “Tipo” (- = archivo); los siguientes tres (rwx) son los permisos del “Usuario”, que en octal suman 4+2+1 = 7; los tres siguientes (r-x) son los del “Grupo”, que suman 4+0+1 = 5; los últimos tres (r–) son los de “Otros”, que suman 4+0+0 = 4. La representación octal completa es 754. Abajo, una leyenda recuerda que r = 4, w = 2, x = 1.

Desglose del conjunto de permisos -rwxr-xr–. La cadena se separa en cuatro partes etiquetadas: el primer carácter es el “Tipo” (- = archivo); los siguientes tres (rwx) son los permisos del “Usuario”, que en octal suman 4+2+1 = 7; los tres siguientes (r-x) son los del “Grupo”, que suman 4+0+1 = 5; los últimos tres (r–) son los de “Otros”, que suman 4+0+0 = 4. La representación octal completa es 754. Abajo, una leyenda recuerda que r = 4, w = 2, x = 1.

Así, la cadena -rwxr-xr-- (octal 754) describe un archivo regular en el que el propietario puede leer, escribir y ejecutar; el grupo puede leer y ejecutar pero no escribir; y los demás solo pueden leer.

Note

Las herramientas, en la práctica. Visualizar estos permisos (con ls -l) y modificarlos (con chmod, chown, chgrp) corresponde a la clase práctica de laboratorio. Aquí nos concentramos en entender el modelo: qué representa cada permiso y a quién se aplica.

8.12 Listas de Control de Acceso (ACL)

El modelo UGO es simple y eficiente, pero también rígido: solo distingue tres categorías de identidad. ¿Qué ocurre si necesitamos que un usuario específico —que no es el dueño ni pertenece al grupo— pueda escribir un archivo, sin abrir ese permiso a todos los “otros”? Con UGO no hay forma limpia de hacerlo.

Las listas de control de acceso (Access Control Lists, ACL) resuelven esta limitación. Una ACL es una lista de entradas asociada a cada archivo o directorio, donde cada entrada concede un conjunto de permisos a un usuario o grupo concreto, además del esquema UGO básico. Esto permite un control mucho más granular.

Comparación entre el modelo UGO y las ACL para el archivo informe.txt, en dos paneles apilados. Arriba, “Modelo UGO”: solo tres filas de permisos (usuario ana: rwx, grupo profesores: r-x, otros: r–). Abajo, “Con ACL”: la misma lista pero con dos entradas adicionales resaltadas, “usuario luis: rw-” y “grupo invitados: r–”, marcadas como entradas extra, que conceden permisos a identidades concretas además de las tres categorías clásicas.

Comparación entre el modelo UGO y las ACL para el archivo informe.txt, en dos paneles apilados. Arriba, “Modelo UGO”: solo tres filas de permisos (usuario ana: rwx, grupo profesores: r-x, otros: r–). Abajo, “Con ACL”: la misma lista pero con dos entradas adicionales resaltadas, “usuario luis: rw-” y “grupo invitados: r–”, marcadas como entradas extra, que conceden permisos a identidades concretas además de las tres categorías clásicas.
Aspecto Modelo UGO ACL
Identidades Solo tres: usuario, grupo y otros. Cualquier cantidad de usuarios y grupos concretos.
Granularidad Baja. Alta.
Complejidad Mínima, fácil de leer. Mayor: más entradas que administrar.
Cuándo conviene Casos simples y la mayoría de los archivos. Permisos finos para usuarios o grupos puntuales.

Tabla 6: Modelo UGO frente a listas de control de acceso (ACL).

Tip

Flexibilidad con un costo. Las ACL ganan precisión, pero a cambio el conjunto de permisos se vuelve más difícil de leer y mantener. Por eso se reservan para los casos que el modelo UGO no resuelve bien; para la mayoría de los archivos, las tres categorías clásicas son suficientes.


8.13 Resumen

  • Un archivo es la abstracción con la que el SO presenta una colección de información como una unidad lógica con nombre, ocultando el hardware de almacenamiento.
  • Cada archivo lleva metadatos (nombre, identificador interno, tamaño, fechas, propiedad y permisos) y, para el SO, es una secuencia de bytes no estructurada: el sistema la gestiona, pero es la aplicación quien la interpreta.
  • Las operaciones básicas son crear, leer, escribir y borrar (con open/close como apoyo), y el acceso puede ser secuencial o directo según cómo se mueva el puntero de archivo.
  • Un sistema de archivos organiza el almacenamiento mediante tres componentes: bloques de datos (contenido), inodos (metadatos y punteros a los bloques) y directorios (tablas de nombre → inodo).
  • La separación entre nombre, metadatos y contenido explica el flujo de apertura de un archivo y hace posibles los enlaces: el duro comparte inodo, el simbólico guarda una ruta y puede quedar roto.
  • El método de asignación decide dónde van los bloques de un archivo: contigua (rápida pero rígida), enlazada (flexible pero de acceso lento) e indexada (rápida y flexible, base de los sistemas modernos).
  • La gestión del espacio libre registra qué bloques están disponibles mediante un mapa de bits (rápido, ocupa espacio) o una lista enlazada (sin espacio extra, más lenta).
  • Los directorios organizan todos los archivos en un árbol con una raíz (/); cada archivo se nombra con una ruta absoluta (desde la raíz) o relativa (desde el directorio actual, con . y ..).
  • La protección en sistemas UNIX se basa en el modelo UGO (usuario, grupo, otros) y los permisos rwx, cuyo significado difiere entre archivos y directorios; se representan en una cadena de diez caracteres y en notación octal.
  • Las ACL extienden el modelo UGO permitiendo conceder permisos a usuarios y grupos concretos, a cambio de mayor complejidad.