Sesión 9
Almacenamiento Primario y Secundario
Navegación: ← → F pantalla completa
Unidad 2 - Sistemas Operativos
Navegación: ← → F pantalla completa
Unidad 2 - Sistemas Operativos
En la Unidad 1 analizamos cómo la CPU ejecuta procesos (FCFS, SJF, RR). Sin embargo, omitimos una pregunta crítica: ¿De dónde saca la CPU las instrucciones y los datos?
El Rol del SO: Orquestar el movimiento de datos entre medios lentos/masivos y medios rápidos/limitados de manera transparente para el usuario y el programador.
Los sistemas organizan el almacenamiento en una pirámide de compromiso entre Velocidad vs. Capacidad y Costo:
Principio de Localidad:
Escale los tiempos de acceso a tiempos comprensibles para un humano (asumiendo 1 ciclo de CPU = 1 segundo):
| Medio de almacenamiento | Tiempo real aprox. | A escala humana |
|---|---|---|
| Registro de CPU | 0.3 ns | 1 segundo |
| Caché L1 | 1 ns | 3 segundos |
| Memoria RAM | 100 ns | 3 minutos |
| Disco SSD (NVMe) | 20,000 ns | 14 horas |
| Disco Mecánico (HDD) | 10,000,000 ns | ¡10 Meses! |
Reflexión: Cuando un proceso necesita un dato del disco (un "Page Fault"), la CPU tiene que esperar una eternidad. Por eso el proceso pasa a Waiting.
La RAM es una secuencia enorme de bytes, cada uno con una dirección física única. El procesador pone esta dirección en el bus para leer o escribir.
Limitaciones reales:
Problema de multiprogramación:
El SO, con ayuda de la unidad MMU del hardware, crea una abstracción llamada Memoria Virtual.
Para gestionar la ilusión sin fragmentar, el SO mueve bloques fijos enteros:
¿Qué pasa si el programa lee la "Página 2" (enviada al disco para ahorrar espacio)?
Thrashing (Hiperpaginación): Ocurre cuando hay tan poca RAM libre que el sistema pasa más tiempo intercambiando páginas con el disco que ejecutando código. El PC "se congela".
Para conservar código y datos tras apagar el equipo, necesitamos Almacenamiento Secundario.
Sin embargo, el hardware del disco (HDD/SSD) solo entiende de Bloques físicos y arreglos de bytes. Trabajar enviando bytes al "Bloque físico 4,091,822" es imposible para un desarrollador.
Solución del SO: Crear otra abstracción masiva llamada Sistema de Archivos (File System). Convierte bloques en entidades lógicas llamadas Archivos y Directorios.
Un archivo es una unidad lógica de almacenamiento nombrada. El Sistema de Archivos lo divide internamente en dos estructuras críticas:
1. El Contenido (Payload):
La secuencia de bytes real (el texto de tu código C#, los pixeles de tu .png). Puede estar fragmentado por el disco duro.
2. Los Metadatos (Inodo/FCB):
Estructura gestionada por el SO que almacena la "receta" de cómo reconstruir y proteger el contenido.
Esta "receta" administrada por el Kernel (ej. ext4, NTFS) incluye:
Un proceso no toca el disco, le pide al SO mediante Llamadas al Sistema:
Tener 2 millones de archivos en una sola lista plana haría la búsqueda (Open) insoportablemente lenta. Los directorios resuelven esto agrupando lógicamente.
Verdad técnica: Un directorio es solo un Archivo Especial. Si abres el código binario de una "carpeta", solo verás una tabla de texto con dos columnas: [Nombre de archivo] -> [Puntero al Inodo].
Ruta Absoluta:
Inicia desde la raíz del disco. Es inmutable.
Ruta Relativa:
Inicia desde el Directorio de Trabajo Actual (CWD) en RAM. Portable.
Variables de Directorio Especiales:
. (Un punto) = Directorio actual.
.. (Dos puntos) = Padre jerárquico del directorio actual.
Analicemos un error crítico de código al procesar bases de datos masivas (ej. CSV de 4GB):
Fallo de diseño: Forzamos a la MMU a encontrar 4GB de páginas lógicas contiguas en RAM para un proceso que tal vez solo necesita leer línea por línea.
La forma correcta de leer sin destruir la memoria virtual es usar Flujos (Streams):
El Sistema de Archivos lee un bloque del disco a la RAM, el programa lo procesa, y el SO reutiliza ese mismo espacio de RAM para cargar el siguiente. Impacto RAM: Casi Cero.
Para la E2, el Gestor de Procesos no usará datos quemados. Diseñaremos una estructura lógica que el SO entienda:
Árbol de Directorios:
Interacciones del Proceso:
../data/procesos.csv (Modo Read).../logs/sistema.log.Si abres el archivo log en modo Escritura ("w"), el SO borra el archivo cada vez que inicia el programa. Debemos usar Modo Anexar (Append/"a").
Cuando el código hace f.write("P1 finalizado"), ¿El dato llega inmediatamente al disco magnético?
NO. Escribir cada letra físicamente mataría el rendimiento. El Kernel "miente": Guarda el texto en un segmento de RAM oculto (Buffer del FS) y le dice a tu programa "Ya lo guardé".
f.flush() para forzar al disco.| Dominio | Propósito Fundamental en el SO |
|---|---|
| Memoria Virtual (MMU) | Aislar procesos y evitar colapsos por falta de RAM física mediante Traducción y Paginación (Swap). |
| Archivos (Files) | Enmascarar estructuras físicas crudas como bloques lógicos con Datos + Atributos. |
| Directorios y Rutas | Árbol relacional (Archivo Especial) para búsquedas. Exige uso de Rutas Relativas. |
| Flujos (Streams) | Puente de amortiguación entre RAM y Discos para no colapsar la memoria al leer datos pesados. |