Sistemas de Archivos

Clase 1: archivos, directorios y operaciones básicas

Sistemas Operativos

¿Qué problema queremos resolver?

Un proceso utiliza información mientras se está ejecutando.

Pero esa información puede necesitarse:

  • después de que el proceso termine;
  • cuando el programa vuelva a ejecutarse;
  • por otro proceso;
  • después de reiniciar la computadora;
  • durante mucho tiempo.

Una situación concreta

Un sistema de reservas necesita conservar:

  • clientes;
  • vuelos;
  • reservas;
  • pagos;
  • historial de operaciones.

La información debe estar disponible:

  • después de cerrar el programa;
  • después de reiniciar la computadora;
  • para varios procesos o usuarios.

Tres requisitos del almacenamiento persistente

La información debe:

  1. sobrevivir a la terminación del proceso;
  2. poder almacenar grandes cantidades de datos;
  3. ser accesible por varios procesos, de manera controlada.

El archivo como abstracción

Un archivo oculta detalles como:

  • en qué dispositivo se encuentra;
  • en qué bloques están sus datos;
  • cómo se organizan físicamente;
  • cómo se recupera después de una falla.

Para un programa, el archivo aparece como una colección persistente de bytes.

¿Qué contiene un archivo?

Un archivo tiene:

  • datos;
  • nombre;
  • tamaño;
  • fecha de creación
    o modificación;
  • propietario;
  • permisos;
  • información necesaria para localizar sus datos.

Los datos se interpretan según el programa que los utiliza.

ls -li archivo.txt
stat archivo.txt
file archivo.txt

Texto y binario

Un archivo puede contener:

  • texto legible por personas;
  • datos binarios;
  • imágenes;
  • audio;
  • programas ejecutables;
  • estructuras propias de
    una aplicación

La extensión ayuda a las personas y a los programas, pero no siempre define el contenido real.

# Inspeccionar archivo texto
ls -li /etc/passwd
file /etc/passwd
cat /etc/passwd
# Inspeccionar archivo binario
ls -li /bin/ls
file /bin/ls
xxd -l 32 /bin/ls

Abrir no es lo mismo que crear

Abrir un archivo significa establecer una relación entre:

  • un proceso;
  • un nombre de archivo;
  • una estructura interna del sistema operativo.

Crear un archivo implica que ese archivo todavía no existía, o que se solicita crear una nueva entrada.

Lectura y escritura

Una operación de lectura:

  • obtiene bytes del archivo;
  • los copia hacia la memoria del proceso;
  • puede devolver menos bytes de los solicitados.

Una operación de escritura:

  • toma datos desde la memoria del proceso;
  • los copia hacia el archivo;
  • puede aumentar el tamaño del archivo.

Procesar un archivo por bloques

abrir archivo

mientras queden datos:
    leer un bloque
    procesar el bloque

cerrar archivo

Preguntas:

  • ¿por qué no leer siempre el archivo completo?
  • ¿qué tamaño debería tener el bloque?
  • ¿cómo se detecta el final del archivo?
with open("texto.txt", "rb") as archivo:
    while True:
        bloque = archivo.read(4096)

        if bloque == b"":
            break

        print(f"Se recibieron {len(bloque)} bytes")

Actividad: copiar un archivo

Un archivo tiene 10 500 bytes.

El programa utiliza un búfer de 4096 bytes.

Completar:

Lectura Bytes solicitados Bytes recibidos
1 4096 ?
2 4096 ?
3 4096 ?

Preguntas adicionales:

  • ¿cuántas lecturas son necesarias?
  • ¿qué sucede en la última lectura?
  • ¿cómo sabe el programa que llegó al final?

El archivo abierto

Un proceso puede abrir un archivo y obtener una referencia para utilizarlo:

Proceso
   │
   └── referencia a archivo abierto

Esa referencia permite realizar operaciones como:

  • leer;
  • escribir;
  • consultar la posición actual;
  • cambiar la posición;
  • cerrar.

Organización de archivos

Un directorio permite:

  • agrupar archivos;
  • asignar nombres;
  • organizar una jerarquía;
  • localizar archivos;
  • aplicar permisos;
  • compartir información.

Una estructura habitual es un árbol.

Rutas absolutas y relativas

Una ruta absoluta comienza en la raíz:

/home/ana/documentos/informe.txt

Una ruta relativa se interpreta desde el directorio actual:

documentos/informe.txt

Símbolos frecuentes:

.    directorio actual
..   directorio padre

Actividad: resolver rutas

Suponga que el directorio actual es:

pwd
/home/ana

Escriba una ruta para:

  1. acceder a informe.txt;
  2. acceder a la carpeta imagenes;
  3. llegar a /tmp;
  4. volver al directorio padre;
  5. identificar el archivo usando una ruta absoluta.

¿Qué ocurre cuando dos procesos usan el mismo archivo?

Ejemplo:

Proceso A: lee el archivo
Proceso B: agrega información
Proceso A: vuelve a leer

Preguntas:

  • ¿qué ve cada proceso?
  • ¿en qué posición está cada proceso?
  • ¿qué ocurre si ambos escriben a la vez?
  • ¿puede perderse información?
  • ¿qué mecanismos podrían ser necesarios?

Ideas principales

Un sistema de archivos permite:

  • conservar información;
  • organizar archivos en directorios;
  • acceder mediante nombres y rutas;
  • leer y escribir de forma controlada;
  • compartir información entre procesos;
  • proteger los datos mediante permisos.

Ahora podemos....

responder individualmente:

  1. ¿Por qué necesitamos archivos si ya existe la memoria?
  2. ¿Qué diferencia hay entre un archivo y un descriptor?
  3. ¿Qué diferencia hay entre una ruta absoluta y una relativa?
  4. Mencionar tres operaciones sobre archivos.
  5. ¿Qué problema puede aparecer si dos procesos escriben simultáneamente?

Tarea en Webasignatura

Para la clase que viene:

  1. leer las secciones introductorias del capítulo 4 de Tanenbaum;
  2. responder preguntas breves sobre archivos y directorios;
  3. resolver ejercicios de rutas absolutas y relativas;
  4. explicar con sus palabras qué significa que un archivo sea persistente.

La tarea está disponible en Webasignatura.

Próxima clase

lo que se viene:

  • veremos cómo se asignan bloques a los archivos;
  • compararemos diferentes estrategias de implementación;
  • estudiaremos directorios, metadatos y espacio libre;
  • analizaremos qué ocurre detrás de la abstracción archivo.

Sistemas de archivos

By Rodolfo Pilas

Sistemas de archivos

  • 3