← Planificación de la CPU Bloque 3 · Primero en llegar, primero en ser atendido · Tema 10 de 44

Tema 10

FCFS: el algoritmo más simple

FCFS (First-Come, First-Served) es el algoritmo de planificación más simple que existe: atiende a los procesos en el orden en que llegan, como una cola de un supermercado. No necesita conocer las ráfagas, no necesita prioridades, no necesita temporizador. En este tema verás cómo funciona, un ejemplo desarrollado paso a paso, sus propiedades matemáticas y por qué, a pesar de su simplicidad, rara vez se usa solo en sistemas reales.

1. Qué es FCFS

FCFS (First-Come, First-Served) es el algoritmo de planificación que atiende a los procesos en el orden en que llegan al sistema. El primero en llegar es el primero en recibir la CPU, y así sucesivamente. Es una cola FIFO (First-In, First-Out) aplicada a la CPU.

Es el algoritmo más antiguo y el más intuitivo: cualquiera que haya hecho cola en un banco o en un supermercado entiende la regla. No requiere conocer la duración de los procesos, no necesita prioridades ni temporizadores, y es trivial de implementar: basta con una cola.

FCFS fue el primer algoritmo de planificación usado en los sistemas por lotes de los años 60. En aquel entonces los trabajos se enviaban en tarjetas perforadas y se procesaban en el orden de llegada. La simplicidad era una virtud: los ordenadores eran lentos y el planificador debía ser lo más barato posible.

FCFS no conoce el futuro

FCFS no necesita saber cuánto va a durar un proceso ni cuándo van a llegar los demás. Solo necesita saber quién llegó primero. Esa ignorancia es su mayor virtud (simplicidad) y su mayor defecto (no puede optimizar nada).

2. La cola FIFO

La estructura de datos de FCFS es una cola FIFO: los procesos entran por el final y salen por el principio. Cuando un proceso llega, se añade al final de la cola de listos. Cuando la CPU queda libre, se toma el proceso del principio de la cola.

La cola FIFO tiene tres operaciones:

La cola de listos de FCFS es una sola: no hay prioridades, no hay niveles, no hay turnos. Todos los procesos listos esperan en la misma cola y se atienden en orden de llegada.

Cola FIFO: los procesos entran por la derecha y salen por la izquierda hacia la CPU. COLA DE LISTOS (FIFO) P1 P2 P3 P4 CPU P0 elige el primero llegadas se encolan
La cola FIFO: las llegadas se añaden al final; la CPU toma el proceso del principio.

3. Cómo funciona paso a paso

El funcionamiento de FCFS se reduce a un bucle con tres eventos:

  1. Llega un proceso. Se añade al final de la cola de listos. Si la CPU está ociosa, se le da la CPU inmediatamente. llegada
  2. Un proceso termina su ráfaga de CPU. Si tiene más ráfagas de CPU (tras una E/S), se bloquea; si terminó del todo, sale del sistema. La CPU toma el siguiente proceso de la cola. terminación
  3. Un proceso termina su E/S. Se añade al final de la cola de listos (no al principio). Esperará su turno. E/S

La regla clave es que un proceso que termina su E/S se encola al final, no se le da la CPU inmediatamente. Esto es lo que diferencia a FCFS de algoritmos más sofisticados y lo que provoca el efecto convoy.

FCFS es no apropiativo

Una vez que un proceso recibe la CPU, la conserva hasta que termina su ráfaga de CPU (o se bloquea en E/S). El planificador no puede quitársela. Por eso, si un proceso tiene una ráfaga muy larga, los demás esperan.

4. Un ejemplo desarrollado

Cuatro procesos con llegadas distintas:

ProcesoLlegadaRáfaga
P105
P213
P324
P442

Simulación paso a paso:

  1. t = 0: llega P1. La CPU está libre, se le da. Cola: []. llegada
  2. t = 1: llega P2. La CPU está ocupada (P1), se encola. Cola: [P2]. encolar
  3. t = 2: llega P3. Se encola. Cola: [P2, P3]. encolar
  4. t = 4: llega P4. Se encola. Cola: [P2, P3, P4]. P1 sigue ejecutándose. encolar
  5. t = 5: P1 termina. La CPU toma P2 de la cola. Cola: [P3, P4]. desencolar
  6. t = 8: P2 termina. La CPU toma P3. Cola: [P4]. desencolar
  7. t = 12: P3 termina. La CPU toma P4. Cola: []. desencolar
  8. t = 14: P4 termina. La CPU queda ociosa. fin

El Gantt resultante es:

Gantt FCFS: P1 0-5, P2 5-8, P3 8-12, P4 12-14. P1 P2 P3 P4 0581214
FCFS por orden de llegada. No hay huecos: siempre hay un proceso listo.

Las métricas, calculadas con las fórmulas del tema 7 y 8:

ProcesoLlegadaRáfagaInicioTerminaciónRespuestaEsperaRetorno
P10505005
P21358447
P3248126610
P44212148810
Promedio4,504,508,00

Como FCFS es no apropiativo, cada proceso recibe la CPU una sola vez: respuesta y espera coinciden.

5. La fórmula del tiempo de espera en FCFS

Para FCFS se puede calcular el tiempo de espera sin simular la cola, usando solo las llegadas y las ráfagas. Si los procesos se ordenan por llegada (P1, P2, …, Pn), el tiempo de espera del proceso i es:

Wi = (Σj=1i-1 Bj) − Ai + A1 · (i − 1) … simplificando: Wi = Fi-1 − Ai, donde Fi-1 es la terminación del proceso anterior (o 0 si es el primero).

En la práctica, la forma más sencilla es simular: el inicio de Pi es el máximo entre su llegada y la terminación del anterior. Eso es exactamente lo que hace la función fcfs del tema 9.

Para el caso especial en que todos llegan en 0, la fórmula se simplifica mucho:

Si todos llegan en 0: Wi = B1 + B2 + … + Bi-1. Es decir, la espera de cada proceso es la suma de las ráfagas de todos los que van antes.

El tiempo de espera promedio en ese caso es:

W̄ = ( (n−1)B1 + (n−2)B2 + … + 1·Bn-1 ) / n.

Esta fórmula muestra que el orden importa: un proceso largo al principio multiplica su ráfaga por (n−1), mientras que al final solo suma 1. Por eso, poner los procesos largos primero dispara el promedio.

6. Propiedades de FCFS

Propiedad¿La cumple?Comentario
SimplicidadSíUna sola cola FIFO; no necesita conocer ráfagas ni prioridades.
Justicia (fairness)ParcialRespeta el orden de llegada, pero un proceso largo bloquea a los cortos que llegan después.
Ausencia de inaniciónSíTodo proceso que llega eventualmente se ejecuta; no hay prioridades que lo posterguen indefinidamente.
Minimiza espera promedioNoSJF es mejor cuando se conocen las ráfagas.
Minimiza respuestaNoRound Robin es mejor para interactividad.
PredecibilidadSíEl orden es determinista: llegada → ejecución.
Overhead bajoSíSolo dos operaciones de cola por proceso.

FCFS es el único algoritmo que no necesita conocer las ráfagas de CPU. Eso lo hace aplicable cuando las ráfagas no se pueden predecir (tema 15). En ese sentido, es el algoritmo «por defecto» cuando no hay información.

7. Ventajas

8. Desventajas y el efecto convoy

La principal desventaja de FCFS es el efecto convoy: un proceso con ráfaga larga se ejecuta primero y hace que todos los procesos cortos que llegan después esperen. Es como un camión lento en una carretera de un solo carril: todos los coches rápidos quedan atrapados detrás.

En el ejemplo del tema 1, tres procesos de 4, 2 y 1 unidades daban un tiempo medio de 1,95 s con FCFS (orden A, B, C) y de 1,27 s con SJF (orden C, B, A). La diferencia es el efecto convoy.

Otras desventajas:

El efecto convoy

Un proceso largo en la cabeza de la cola bloquea a todos los procesos cortos que llegan después. Es el principal motivo por el que FCFS no se usa solo en sistemas interactivos. Se estudia en detalle en el tema 11.

9. FCFS es no apropiativo

FCFS es inherentemente no apropiativo: una vez que un proceso recibe la CPU, la conserva hasta que termina su ráfaga de CPU o se bloquea en E/S. El planificador no puede interrumpirlo.

Esto tiene dos consecuencias:

La no apropiación simplifica la implementación (no hay que manejar interrupciones de temporizador), pero reduce la capacidad de respuesta del sistema. Por eso, FCFS se combina con apropiación en algoritmos más avanzados (Round Robin, SRTF).

10. Cuándo se usa FCFS

FCFS se usa en situaciones donde la simplicidad y la predecibilidad importan más que la optimización:

En la práctica, ningún sistema operativo moderno usa FCFS puro para la CPU. Incluso los sistemas por lotes usan variantes con prioridades. Pero FCFS sigue siendo el punto de partida para entender todos los demás algoritmos: es la línea base contra la que se comparan.

11. Simulador interactivo

Este simulador genera una carga de trabajo aleatoria y la ejecuta con FCFS. Cambia los parámetros y observa cómo cambian el Gantt y las métricas:

Simulador · FCFS

ProcesoLlegadaRáfagaInicioFinRespuestaEsperaRetorno

12. Resumen

13. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué estructura de datos usa FCFS?

Una cola FIFO (First-In, First-Out). Los procesos se encolan al llegar y se desencolan cuando la CPU queda libre.

2. ¿FCFS es apropiativo o no apropiativo?

No apropiativo. Un proceso que recibe la CPU la conserva hasta que termina su ráfaga o se bloquea en E/S.

3. ¿Qué es el efecto convoy?

Un proceso con ráfaga larga se ejecuta primero y hace que todos los procesos cortos que llegan después esperen. Es como un camión lento en una carretera de un solo carril.

4. ¿FCFS puede sufrir inanición?

No. Todo proceso que llega se ejecuta eventualmente, porque no hay prioridades que lo posterguen indefinidamente.

5. Si todos los procesos llegan en 0, ¿cuál es la espera de P3 en FCFS?

La suma de las ráfagas de P1 y P2: B1 + B2.

6. ¿Necesita FCFS conocer las ráfagas de los procesos?

No. Es el único algoritmo clásico que no necesita conocer las ráfagas. Funciona aunque no se sepa cuánto va a durar cada proceso.

7. ¿Por qué la respuesta y la espera coinciden en FCFS?

Porque FCFS es no apropiativo: cada proceso recibe la CPU una sola vez, así que no hay espera entre turnos.

8. ¿Minimiza FCFS el tiempo de espera promedio?

No. SJF es mejor cuando se conocen las ráfagas. FCFS solo respeta el orden de llegada.

9. ¿En qué situaciones se usa FCFS en la práctica?

Sistemas por lotes, colas de impresión, procesamiento de mensajes y como componente de algoritmos más complejos (colas multinivel).

10. ¿Qué ocurre si la cola de listos está vacía cuando la CPU queda libre?

La CPU queda ociosa hasta que llegue un proceso. Ese tiempo no es espera de ningún proceso.

Para practicar

  1. Calcula a mano las métricas para los procesos P1(0,6), P2(2,4), P3(4,2) en FCFS.
  2. Repite el ejercicio anterior con llegadas 0, 0, 0 y ráfagas 6, 4, 2. ¿Cambian los promedios?
  3. Demuestra que si todos llegan en 0, poner el proceso más largo primero maximiza el tiempo de espera promedio.
  4. Modifica el simulador para mostrar el efecto convoy: genera un proceso largo seguido de varios cortos.
  5. Compara FCFS con SJF para la misma carga de trabajo usando el simulador del tema 9.
  6. Escribe una función que calcule el tiempo de espera promedio de FCFS sin simular, usando la fórmula del tema.