Un programa en marcha
Un programa guardado no hace nada. Al ejecutarlo se vuelve un proceso con memoria, estado y turno de CPU. Al terminar sabrás seguirlo por todas sus colas.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
Un programa guardado no hace nada
Un programa es un archivo: una entidad pasiva guardada en el disco. Un proceso es ese programa en ejecución: tiene memoria asignada, archivos abiertos, dispositivos de entrada y salida, y un contador de programa que indica cuál es la siguiente instrucción.
Por eso dos procesos pueden ejecutar el mismo programa —dos terminales abiertas, dos pestañas del mismo editor— y aun así ser distintos: cada uno tiene su propia memoria. Incluso los sistemas más simples necesitan procesos, porque un núcleo de CPU solo ejecuta una cosa a la vez y alguien tiene que repartir el turno.
En memoria, un proceso se organiza en cuatro secciones:
- Texto: el código ejecutable.
- Datos: las variables globales.
- Heap: la memoria que se pide durante la ejecución (por ejemplo, con
malloconew). Crece hacia arriba. - Pila (stack): lo temporal de cada llamada a función: parámetros, dirección de retorno y variables locales. Crece hacia abajo, al encuentro del heap.
Ejecuta el programa paso a paso y mira qué sección de la memoria cambia con cada línea.
Cinco estados
- Nuevo: el proceso se está creando.
- Listo: tiene todo para ejecutarse; solo le falta un núcleo de CPU.
- Ejecutando: sus instrucciones están corriendo en un núcleo.
- Esperando: aguarda un evento, como terminar una lectura de disco o recibir una señal. Aunque le dieran la CPU, no podría avanzar.
- Terminado: acabó su ejecución.
La diferencia clave es entre listo y esperando: el listo espera a la CPU; el que espera, a algo externo. Por eso de esperando nunca se pasa directo a ejecutando: primero vuelve a la cola de listos.
Mueve el proceso con los eventos. Solo algunas transiciones son posibles: descubre cuáles.
El bloque de control de proceso (PCB)
El sistema operativo representa cada proceso con un PCB (Process Control Block): la ficha con todo lo necesario para detenerlo y retomarlo justo donde iba.
- Estado del proceso.
- Contador de programa: la dirección de la siguiente instrucción.
- Registros de la CPU: acumuladores, índices, punteros.
- Planificación: prioridad y parámetros del planificador.
- Memoria: registros base y límite, tablas de páginas o segmentos.
- Contabilidad: tiempo de CPU usado, límites, número de proceso.
- Estado de E/S: dispositivos y archivos abiertos.
En Linux, el PCB es la estructura task_struct, y el kernel mantiene todas en una lista doblemente enlazada. Desde el espacio de usuario no se puede tocar, pero /proc/<PID>/status muestra buena parte de su contenido.
Colas y cambio de contexto
El objetivo de la multiprogramación es que siempre haya algún proceso usando la CPU. El planificador de procesos elige, de la cola de listos, quién ocupa un núcleo libre. Quien pide E/S pasa a una cola de espera y, al terminar la E/S, regresa a la de listos. La cantidad de procesos en memoria se llama grado de multiprogramación.
Los procesos limitados por E/S usan la CPU poco tiempo antes de esperar; los limitados por CPU la usarían todo el tiempo, así que el sistema no los deja acapararla. Si la memoria no alcanza, puede sacar temporalmente un proceso al disco: eso es el swapping.
Cambiar de proceso en un núcleo es un cambio de contexto: guardar el PCB del que sale y cargar el del que entra. Ese tiempo es tiempo muerto, sin trabajo útil, y depende mucho del hardware.
05 · PrediceAntes de leer la respuesta
Escribe
ls para ver los programas. Puedes lanzar varios antes de avanzar el reloj, y usar ⏯ Automático para verlo correr solo.Tu turno: una terminal y una CPU
Un sistema operativo en miniatura con una CPU y una terminal. Lanza programas, avanza el reloj y mira cómo cada proceso pasa por las colas. A la derecha está la tabla de procesos con lo más importante de cada PCB.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.