3. Estados de un proceso¶
Desde que se crea hasta que termina, un proceso pasa por distintos estados. El sistema operativo apunta el estado actual en el PCB y lo usa para decidir qué hacer con cada proceso.
3.1 Los cinco estados¶
| Estado | Qué significa | Ejemplo |
|---|---|---|
| Nuevo | El SO está creando el proceso: reserva memoria y crea su PCB. | Acabas de hacer doble clic en el icono. |
| Listo | Está preparado para ejecutarse; solo le falta que le den la CPU. Espera en la cola de listos. | Hay 200 procesos y solo 8 núcleos: la mayoría están listos, esperando turno. |
| En ejecución | Está usando un núcleo de la CPU. | El navegador está procesando una página. |
| Bloqueado (o en espera) | No puede continuar hasta que ocurra algo: que termine una lectura de disco, que llegue un dato por la red o que el usuario pulse una tecla. | Un programa espera en Scanner.nextLine() a que escribas. |
| Terminado | Ha acabado (bien o con error). El SO libera sus recursos y guarda su código de salida hasta que el padre lo recoja. | El main de Java ha llegado al final. |
3.2 Las transiciones¶
- Nuevo → Listo (admitir). El SO termina de crear el proceso y lo pone en la cola de listos.
- Listo → Ejecución. El planificador elige ese proceso y le asigna un núcleo.
- Ejecución → Listo. Se le acaba su turno (su quantum) o llega un proceso más prioritario. Vuelve a la cola de listos aunque no haya terminado.
- Ejecución → Bloqueado. El proceso pide algo lento mediante una llamada al sistema: leer un fichero, recibir datos de la red, esperar una tecla. Como no puede seguir, deja la CPU libre para otro.
- Bloqueado → Listo. Llega lo que esperaba. El hardware avisa al SO con una interrupción y el proceso vuelve a la cola de listos.
- Ejecución → Terminado. El proceso acaba o se produce un error grave.
Dos transiciones que NO existen
- Bloqueado → Ejecución. Un proceso bloqueado que recibe lo que esperaba pasa primero a Listo y espera su turno como los demás.
- Listo → Bloqueado. Solo puede bloquearse un proceso que se está ejecutando, porque bloquearse es consecuencia de pedir algo.
¿Cuántos procesos puede haber en cada estado?
En un ordenador con 8 núcleos, como máximo 8 procesos pueden estar en ejecución a la vez. En Listo y en Bloqueado puede haber todos los que quepan en memoria.
3.3 Las colas del sistema operativo¶
El sistema operativo organiza los procesos en colas:
| Cola | Qué procesos contiene |
|---|---|
| Cola de procesos | Todos los procesos del sistema. |
| Cola de listos | Los procesos en estado Listo, esperando CPU. El planificador elige de aquí. |
| Colas de dispositivo | Una por dispositivo (disco, red, teclado…), con los procesos bloqueados esperando ese dispositivo. |
3.4 Procesos limitados por CPU y por E/S¶
Según en qué pasen la mayor parte del tiempo, los procesos se clasifican en:
- Limitados por CPU (CPU-bound): pasan casi todo el tiempo calculando. Ejemplos: comprimir un vídeo, entrenar un modelo, calcular números primos. Van más rápido con un procesador más rápido o repartiendo el trabajo entre varios núcleos.
- Limitados por E/S (I/O-bound): pasan casi todo el tiempo bloqueados, esperando al disco, a la red o al usuario. Ejemplos: un editor de texto, un navegador descargando una página, un servidor esperando peticiones. Van más rápido con un disco o una red más rápidos.
Una máquina recreativa con un solo núcleo
Un videojuego antiguo repite tres tareas: leer el mando (E/S), calcular el mundo del juego (CPU) y dibujar la pantalla (E/S). Mientras el juego espera a que el jugador pulse un botón, la tarea de leer el mando está bloqueada y el núcleo puede dedicarse a calcular. Mezclar tareas de CPU y de E/S aprovecha mucho mejor el procesador.
3.5 ¿Y si se acaba la memoria RAM?¶
Si hay más procesos de los que caben en la RAM, el sistema operativo usa la memoria virtual: mueve al disco las partes de la memoria de los procesos que se usan poco (zona de intercambio o swap; en Windows, el archivo de paginación) y las vuelve a traer cuando hacen falta.
- Ventaja: se pueden ejecutar más programas de los que caben en la RAM.
- Inconveniente: el disco es miles de veces más lento que la RAM. Si se abusa, el sistema se pasa el tiempo moviendo datos y todo va muy lento. Esta situación se llama hiperpaginación (thrashing).
3.6 Ver el estado de un proceso¶
En Linux, la columna STAT de ps muestra el estado con una letra:
| Letra | Estado |
|---|---|
R |
En ejecución o listo (running/runnable) |
S |
Bloqueado, esperando un suceso (sleeping) |
D |
Bloqueado esperando E/S, no se puede interrumpir |
T |
Detenido |
Z |
Zombi |
En Java, Process.isAlive() indica si el proceso hijo sigue vivo (en cualquier estado salvo terminado).
Preguntas de repaso¶
- ¿Qué diferencia hay entre un proceso listo y uno bloqueado? ¿Cuál de los dos podría usar la CPU si se la dieran?
- ¿Por qué un proceso bloqueado no pasa directamente a ejecución cuando llega lo que esperaba?
- Un programa Java está parado en
Scanner.nextLine(). ¿En qué estado está? ¿Qué transición se produce cuando pulsas Intro? - Clasifica como limitado por CPU o por E/S: un compresor ZIP, un cliente de correo, un servidor de bases de datos, un programa que calcula decimales de π.
- ¿Qué es la hiperpaginación y por qué ralentiza el sistema?