Procesos e hilos
Qué es realmente un proceso, en qué se diferencia de un hilo y qué ocurre cuando la CPU cambia de uno a otro.
Un programa en disco son solo bytes. Un proceso es ese programa en ejecución: su propia memoria, sus propios descriptores de archivo, su lugar en la cola de la CPU. Dos copias del mismo programa son dos procesos distintos que comparten el código por casualidad.
Un proceso rara vez está simplemente «ejecutándose». Está listo (esperando CPU), en ejecución (ahora mismo en un núcleo) o bloqueado (esperando E/S o un cerrojo). La mayor parte de su vida la pasa listo o bloqueado, no ejecutándose.
El sistema operativo sigue cada proceso con un bloque de control de proceso: su identificador, su estado, dónde empieza su memoria, qué archivos tiene abiertos y los registros de CPU guardados. Para el núcleo, ese bloque es el proceso.
/* PCB — то, что ОС помнит о процессе, пока он не на CPU. */
struct pcb {
int pid; /* кто это */
int state; /* READY / RUNNING / WAITING */
void *page_table; /* где лежит его память */
struct regs saved; /* PC, SP — где он остановился */
int open_files[16]; /* что он открыл */
};Práctica
Ordena los estados del proceso tal como suele recorrerlos un programa.
Pistas
- Un proceso no empieza a ejecutarse justo después de crearse.
- Esperar una lectura de disco no es lo mismo que esperar la CPU.
12 XP
Dos hilos del mismo proceso incrementan el mismo contador sin cerrojo. ¿Cuál es el resultado más probable?
Pistas
- Piensa qué ocurre entre leer el valor y volver a escribirlo.
- El planificador puede cambiar de hilo entre dos instrucciones cualesquiera.
12 XP
Explica por qué un cambio de contexto es sobrecarga y cuándo el sistema operativo se ve obligado a pagarla.
Pistas
- Pregúntate qué trabajo útil se hace durante el propio cambio.
- Una llamada de E/S bloqueante no puede retener la CPU.
15 XP