Procesos e Hilos: Las Unidades de Trabajo
Para entender cómo un SO maneja múltiples tareas, es crucial diferenciar entre un proceso y un hilo. Aunque relacionados, cumplen funciones muy distintas.
Analogía: El Restaurante
Piensa en un Proceso como si fuera un restaurante completo. Tiene sus propios recursos: una cocina (espacio de memoria), ingredientes (datos), cocineros (archivos abiertos) y una dirección postal (identificador de proceso). Es una entidad independiente y aislada de otros restaurantes.
Un Hilo (Thread) es un camarero dentro de ese restaurante. Un restaurante puede tener varios camareros trabajando a la vez. Todos los camareros (hilos) comparten los mismos recursos del restaurante (la cocina, los ingredientes), lo que les permite colaborar eficientemente para atender a muchos clientes. Cada camarero, sin embargo, sigue una secuencia de tareas independiente (atender una mesa, tomar una orden, llevar un plato).
Crear un nuevo hilo es mucho más "barato" (rápido y con menos consumo de recursos) que crear un nuevo proceso, ya que no es necesario duplicar todos los recursos; simplemente se crea una nueva secuencia de ejecución dentro del entorno ya existente.
El Planificador: El Cerebro de la CPU
El planificador (scheduler) es el director de orquesta del SO. Su trabajo es decidir, de entre todos los hilos que están listos para ejecutarse, cuál de ellos usará la CPU en cada instante.
Algoritmos de Planificación Populares
Round Robin (Turno Rotatorio): Es el algoritmo más común en sistemas de escritorio. El planificador le da a cada hilo una pequeña porción de tiempo de CPU (un "quantum"). Si el hilo no termina en ese tiempo, se le mueve al final de la cola de listos y se le da la CPU al siguiente. Es como una mesa redonda donde cada uno habla por un minuto. Garantiza que el sistema se sienta responsivo, ya que ningún proceso puede monopolizar la CPU.
FIFO/FCFS (First-In, First-Out): El primero que llega, es el primero en ser atendido. Es simple y justo, como una fila en el supermercado. Sin embargo, puede ser ineficiente si un proceso muy largo llega primero, haciendo que todos los demás (incluso los muy cortos) tengan que esperar mucho tiempo (el "efecto convoy").
La Gestión de Memoria: El Tetris de la RAM
El SO actúa como un administrador de propiedades. Su tarea es asignar "parcelas" de memoria a los procesos que las solicitan, asegurándose de que ningún proceso invada la parcela de otro.
- Relocalización: El programador no sabe en qué parte de la RAM física se cargará su programa. El SO debe poder cargar el programa en cualquier lugar y que funcione correctamente.
- Protección: El SO utiliza hardware (la MMU - Unidad de Gestión de Memoria) para establecer límites. Si un proceso intenta acceder a memoria fuera de sus límites asignados, la MMU genera una interrupción y el SO termina el proceso infractor. Es el famoso error de "Violación de segmento" o "Fallo de protección general".
Memoria Virtual: El Arte del Engaño
La memoria virtual es uno de los conceptos más ingeniosos de los SO. Crea la ilusión de que cada proceso tiene a su disposición un enorme espacio de memoria contiguo, cuando en realidad la memoria física (RAM) es limitada y está fragmentada.
Paginación e Intercambio (Swapping)
El SO divide la memoria virtual de un proceso en bloques de tamaño fijo llamados páginas, y la memoria física en bloques del mismo tamaño llamados marcos. El SO mantiene una "tabla de páginas" para cada proceso, que traduce las direcciones virtuales a direcciones físicas.
Cuando la RAM se llena, el SO busca las páginas que no se han usado recientemente y las guarda en el disco duro en un área especial (el archivo de intercambio o swap). Esto libera marcos en la RAM para las páginas que se necesitan ahora. Si un proceso necesita una página que está en el disco (un "fallo de página"), el SO la trae de vuelta a la RAM, posiblemente intercambiándola por otra. Este proceso es la clave de la memoria virtual, pero también es la razón por la que el sistema se vuelve lento cuando se queda sin RAM, ya que acceder al disco es miles de veces más lento.
Preguntas para el Debate
- Si los hilos son tan eficientes, ¿por qué seguimos usando procesos? ¿Qué ventaja clave ofrece el aislamiento de un proceso?
- Un navegador web moderno (como Chrome o Firefox) abre cada pestaña en un proceso separado. ¿Por qué crees que hacen esto en lugar de usar un solo proceso con muchos hilos?
- ¿Qué pasaría si un sistema operativo no tuviera memoria virtual? ¿Cómo cambiaría nuestra forma de usar las computadoras?
Desafío: Desbloquea las Respuestas
¿Cómo se llama la falta que ocurre cuando un proceso intenta acceder a una página de memoria que actualmente reside en el disco duro en lugar de en la RAM?