1. Concepto: Programa vs. Proceso
Para definir lo que es un proceso, hay que establecer la diferencia con el concepto de programa:
- Programa: Es una entidad pasiva compuesta únicamente por un código y unos datos. Es un listado fijo de instrucciones almacenado en disco.
- Proceso: Es una entidad activa, es el "programa" en ejecución. Incluye el código, los datos, el contador de programa, los registros de la CPU y los recursos asignados.
- Idle (ocioso): Un procesador de computadora se describe como "idle" cuando no está siendo utilizado por ningún programa.
Cuando los programas hacen uso del tiempo Idle de la CPU, significa que estos se ejecutan en baja prioridad, de esta manera no impactan sobre otros programas que se ejecutan en prioridad normal.
La mayoría de los sistemas operativos actuales muestran la tarea idle (en Windows es el Proceso inactivo del sistema; en Linux suele ser Id zero), que es una tarea o proceso que abre el sistema cuando la computadora no tiene nada para hacer. Esta tarea tiene la prioridad más baja posible.
1.1 Cómo identificarlo en Windows
En Windows no verás la CPU libre como un espacio vacío, sino como un proceso real que "consume" lo que sobra.
- Abre el Administrador de tareas (
Ctrl + Shift + Esc). - Ve a la pestaña Detalles.
- Busca el proceso llamado Proceso inactivo del sistema (en inglés: System Idle Process).
1.2 Cómo identificarlo en Linux
En Linux, el estado idle se mide directamente como un porcentaje de estadísticas de la CPU. Puedes verlo desde la terminal con varios comandos:
- Con el comando
topohtop: En la parte superior verás una línea de uso de CPU con varios valores. Busca el que diceid(abreviatura de idle). - Con el comando
vmstat: En la última columna, bajo las siglasid, verás el porcentaje de tiempo que el procesador ha estado ocioso.
98.0 id, significa que el 98% de la CPU está inactiva.
Ejemplo de salida de top:
top - 16:45:38 up 3 min, 1 user, load average: 0.05, 0.09, 0.04
Tasks: 39 total, 1 running, 38 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.6 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem: 7598.6 total, 3291.8 free, 1745.2 used, 2739.9 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 5853.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
553 mssql 20 0 11.7g 848408 83240 S 2.0 10.9 0:13.98 sqlservr
1.3 Explicación de las siglas en top
Prioridad del Proceso (¿Quién va primero?)
- PR (Priority): Es la prioridad real que el núcleo (kernel) de Linux le asigna al proceso para usar la CPU. Va desde -20 (máxima prioridad) hasta 39 (mínima prioridad), o puede mostrar RT (Tiempo Real). Cuanto más bajo sea el número, antes se atenderá el proceso.
- NI (Nice): Es un valor de "cortesía" que tú o el sistema pueden configurar manualmente para alterar la prioridad real (PR). Va de -20 (muy egoísta, quiere toda la CPU) a 19 (muy "amable" o nice, deja que otros procesos usen la CPU primero).
Consumo de Memoria (¿Cuánta RAM usa?)
- VIRT (Virtual Image): Es la cantidad total de memoria virtual que el proceso ha solicitado al sistema. Incluye la RAM que está usando, la memoria que tiene reservada pero no usa, los archivos que ha mapeado en disco y la memoria compartida. Este número suele ser gigantesco, pero no representa la RAM real consumida.
- RES (Resident Size): Esta es la columna más importante. Es la cantidad exacta de memoria RAM física real que el proceso está ocupando en ese instante. Si quieres saber qué programa te está dejando sin RAM, mira este valor.
- SHR (Shared Memory): Es una parte de la memoria que el proceso podría compartir con otros programas. Por ejemplo, si tienes 10 pestañas de un navegador abiertas, muchas librerías de código comunes se cargan una sola vez en la memoria SHR para ahorrar espacio en lugar de duplicarse.
1.4 ¿Qué significa que el IDLE esté en 98%?
Cuando el IDLE está en el 98% significa que el procesador no está haciendo nada de trabajo útil durante ese tiempo. Está libre, descansando y esperando a que abras una aplicación, muevas el ratón o el sistema operativo le asigne una tarea.
Sin embargo, a nivel técnico de hardware, un procesador nunca puede "apagarse" por completo si la computadora está encendida. Para lograr no hacer nada, la CPU hace lo siguiente de forma interna:
- Ejecuta un bucle infinito de espera: El sistema operativo le envía una instrucción especial llamada HLT (Halt o detener). Esta orden le dice al procesador: "Quédate congelado en un estado de bajo consumo hasta que llegue una nueva orden o un clic del usuario".
- Ahorra energía y baja su temperatura: Al no procesar datos reales, los circuitos de la CPU descansan, reducen su frecuencia de trabajo y consumen el mínimo de electricidad posible.
- Por lo tanto, ver el idle al 98% es el estado ideal si solo estás mirando la pantalla, ya que significa que tienes casi toda la potencia de tu computadora disponible y lista para ser usada.
2. Criterios de Planificación
La planificación hace referencia a un conjunto de políticas y mecanismos incorporados al SO que gobiernan el orden en que se ejecutan los trabajos que deben ser completados por el sistema informático.
Un planificador es un módulo del SO que selecciona el siguiente trabajo a admitir en el sistema y el siguiente proceso que tomará el control sobre el procesador. El objetivo primario de la planificación es optimizar el rendimiento del sistema de acuerdo con los criterios considerados más importantes por los diseñadores del mismo.
2.1 Utilización del procesador
La utilización del procesador es la fracción de tiempo promedio durante la cual el procesador está ocupado.
Windows Cómo identificarlo
- Abre el Administrador de tareas (
Ctrl + Shift + Esc). - Ve a la pestaña Detalles.
- Haz clic derecho sobre los títulos de las columnas y elige Seleccionar columnas.
- Busca y marca la casilla Tiempo de CPU.
Linux Cómo identificarlo
- Con
top: Busca la columnaTIME+. - Con
ps:
ps -eo pid,comm,time,%cpu --sort=-time
2.2 Productividad (Throughput)
P = N / S2.3 Tiempo de retorno (TR)
TR = TS + TE2.4 Tiempo de espera (TE)
TE = TR − TS2.5 Tiempo de respuesta
En sistemas interactivos, es el tiempo desde que se introduce el último carácter de una orden hasta que aparece el primer resultado en el terminal.
3. Tipos de Planificadores
3.1 Planificador a Largo Plazo (PLP)
Su misión consiste en controlar la admisión de procesos nuevos al sistema. Su objetivo principal es proporcionar una mezcla equilibrada de trabajos.
El PLP es como el guardia de seguridad o el recepcionista en la puerta de un banco. Controla el aforo (grado de multiprogramación) y mantiene el equilibrio entre procesos pesados y ligeros.
En resumen: El PLP selecciona qué programas del disco duro tienen permitido pasar a la memoria RAM.
3.2 Planificador a Corto Plazo (PCP)
Este planificador decide qué procesos toman el control de la CPU. Asigna el procesador entre el conjunto de procesos preparados residentes en memoria.
El PCP es el asesor que organiza la fila de espera justo frente a las ventanillas de los cajeros. Es ultrarrápido, controla el cronómetro (quantum) y aplica las reglas del juego (algoritmos).
3.3 Planificador a Medio Plazo (PMP)
Su misión es traer procesos suspendidos a la memoria principal. Controla la transición de procesos en situación de suspendidos a situación de preparados.
El PMP es el supervisor que saca temporalmente a personas de la fila porque el banco se saturó y las manda a la cafetería de al lado (swap en disco).
8. Algoritmos de Planificación
La planificación puede ser:
- Con desplazamiento (No apropiativo): El proceso en ejecución no es interrumpido hasta que termine o se bloquee.
- Sin desplazamiento (Apropiativo): El SO puede quitar la CPU a un proceso en ejecución.
8.1 FCFS (First Come First Served)
Los procesos son servidos en orden a su llegada a la cola de listos. Se implementa con una cola FIFO. El proceso que llega primero se ejecuta completamente hasta que termina o se bloquea.
Ejemplo 1 — Tres trabajos con diferentes duraciones
Tabla de procesos:
| Proceso | Tiempo de Llegada | Tiempo de CPU (Ráfaga) |
|---|---|---|
| Trabajo 1 | 0 | 12 |
| Trabajo 2 | 0 | 3 |
| Trabajo 3 | 0 | 6 |
Caso 1: Orden de llegada T1 → T2 → T3
Tiempo promedio de retorno:
Tiempo de espera (TE) por proceso (TE = TR − CPU):
Tiempo promedio de espera:
Caso 2: Orden de llegada T2 → T3 → T1
Tiempo promedio de retorno:
Tiempo de espera (TE):
Tiempo promedio de espera:
Ejemplo 2 — Efecto Convoy (un proceso muy largo)
Tabla de procesos:
| Proceso | Tiempo de Llegada | Tiempo de CPU (Ráfaga) |
|---|---|---|
| Trabajo 1 | 0 | 100 |
| T2 | 0 | 1 |
| T3 | 0 | 1 |
| T4 | 0 | 1 |
Caso 1 (Efecto Convoy): Orden T1 → T2 → T3 → T4
Tiempo promedio de retorno:
Tiempo de espera (TE):
Tiempo promedio de espera:
Caso 2: Orden T2 → T3 → T4 → T1
Tiempo promedio de retorno:
Tiempo de espera (TE):
Tiempo promedio de espera:
8.2 SJF (Shortest Job First)
La CPU se asigna al proceso con menor tiempo de ráfaga restante. A igualdad de condiciones, se atiende al primero que haya hecho la petición (FIFO).
Existen dos variantes:
- SJF No Expulsivo: Una vez que un proceso obtiene la CPU, no se le quita hasta que termina o se bloquea.
- SJF Expulsivo (SRTF - Shortest Remaining Time First): Si llega un proceso con menor tiempo restante que el que está en ejecución, se le quita la CPU al actual.
Datos del ejercicio
| Proceso | Tiempo de Llegada | Duración (Ráfaga CPU) |
|---|---|---|
| P1 | 0 | 7 |
| P2 | 2 | 4 |
| P3 | 4 | 1 |
| P4 | 5 | 4 |
🔹 SJF No Expulsivo
Análisis de ejecución:
- t = 0: Solo está P1 (7 ms). Se ejecuta P1 de 0 a 7.
- t = 7: Están listos P2 (4 ms), P3 (1 ms), P4 (4 ms). Se elige el más corto: P3 (1 ms). Se ejecuta de 7 a 8.
- t = 8: Quedan P2 (4 ms) y P4 (4 ms). Empate → FIFO → P2. Se ejecuta de 8 a 12.
- t = 12: Se ejecuta P4 de 12 a 16.
Diagrama de Gantt:
Tiempo promedio de retorno:
Tiempo de espera (TE = TR − CPU):
Tiempo promedio de espera:
🔹 SJF Expulsivo (SRTF - Shortest Remaining Time First)
Análisis de ejecución (paso a paso):
- t = 0: Solo P1 (7 ms). Se ejecuta P1. P1 restante = 7.
- t = 2: Llega P2 (4 ms). P1 le quedan 5 ms. Como P2 (4) < P1 (5) → se expulsa P1. Se ejecuta P2. P1 restante = 5; P2 restante = 4.
- t = 4: Llega P3 (1 ms). P2 le quedan 2 ms. Como P3 (1) < P2 (2) → se expulsa P2. Se ejecuta P3. P2 restante = 2; P3 restante = 1.
- t = 5: P3 termina (duró 1 ms). Llega P4 (4 ms). Listos: P1 (5), P2 (2), P4 (4). El más corto es P2 (2 ms). Se ejecuta P2. P1=5; P4=4.
- t = 7: P2 termina. Listos: P1 (5), P4 (4). El más corto es P4 (4 ms). Se ejecuta P4. P1=5.
- t = 11: P4 termina. Solo queda P1 (5 ms). Se ejecuta P1.
- t = 16: P1 termina.
Diagrama de Gantt:
Tiempo promedio de retorno:
Tiempo de espera (TE = TR − CPU):
Tiempo promedio de espera:
📊 Comparativa entre SJF No Expulsivo y SJF Expulsivo
| Métrica | SJF No Expulsivo | SJF Expulsivo (SRTF) |
|---|---|---|
| Tiempo promedio de retorno (Tpr) | 8 | 7 |
| Tiempo promedio de espera (Tpe) | 4 | 3 |
| Número de cambios de contexto | 3 | 5 |
| Complejidad de implementación | Baja | Alta |
8.3 PRIORIDAD
A cada proceso se le asigna un valor de prioridad. La CPU se asigna al de mayor prioridad; a igualdad, FCFS.
Ejemplo No Expulsivo
| Proceso | Prioridad | Ráfaga CPU |
|---|---|---|
| P1 | 3 | 10 |
| P2 | 1 | 1 |
| P3 | 4 | 2 |
| P4 | 5 | 1 |
| P5 | 2 | 5 |
(Nota: menor número = mayor prioridad)
Tiempo promedio de espera:
Tiempo de retorno (TR = finalización − llegada):
Tiempo promedio de retorno:
8.4 ROUND ROBIN
La CPU se asigna en intervalos de tiempo llamados QUANTUM. Si el proceso agota su quantum, pasa al final de la lista (cola FIFO).
| Proceso | Ráfaga CPU |
|---|---|
| P1 | 10 |
| P2 | 5 |
| P3 | 8 |
| P4 | 3 |
Quantum q = 4
Tiempo promedio de retorno:
Tiempo de espera (TE = TR − CPU):
Tiempo promedio de espera:
9. Ejercicios Resueltos
Ejercicio 1: Cálculo de tiempos
Un proceso P1 entra al sistema. Su tiempo de retorno (R) es de 30 ms y su tiempo de ejecución real en CPU (U) es de 10 ms.
Solución
Ejercicio 2: Round Robin con conmutación
Sean dos procesos P1 (20 ms) y P2 (15 ms). El planificador actúa según Round Robin con quantum de 10 ms y tiempo de conmutación de 5 ms.
10. Referencias Bibliográficas
- Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating System Concepts (10th ed.). Wiley.
- Tanenbaum, A. S., & Bos, H. (2015). Modern Operating Systems (4th ed.). Pearson.
- Stallings, W. (2018). Operating Systems: Internals and Design Principles (9th ed.). Pearson.
- Love, R. (2010). Linux Kernel Development (3rd ed.). Addison-Wesley.