Sistemas de archivos — ejercicios tipo examen con bloques, FAT, i-nodos y enlaces (y el atajo que apuntaba a la nada)
En el trabajo en grupo de IC2, laura tenía los datos buenos en su carpeta y yo no quería copiarlos (si ella los corregía, mi copia se quedaba vieja). Así que hice lo que había visto en clase: ln -s /home/laura/ic2/grupo/datos.csv datos.csv. Funcionó dos días. Al tercero, laura «ordenó» su carpeta, movió datos.csv a grupo/entrada/ y mi programa empezó a fallar con No such file or directory. Mi atajo seguía ahí, con su ruta… a un sitio donde ya no había nada.
Con un enlace duro no me habría pasado: habría sido otro nombre para el mismo i-nodo, y mover el original no lo rompe. Esa diferencia, y muchas como esa, es lo que se pregunta en el examen. Aquí tienes la tanda de ejercicios del último tema de la teoría de IC2. Si algo no te suena, repasa antes la teoría de sistemas de archivos. Y si quieres ver los cálculos resueltos paso a paso, tienes la práctica guiada de sistemas de archivos.
Tabla de Contenidos
Cómo usar este artículo
- Haz el test sin mirar la teoría. Cada pregunta tiene su botón «Comprobar» y una explicación de por qué es correcta la buena y por qué fallan las otras. Las de respuesta múltiple penalizan como en el examen: marcar una opción falsa resta.
- Haz los cálculos con papel. Bloques por asignación, lecturas para llegar a un bloque, tamaño máximo con un i-nodo y tamaños del mapa de bits y de la FAT. Las casillas se corrigen solas y admiten decimales con coma.
- Escribe las de desarrollo antes de mirar la respuesta modelo. Después compara con la lista «lo que se valora».
- Termina con el chuletario. Si fallaste algo, búscalo en la tabla «Síntoma / Causa probable».
Test: archivos, acceso, directorios y asignación
Treinta y una preguntas con todos los formatos del examen: única, múltiple, verdadero o falso, huecos, relacionar, ordenar y respuesta corta. Las preguntas son nuevas (no las de la colección del examen), pero preguntan por lo mismo.
¿Qué frase describe mejor lo que es un archivo para el sistema operativo?
- Un objeto con nombre que guarda información persistente, que sigue ahí después de apagar
- Una zona de la RAM que el proceso reserva con malloc
- Una fila de sectores contiguos del disco
- La entrada de la tabla de archivos abiertos de un proceso
Solución
Respuesta: Un objeto con nombre que guarda información persistente, que sigue ahí después de apagar
Persistente significa no volátil, duradero: la información sobrevive a que se apague el ordenador. Lo demás son estructuras que el SO usa para gestionarlo.
informe.pdf no es lo mismo para todos. Relaciona cada nivel con lo que ve:
| El usuario | |
| La interfaz de llamadas al sistema (Unix) | |
| El núcleo del SO |
Definiciones:
- Una colección de bloques
- Una colección de bytes
- Una estructura de datos duradera
- Una colección de procesos
Solución
- El usuario → Una estructura de datos duradera
- La interfaz de llamadas al sistema (Unix) → Una colección de bytes
- El núcleo del SO → Una colección de bloques
El usuario ve un documento; read() y write() ven bytes sin importarles qué significan; el núcleo lo guarda y lo lee por bloques (la unidad de transferencia, mayor que un sector).
¿Cuáles de estos son atributos de un archivo?
- El tamaño
- Las fechas de creación y de modificación
- La localización en el dispositivo
- La información de protección (permisos)
- El PID del proceso que lo está leyendo
- El número de marco de RAM donde se cargó
Solución
Respuesta: El tamaño · Las fechas de creación y de modificación · La localización en el dispositivo · La información de protección (permisos)
Los atributos de los apuntes son nombre, tipo, localización, tamaño, protección, fechas y versión. Recuerda que esta pregunta penaliza: marcar un distractor resta.
Sobre abrir y cerrar archivos, indica si es verdadero o falso:
- open() copia en memoria principal la información de control del archivo para no ir al directorio en cada operación.
- En Unix, el descriptor que devuelve open() es el índice de la entrada reservada en la tabla de archivos abiertos del proceso.
- Cada read() vuelve a buscar el nombre del archivo en el directorio del disco.
- close() borra el archivo del disco si nadie más lo tiene abierto.
Solución
- V — open() copia en memoria principal la información de control del archivo para no ir al directorio en cada operación.
- V — En Unix, el descriptor que devuelve open() es el índice de la entrada reservada en la tabla de archivos abiertos del proceso.
- F — Cada read() vuelve a buscar el nombre del archivo en el directorio del disco.
- F — close() borra el archivo del disco si nadie más lo tiene abierto.
Abrir sirve justo para no repetir la búsqueda: el directorio se consulta una vez y después se trabaja con la copia en RAM a través del descriptor.
close() solo libera los recursos que el archivo ocupaba en memoria; el archivo sigue en el disco.
Truncas datos.csv, que medía 12 288 bytes. ¿Cómo queda?
- Sigue existiendo, con sus atributos, pero con tamaño 0
- Desaparece del directorio y sus bloques quedan libres
- Queda con 12 288 bytes, pero vuelve la posición actual al principio
- Se convierte en un enlace simbólico vacío
Solución
Respuesta: Sigue existiendo, con sus atributos, pero con tamaño 0
Truncar: fuera el contenido, se quedan la entrada de directorio y los atributos (nombre, permisos, fechas…). Borrar se lo lleva todo.
Completa cómo reconoce cada sistema el tipo de un archivo:
En Windows el tipo se deduce de la ____ del nombre; en Unix el sistema operativo ____ tipos de archivo; aun así, todo SO tiene que entender al menos el formato del archivo ____.
Palabras:
- no reconoce
- siempre reconoce
- de texto
- contenido
- ejecutable
- extensión
Solución
En Windows el tipo se deduce de la extensión del nombre; en Unix el sistema operativo no reconoce tipos de archivo; aun así, todo SO tiene que entender al menos el formato del archivo ejecutable.
Windows mira las últimas letras del nombre; Unix trata el contenido como bytes sin más; y cualquier SO necesita reconocer los ejecutables para poder cargarlos y lanzarlos.
La expresión «sistema de archivos» se usa con dos sentidos. ¿Cuáles?
- El módulo del sistema operativo que ofrece los servicios de archivos y directorios
- La organización de la información que se crea en el disco para guardar archivos y directorios
- La tabla de páginas de cada proceso
- El controlador (driver) del disco
Solución
Respuesta: El módulo del sistema operativo que ofrece los servicios de archivos y directorios · La organización de la información que se crea en el disco para guardar archivos y directorios
Uno es software (el módulo del SO) y el otro es la estructura de datos que queda escrita en el dispositivo (por ejemplo, un disco formateado en ext4 o FAT32).
Método de acceso en el que cada lectura o escritura continúa justo donde terminó la anterior, como en una cinta:
Solución
Respuesta: Secuencial
Es el modelo básico de Unix y Windows: open → read → read… La posición actual avanza sola.
¿Con qué llamada al sistema de Unix colocas la posición actual en el byte que quieras antes de leer (acceso directo)?
Solución
Respuesta: lseek
lseek(fd, desplazamiento, SEEK_SET) mueve la posición; el siguiente read() empieza ahí, sin pasar por lo de antes.
Relaciona cada método de acceso con su imagen:
| Secuencial | |
| Directo | |
| Indexado (ISAM) |
Definiciones:
- Una cinta que solo avanza o retrocede
- Una pila de llamadas
- Una tabla ordenada que se consulta por una clave
- Un array de bloques al que saltas por posición
Solución
- Secuencial → Una cinta que solo avanza o retrocede
- Directo → Un array de bloques al que saltas por posición
- Indexado (ISAM) → Una tabla ordenada que se consulta por una clave
En el indexado, el SO mantiene uno o varios archivos índice ocultos para buscar por clave (por ejemplo, un apellido). Hoy se hace fuera del núcleo, en las bases de datos.
Ordena los modelos de directorio del más simple al más general:
- Dos niveles
- Nivel único
- Grafo general
- Grafo acíclico
- Árbol
Solución
Orden correcto:
- Nivel único
- Dos niveles
- Árbol
- Grafo acíclico
- Grafo general
Cada modelo añade algo: separar usuarios (dos niveles), subdirectorios (árbol), compartir sin copiar (acíclico) y enlaces sin restricciones, con ciclos (general).
Un disco tiene un único directorio donde están todos los archivos de todos los usuarios, sin subcarpetas. ¿Qué modelo de directorio es?
Solución
Respuesta: Nivel único
Es el más sencillo y el que peor escala: choques de nombres entre usuarios y búsquedas lentas cuando hay muchos archivos.
Desde la raíz, el árbol baja por home → laura → ic2 → grupo y ahí está notas.txt. Escribe su ruta absoluta.
Solución
Respuesta: /home/laura/ic2/grupo/notas.txt
La ruta absoluta empieza en la raíz, que es la / inicial. No se escribe «/root/…»: root es otro directorio (el del administrador).
Tu directorio de trabajo es /home/sergio/ic2. Escribe la ruta relativa de /home/sergio/ic2/practica/Makefile.
Solución
Respuesta: practica/Makefile
La relativa parte del directorio de trabajo, así que se quita el principio común (/home/sergio/ic2/) y no lleva / al principio.
Sobre los modelos de directorio, verdadero o falso:
- Con dos niveles, sergio y laura pueden tener cada uno un archivo practica.c.
- El modelo en árbol permite que un mismo archivo cuelgue de dos rutas distintas.
- En un grafo acíclico, las dos rutas llevan al mismo objeto, no a una copia.
- En un grafo general, un programa que recorre los directorios puede no terminar.
Solución
- V — Con dos niveles, sergio y laura pueden tener cada uno un archivo practica.c.
- F — El modelo en árbol permite que un mismo archivo cuelgue de dos rutas distintas.
- V — En un grafo acíclico, las dos rutas llevan al mismo objeto, no a una copia.
- V — En un grafo general, un programa que recorre los directorios puede no terminar.
El árbol tiene justo esa desventaja: no permite compartir. El grafo acíclico lo resuelve con enlaces y el general admite enlaces a directorios de más arriba, que forman ciclos.
datos.csv tiene un enlace duro llamado copia-laura.csv. Haces rm datos.csv. ¿Qué pasa?
- Los datos siguen accesibles por copia-laura.csv; el contador de enlaces del i-nodo baja de 2 a 1
- copia-laura.csv queda roto y apunta a nada
- Se borran los dos nombres a la vez
- rm falla porque el archivo tiene un enlace
Solución
Respuesta: Los datos siguen accesibles por copia-laura.csv; el contador de enlaces del i-nodo baja de 2 a 1
Un enlace duro es otro nombre para el mismo i-nodo. Mientras quede algún nombre (contador > 0), los datos siguen ahí.
Relaciona cada orden con lo que crea:
| ln -s apuntes.md atajo.md | |
| ln apuntes.md otro.md | |
| cp apuntes.md copia.md |
Definiciones:
- Un enlace simbólico
- Una copia independiente
- Un punto de montaje
- Un enlace duro
Solución
- ln -s apuntes.md atajo.md → Un enlace simbólico
- ln apuntes.md otro.md → Un enlace duro
- cp apuntes.md copia.md → Una copia independiente
La s de -s es de symbolic. Sin -s, ln crea otro nombre para el mismo i-nodo. cp duplica los datos: si cambias uno, el otro no cambia.
¿Qué se puede hacer para evitar los problemas de los ciclos en un directorio en grafo general?
- Permitir enlaces solo a archivos, no a directorios
- Recolección de basura (de memoria) para lo que quede inalcanzable
- Usar algoritmos que detecten ciclos al recorrer
- Pasar a asignación contigua
- Aumentar el tamaño de bloque
Solución
Respuesta: Permitir enlaces solo a archivos, no a directorios · Recolección de basura (de memoria) para lo que quede inalcanzable · Usar algoritmos que detecten ciclos al recorrer
Las tres son las soluciones de los apuntes. La primera es la que usa Unix con los enlaces duros: no se pueden hacer a directorios.
Conectas un pendrive y su contenido aparece dentro de /media/usb. ¿Qué ha hecho el sistema operativo?
- Montar el sistema de archivos del pendrive en el punto de montaje /media/usb
- Copiar todo el pendrive al disco del portátil
- Crear un enlace duro a cada archivo del pendrive
- Formatear el pendrive
Solución
Respuesta: Montar el sistema de archivos del pendrive en el punto de montaje /media/usb
Antes de usar un sistema de archivos hay que montarlo: su árbol se cuelga de un directorio del árbol existente.
¿Cuáles son mecanismos de protección de archivos?
- Listas de control de acceso (ACL)
- Contraseñas
- Cifrado
- El mapa de bits
- La FAT
Solución
Respuesta: Listas de control de acceso (ACL) · Contraseñas · Cifrado
Una ACL es una lista de pares <usuario, permisos>. El cifrado protege incluso si alguien se lleva el disco físico.
Ordena las capas del sistema de archivos de arriba (más cerca de los programas) abajo (más cerca del dispositivo):
- Capa de comandos básicos
- Capa de driver
- Capa de control de bloques
- Capa lógica
Solución
Orden correcto:
- Capa lógica
- Capa de control de bloques
- Capa de comandos básicos
- Capa de driver
Lógica: directorios e i-nodos. Control de bloques: de bloque lógico a físico. Comandos básicos: leer y escribir bloques, búferes. Driver: hablar con el controlador e interrupciones.
Relaciona cada asignación con lo que guarda la entrada de directorio:
| Contigua | |
| Enlazada | |
| Indexada |
Definiciones:
- El primer bloque (y a veces el último); los demás enlaces van dentro de los bloques
- El bloque inicial y la longitud
- La lista completa de bloques libres del disco
- El número del bloque de índices
Solución
- Contigua → El bloque inicial y la longitud
- Enlazada → El primer bloque (y a veces el último); los demás enlaces van dentro de los bloques
- Indexada → El número del bloque de índices
En la contigua basta con inicio + longitud porque los bloques van seguidos. En la enlazada, cada bloque dice cuál es el siguiente. En la indexada, todos los punteros están juntos en el bloque de índices.
¿En qué asignación se pierde todo lo que hay detrás de un bloque si ese bloque se daña a mitad del archivo?
Solución
Respuesta: Enlazada
El número del siguiente bloque estaba dentro del bloque dañado: la cadena se rompe ahí.
¿Qué técnica de asignación usa Unix con sus i-nodos?
- Indexada multinivel (punteros directos e indirectos simple, doble y triple)
- FAT
- Contigua con extensiones
- Enlazada con enlaces dobles
Solución
Respuesta: Indexada multinivel (punteros directos e indirectos simple, doble y triple)
Unix resolvió el límite del bloque de índices con varios niveles: unos punteros llevan a datos y otros a bloques de índices.
Fragmentación y espacio, verdadero o falso:
- La asignación contigua sufre fragmentación externa: puede haber sitio libre en total y no caber un archivo.
- La asignación enlazada sufre fragmentación externa.
- En la indexada, un archivo de un solo bloque de datos ocupa dos bloques.
- La FAT es una variante de la asignación enlazada.
Solución
- V — La asignación contigua sufre fragmentación externa: puede haber sitio libre en total y no caber un archivo.
- F — La asignación enlazada sufre fragmentación externa.
- V — En la indexada, un archivo de un solo bloque de datos ocupa dos bloques.
- V — La FAT es una variante de la asignación enlazada.
En la práctica de IC2 del artículo, informe.pdf no cabía en contigua con 11 bloques libres porque el mayor hueco era de 4.
La enlazada y la indexada usan cualquier bloque libre, así que no tienen fragmentación externa (solo la interna del último bloque).
¿Qué ventajas tiene la FAT frente a la asignación enlazada clásica?
- Los enlaces están juntos y se pueden guardar en caché o traer enteros a la RAM
- Los bloques de datos no pierden bytes con el número del siguiente
- Si se daña un bloque de la FAT no afecta a ningún archivo
- Ya no hace falta marcar el final del archivo
Solución
Respuesta: Los enlaces están juntos y se pueden guardar en caché o traer enteros a la RAM · Los bloques de datos no pierden bytes con el número del siguiente
La FAT saca los enlaces de los bloques y los reúne en una tabla al principio del disco: recorrer la cadena es mirar la tabla, no leer bloque a bloque.
Completa las tres formas de saber qué bloques están libres:
En un ____ hay un bit por bloque; en una ____ cada bloque libre apunta al siguiente; y en un disco ____ la propia tabla marca los libres.
Palabras:
- lista enlazada
- tabla de páginas
- TLB
- mapa de bits
- FAT
Solución
En un mapa de bits hay un bit por bloque; en una lista enlazada cada bloque libre apunta al siguiente; y en un disco FAT la propia tabla marca los libres.
El mapa de bits es el del Unix tradicional. En la lista enlazada, el SO solo guarda un puntero al primer libre (o usa ese primer libre como bloque de índices con los demás).
Asignación indexada con un único bloque de índices, bloques de 2 KiB y punteros de 4 bytes. ¿Cuántos KiB mide como máximo un archivo? (solo el número)
Solución
Respuesta: 1024
En el bloque de índices caben 2048 / 4 = 512 punteros, así que el archivo tiene como mucho 512 bloques: 512 × 2 KiB = 1024 KiB (1 MiB).
i-nodo con 12 punteros directos, bloques de 4 KiB y punteros de 4 bytes. ¿Qué puntero lleva al bloque lógico 1030 de un archivo (contando desde 0)?
- El indirecto simple
- Un puntero directo
- El indirecto doble
- El indirecto triple
Solución
Respuesta: El indirecto simple
Con 4 KiB y punteros de 4 B, un bloque de índices guarda 1024 punteros: el simple cubre 1024 bloques, del 12 al 1035.
Con el mismo i-nodo (12 directos, 1024 punteros por bloque) ya en memoria, ¿cuántas lecturas de disco cuesta leer el bloque lógico 40 000?
Solución
Respuesta: 3
40 000 es mayor que 1035 y menor que 1 049 612: va por el indirecto doble. Lecturas: bloque de índices de arriba + bloque de índices de abajo + bloque de datos = 3.
Implementación de directorios, verdadero o falso:
- Una lista lineal de entradas es fácil de programar, pero muy lenta con miles de archivos.
- NTFS y ext4 usan árboles B (o variantes) para los directorios grandes.
- Con una tabla hash hay que comparar el nombre con todas las entradas.
- El directorio solo existe en RAM; en el disco solo están los datos.
Solución
- V — Una lista lineal de entradas es fácil de programar, pero muy lenta con miles de archivos.
- V — NTFS y ext4 usan árboles B (o variantes) para los directorios grandes.
- F — Con una tabla hash hay que comparar el nombre con todas las entradas.
- F — El directorio solo existe en RAM; en el disco solo están los datos.
La tabla hash calcula la casilla a partir del nombre y va directa. El directorio se guarda en el disco (en RAM, como mucho, una copia para ir más rápido).
Si dudas entre enlace duro y simbólico, pregúntate «¿guarda una ruta o comparte el i-nodo?». Casi todas las preguntas de enlaces se resuelven con esa pregunta.
Cálculos con casillas
Cinco problemas como los del examen. Antes de empezar, la receta que sirve para todos:
- Todo en potencias de 2: 1 KiB = 2^10, 1 MiB = 2^20, 1 GiB = 2^30, 1 TiB = 2^40.
- Bloques de un archivo = ⌈tamaño / bytes útiles⌉: útiles = bloque en contigua, FAT e indexada; bloque − enlaces en la enlazada. Y en la indexada, +1 por el bloque de índices.
- Punteros por bloque N = bloque / puntero. Máximo con un i-nodo = (directos + N + N² + N³) × bloque.
- Mapa de bits: un bit por bloque. FAT: una entrada (de los bytes que digan) por bloque.
La carpeta de laura en un disco con bloques de 2 KiB (2048 B) y enlaces de 4 bytes. ¿Cuántos bloques ocupa cada archivo con cada asignación? En la indexada, cuenta también su bloque de índices.
| Archivo | Tamaño (B) |
|---|---|
| notas.txt | 3 000 |
| grupo.c | 6 144 |
| memoria.pdf | 9 000 |
| Archivo | Contigua | Enlazada | FAT | Indexada |
|---|---|---|---|---|
| notas.txt | ||||
| grupo.c | ||||
| memoria.pdf | ||||
| Total |
Solución
| Archivo | Contigua | Enlazada | FAT | Indexada |
|---|---|---|---|---|
| notas.txt | 2 | 2 | 2 | 3 |
| grupo.c | 3 | 4 | 3 | 4 |
| memoria.pdf | 5 | 5 | 5 | 6 |
| Total | 10 | 11 | 10 | 13 |
Bloques = tamaño / espacio útil, redondeando hacia arriba. En contigua, FAT e indexada el bloque entero es para datos (2048 B); en la enlazada cada bloque pierde 4 B con el número del siguiente: útiles 2044 B.
notas.txt: 3000 / 2048 = 1,46 → 2 en todas (y 2 + 1 = 3 en la indexada).
grupo.c es la trampa: 6144 = 3 × 2048 cabe justo en 3 bloques, pero en la enlazada 3 × 2044 = 6132 < 6144: le faltan 12 bytes y necesita un cuarto bloque.
memoria.pdf: 9000 / 2048 = 4,39 → 5 y 9000 / 2044 = 4,40 → 5; en la indexada, 5 + 1 = 6.
Totales: 10, 11, 10 y 13. La indexada gasta un bloque de índices por archivo, aunque el archivo sea pequeño.
memoria.pdf ocupa 5 bloques (del 0 al 4). Con el directorio ya en memoria, ¿cuántas lecturas de disco hacen falta para leer el bloque 0, el 3 y el 4 con cada asignación? Supón que la FAT está entera en RAM y que en la indexada el bloque de índices no está en caché.
| Asignación | Bloque 0 | Bloque 3 | Bloque 4 |
|---|---|---|---|
| Contigua | |||
| Enlazada | |||
| FAT (en RAM) | |||
| Indexada |
Solución
| Asignación | Bloque 0 | Bloque 3 | Bloque 4 |
|---|---|---|---|
| Contigua | 1 | 1 | 1 |
| Enlazada | 1 | 4 | 5 |
| FAT (en RAM) | 1 | 1 | 1 |
| Indexada | 2 | 2 | 2 |
Contigua: el bloque k está en inicio + k; se calcula sin leer nada más: 1 lectura siempre.
Enlazada: el número del bloque k solo se conoce leyendo el bloque k − 1, y así hacia atrás: k + 1 lecturas (1, 4 y 5).
FAT en RAM: los saltos de la cadena se hacen en la tabla, en memoria, y luego se lee solo el bloque de datos: 1 lectura.
Indexada: primero el bloque de índices (su entrada k es la dirección) y después el bloque de datos: 2 lecturas para cualquier k.
Un i-nodo con 10 punteros directos, uno indirecto simple, uno doble y uno triple. Bloques de 2 KiB y punteros de 4 bytes. Completa cuántos bloques de datos alcanza cada nivel y el tamaño acumulado en KiB; al final, el tamaño máximo en GiB (con dos decimales).
| Nivel | Bloques de datos | Acumulado (KiB) |
|---|---|---|
| 10 directos | ||
| Indirecto simple | ||
| Indirecto doble | ||
| Indirecto triple | ||
| Máximo (GiB) |
Solución
| Nivel | Bloques de datos | Acumulado (KiB) |
|---|---|---|
| 10 directos | 10 | 20 |
| Indirecto simple | 512 | 1044 |
| Indirecto doble | 262144 | 525332 |
| Indirecto triple | 134217728 | 268960788 |
| Máximo (GiB) | 256.5 |
Punteros por bloque de índices: 2048 / 4 = 512. Cada nivel multiplica por 512: 10, 512, 512² = 262 144 y 512³ = 134 217 728 bloques.
Acumulado (bloques × 2 KiB): 10 × 2 = 20 KiB; (10 + 512) × 2 = 1 044 KiB; (522 + 262 144) × 2 = 525 332 KiB; y con el triple, 134 480 394 bloques × 2 = 268 960 788 KiB.
En GiB: 268 960 788 / 1 048 576 = 256,5 GiB. Casi todo lo pone el triple: 512³ × 2 KiB = 2^27 × 2^11 B = 2^38 B = 256 GiB.
i-nodo con 12 punteros directos, simple, doble y triple; bloques de 4 KiB y punteros de 4 bytes. Para cada archivo: bloques de datos, bloques de índices que necesita, qué puntero lleva a su último bloque (directo, simple, doble o triple) y cuántas lecturas cuesta leer ese último bloque con el i-nodo en memoria.
| Archivo | Tamaño |
|---|---|
| apuntes.md | 30 KiB |
| dataset.csv | 2 MiB |
| grabacion.mp4 | 100 MiB |
| Archivo | Datos | Índices | Puntero | Lecturas |
|---|---|---|---|---|
| apuntes.md | ||||
| dataset.csv | ||||
| grabacion.mp4 |
Solución
| Archivo | Datos | Índices | Puntero | Lecturas |
|---|---|---|---|---|
| apuntes.md | 8 | 0 | directo | 1 |
| dataset.csv | 512 | 1 | simple | 2 |
| grabacion.mp4 | 25600 | 26 | doble | 3 |
Con 4 KiB y punteros de 4 B caben 1024 punteros por bloque. Los directos llegan a los bloques 0-11, el simple a los 12-1035 y el doble a los 1036-1 049 611.
apuntes.md: 30 / 4 = 7,5 → 8 bloques: todos con punteros directos, 0 bloques de índices; el último (bloque 7) se lee con 1 lectura.
dataset.csv: 2 MiB / 4 KiB = 512 bloques: 12 directos + 500 por el simple → 1 bloque de índices. El último (511) cae en el simple: índice + datos = 2 lecturas.
grabacion.mp4: 100 MiB / 4 KiB = 25 600 bloques: 12 directos + 1024 del simple + 24 564 del doble. El doble gasta su bloque de arriba más ⌈24 564 / 1024⌉ = 24 bloques debajo: 1 + 1 + 24 = 26 bloques de índices. El último bloque se alcanza por el doble: 3 lecturas.
Un disco de 256 GiB con bloques de 8 KiB. Calcula cuántos bloques tiene, cuánto ocupa su mapa de bits y su FAT (entradas de 4 bytes) y, en otro disco con bloques de 1 KiB y enlaces de 8 bytes, cuántos bloques ocupa un archivo de 3 MiB con asignación enlazada simple y con enlaces dobles más retroenlace (tres enlaces por bloque).
| Concepto | Valor |
|---|---|
| Bloques del disco | |
| Mapa de bits (MiB) | |
| FAT con entradas de 4 B (MiB) | |
| Archivo de 3 MiB, enlazada (bloques) | |
| Archivo de 3 MiB, enlaces dobles + retroenlace (bloques) |
Solución
| Concepto | Valor |
|---|---|
| Bloques del disco | 33554432 |
| Mapa de bits (MiB) | 4 |
| FAT con entradas de 4 B (MiB) | 128 |
| Archivo de 3 MiB, enlazada (bloques) | 3097 |
| Archivo de 3 MiB, enlaces dobles + retroenlace (bloques) | 3146 |
Todo en potencias de 2: 256 GiB = 2^38 B y 8 KiB = 2^13 B → 2^38 / 2^13 = 2^25 = 33 554 432 bloques.
Mapa de bits: un bit por bloque → 2^25 bits = 2^22 bytes = 4 MiB.
FAT: una entrada de 4 B (2^2) por bloque → 2^25 × 2^2 = 2^27 B = 128 MiB: 32 veces más que el mapa de bits.
Enlazada: útiles 1024 − 8 = 1016 B; 3 MiB = 3 145 728 B; 3 145 728 / 1016 = 3 096,19 → 3 097 bloques.
Con tres enlaces: útiles 1024 − 24 = 1000 B; 3 145 728 / 1000 = 3 145,728 → 3 146 bloques.
En la pregunta de grupo.c, poner 3 bloques en la enlazada. 6144 bytes son 3 bloques justos de 2048, pero cada bloque enlazado solo lleva 2044 bytes de datos: hacen falta 4.
Para saber qué puntero del i-nodo lleva al bloque k, ve restando: 12 directos, después N, después N². Con N = 1024: hasta el 11, directo; hasta el 1035, simple; hasta el 1 049 611, doble.
Preguntas de desarrollo
En el examen se escriben en párrafos, breves pero completos, sin enumerar: el tiempo corre. Para cada una, escribe tu respuesta en la caja y después mira la respuesta modelo y lo que se valora.
Compara la asignación contigua, la enlazada y la indexada: qué guarda el directorio en cada una, cómo es el acceso directo, qué pasa con la fragmentación y qué ocurre si se daña un bloque.
Solución
Respuesta modelo:
En la asignación contigua cada archivo ocupa bloques seguidos y el directorio solo guarda el bloque inicial y la longitud; el bloque k está en inicio + k, así que el acceso secuencial y el directo son muy rápidos, pero sufre fragmentación externa (puede no haber un hueco seguido aunque sobre espacio) y le cuesta que el archivo crezca.
En la enlazada los bloques pueden estar en cualquier sitio y cada uno guarda el número del siguiente; el directorio guarda el primero (y a veces el último). Desaparece la fragmentación externa, pero llegar al bloque k obliga a leer los k anteriores, cada bloque pierde unos bytes con el enlace y, si uno se daña, se pierde todo lo que viene detrás. La FAT es su variante con los enlaces reunidos en una tabla.
En la indexada todos los punteros del archivo están en un bloque de índices cuya dirección guarda el directorio; tampoco hay fragmentación externa y el acceso directo cuesta dos lecturas para cualquier bloque, a cambio de gastar un bloque extra por archivo (pesa en los pequeños) y de perderlo todo si se daña el bloque de índices.
Lo que se valora:
- Qué guarda el directorio en cada una
- Coste del acceso directo (1 / k + 1 / 2 lecturas)
- Fragmentación externa solo en la contigua
- Fragilidad de la enlazada y del bloque de índices
- Mención a la FAT o al i-nodo como variantes
Explica la diferencia entre un enlace duro y un enlace simbólico en Unix. ¿Qué pasa con cada uno si se borra el archivo original? Pon un ejemplo con ln.
Solución
Respuesta modelo:
Un enlace duro es otra entrada de directorio que apunta al mismo i-nodo que el original: no hay original y copia, sino dos nombres para el mismo archivo, y el i-nodo cuenta cuántos nombres tiene. Se crea con ln datos.csv copia.csv. Si se borra datos.csv, el contador baja de 2 a 1 y los datos siguen accesibles por copia.csv; solo se liberan cuando el contador llega a 0. Solo se puede hacer a archivos y dentro del mismo sistema de archivos.
Un enlace simbólico es un archivo pequeño que guarda la ruta del original, como un acceso directo de Windows. Se crea con ln -s datos.csv atajo.csv. Puede apuntar a directorios y a otros sistemas de archivos, pero si se borra el original queda colgando: apunta a una ruta que ya no existe.
Lo que se valora:
- Duro = mismo i-nodo y contador de enlaces
- Simbólico = guarda una ruta
- Qué pasa al borrar en cada caso
- Las dos órdenes (ln y ln -s)
- Restricciones del duro (archivos y mismo sistema de archivos)
Explica cómo es el i-nodo de Unix y por qué usa punteros indirectos. Calcula el tamaño máximo de un archivo con 12 punteros directos, uno simple, uno doble y uno triple, bloques de 4 KiB y punteros de 8 bytes.
Solución
Respuesta modelo:
El i-nodo guarda los atributos del archivo (modo, propietario, tamaño, fechas, contador de enlaces) y los punteros a sus bloques. Un único bloque de índices limitaría el tamaño del archivo a los punteros que caben en un bloque, así que Unix usa varios niveles: 12 punteros directos llevan a bloques de datos (los archivos pequeños no gastan bloques de índices), el indirecto simple lleva a un bloque de punteros, el doble a un bloque de bloques de punteros y el triple añade un nivel más.
Con bloques de 4096 bytes y punteros de 8 caben 4096 / 8 = 512 punteros por bloque. El máximo es (12 + 512 + 512² + 512³) bloques × 4 KiB = 48 KiB + 2 MiB + 1 GiB + 512 GiB, unos 513 GiB. Casi todo lo aporta el triple: 512³ × 4 KiB = 2^27 × 2^12 B = 2^39 B = 512 GiB.
Lo que se valora:
- Qué guarda el i-nodo
- Por qué no basta un bloque de índices
- Directos para archivos pequeños
- Punteros por bloque = bloque / puntero (512)
- Suma de los cuatro niveles (unos 513 GiB)
¿Cómo sabe el sistema de archivos qué bloques están libres? Explica el mapa de bits, la lista enlazada y la FAT, y calcula cuánto ocupa el mapa de bits de un disco de 64 GiB con bloques de 4 KiB.
Solución
Respuesta modelo:
Con un mapa de bits se reserva una zona fija del disco con un bit por bloque que dice si está libre u ocupado; es compacto y permite buscar huecos seguidos, y es el método del Unix tradicional.
Con una lista enlazada, el SO solo guarda el número del primer bloque libre y cada libre guarda el del siguiente; no gasta espacio extra, pero recorrerla obliga a leer bloques. Una variante usa el primer libre como bloque de índices con los números de los demás.
En los sistemas FAT no hace falta otra estructura: la entrada de un bloque libre en la FAT tiene un valor que lo marca como libre.
Cálculo: 64 GiB / 4 KiB = 2^36 / 2^12 = 2^24 bloques, así que el mapa tiene 2^24 bits = 2^21 bytes = 2 MiB.
Lo que se valora:
- Mapa de bits (un bit por bloque)
- Lista enlazada (puntero al primer libre)
- FAT (la propia tabla)
- Cálculo con potencias de 2
- Resultado de 2 MiB
En las de comparar (asignaciones, enlaces, estructuras de libres), la nota sale de los ejes de comparación: qué guarda cada una, cuánto cuesta el acceso, qué pasa si algo falla. Una lista de definiciones sueltas, sin comparar, se queda a medias.
Todo el tema en un dibujo
Antes del chuletario, el tema entero de un vistazo: arriba, lo que ves como usuario (6.1); abajo, cómo se guarda (6.2).
Si sabes explicar cada caja con un ejemplo de la carpeta de la práctica (practica.c, Makefile, datos.csv, informe.pdf), tienes el tema.
Chuletario: Sistemas de archivos
Lo esencial en 30 segundos
- Archivo: objeto con nombre que guarda información persistente. Usuario → estructura duradera; API → bytes; núcleo → bloques.
- Atributos: nombre, tipo, localización, tamaño, protección, fechas, versión.
- Operaciones: crear, escribir, leer, reposicionar, borrar, truncar (solo el contenido). Abrir copia la información de control a RAM; el descriptor es un índice de la tabla de abiertos.
- Acceso: secuencial (cinta), directo (
lseek), indexado (clave). - Directorios: nivel único → dos niveles → árbol → grafo acíclico → grafo general.
- Asignación: contigua, enlazada, FAT, indexada; Unix = indexada multinivel (i-nodo).
Directorios y enlaces
| Quiero… | Cómo | Resultado |
|---|---|---|
| Otro nombre para el mismo archivo | ln datos.csv copia.csv | Enlace duro: mismo i-nodo, contador 2 |
| Un atajo (también a directorios) | ln -s datos.csv atajo.csv | Enlace simbólico: guarda la ruta |
| Saber qué pasa al borrar el original | rm datos.csv | Duro: siguen los datos · Simbólico: roto |
| Ruta absoluta | desde la / | /home/sergio/ic2/practica/informe.pdf |
Ruta relativa desde /home/sergio/ic2 | sin la parte común | practica/informe.pdf |
| Usar un pendrive | montarlo | aparece bajo el punto de montaje (/media/usb) |
Asignación de un vistazo
| Asignación | El directorio guarda | Lecturas para el bloque k | Fragmentación externa | Punto débil |
|---|---|---|---|---|
| Contigua | inicio + longitud | 1 | Sí | crecer, huecos |
| Enlazada | primer (y último) bloque | k + 1 | No | acceso directo, bloque dañado |
| FAT | primer bloque | 1 (FAT en RAM) | No | bloque de la FAT dañado (hay copias) |
| Indexada | bloque de índices | 2 | No | bloque extra, bloque de índices dañado |
Plantillas de cálculo (con resultados)
| Quiero… | Cuenta | Ejemplo |
|---|---|---|
| Bloques con enlazada | ⌈tamaño / (bloque − enlaces)⌉ | 2 MiB, 1 KiB, enlace 4 B → ⌈2 097 152 / 1020⌉ = 2057 |
| Bloques con indexada | ⌈tamaño / bloque⌉ + 1 | 410 B con 4 KiB → 1 + 1 = 2 |
| Máximo con un solo bloque de índices | (bloque / puntero) × bloque | 1 KiB y 2 B → 512 × 1 KiB = 512 KiB |
| Máximo con un i-nodo | (12 + N + N² + N³) × bloque | 4 KiB y 4 B → N = 1024 → unos 4 TiB |
| Mapa de bits | bloques / 8 bytes | 2 TiB con 32 KiB → 2^26 bits = 8 MiB |
| FAT | bloques × bytes por entrada | 2^26 × 4 B = 256 MiB |
Síntoma / Causa probable
| Síntoma | Causa probable |
|---|---|
| Te sale un bloque menos que la solución | Dividiste sin restar los enlaces o redondeaste hacia abajo |
| La indexada te da igual que la FAT | Olvidaste el bloque de índices |
| El tamaño del mapa de bits te sale 8 veces grande | Contaste bytes en lugar de bits por bloque |
| El máximo del i-nodo te sale enorme o diminuto | Mezclaste KiB y bytes: pásalo todo a potencias de 2 |
| Dices que el árbol permite compartir | Eso lo añade el grafo acíclico (enlaces) |
| Pones «enlazada» donde un bloque dañado afecta a muchos archivos | Ese es el riesgo de la FAT |
Antes de entregar, pregúntate
- ¿He restado los bytes de enlace antes de dividir y he redondeado hacia arriba?
- ¿He contado los bloques de índices (el de la indexada, los del simple y del doble)?
- ¿He pasado todo a potencias de 2 antes de hacer cuentas de bits y bytes?
- En los enlaces, ¿he dicho si guarda una ruta o comparte el i-nodo, y qué pasa al borrar el original?
Con este tema se termina la teoría de IC2: once temas de redes y sistemas operativos. Lo siguiente será un simulacro de examen con preguntas al azar de todos los temas, nota con penalización y repaso de errores. Mientras tanto, repasa los temas que peor lleves y vuelve a este test dentro de unos días: si lo aciertas sin mirar, el T6 está listo.
Sigue aprendiendoTodos los artículos de Sistemas operativos¿Te ha servido este artículo? Así puedes apoyar SergioLearns →
¿Listo para el examen?Simulacro del examen de teoría de IC2 — primer parcial, segundo parcial o convocatoria, con tu nota real y el repaso de cada fallo (como si estuvieras en el aula)


