flowchart TD
A[Programa] --> B[Proceso]
B --> |"Llega al"| C[Taller Mecánico]
C --> D[Mecánico/Procesador]
D --> |"Consulta"| E[Manual de Reparaciones]
D --> |"Utiliza"| F[Herramientas y Piezas]
D --> |"Ejecuta"| G[Reparación/Ejecución]
class A,B,E concepto;
class C,D,F,G sistema;
6 Procesos de sistemas operativos
6.1 Procesos
Uno de los conceptos más fundamentales en la gestión de un sistema operativo es el de proceso. Este concepto se originó con la llegada de la multiprogramación, la cual permitió la ejecución simultánea de múltiples programas en un mismo sistema. Gracias a esta capacidad, los sistemas operativos pudieron transformar la forma en que gestionan los recursos y coordinan las tareas en un ordenador.
Consideremos el caso de una computadora portátil moderna. Desde el momento en que se enciende, el sistema operativo inicia una serie de procesos en segundo plano, muchos de los cuales el usuario ni siquiera nota. Por ejemplo, se ejecutan procesos como el explorador de Windows, servicios esenciales (red, impresión), programas de seguridad (antimalware), servidores de bases de datos, o incluso la Máquina Virtual de Java (JVM) cuando el entorno está configurado para desarrollo con Java. Mientras tanto, el usuario puede estar navegando por Internet o escuchando música, sin percibir la complejidad de las operaciones que ocurren simultáneamente.
Toda esta actividad se gestiona de manera eficiente gracias a la multiprogramación, que permite al sistema operativo administrar los recursos del procesador, la memoria y otros dispositivos de forma que varios procesos puedan ejecutarse “al mismo tiempo” sin interferir entre sí.
Podemos definir, entonces, a un proceso como:
Una instancia de un programa en ejecución.
Es importante destacar que un proceso no es simplemente un programa almacenado en disco o en memoria, sino una entidad activa que utiliza los recursos del sistema para realizar tareas específicas. Cada proceso dispone de su propio espacio de memoria, un estado determinado y es gestionado por el sistema operativo para garantizar que todos puedan operar de forma eficiente y segura dentro del sistema.
6.2 Bloque de Control de Procesos (PCB)
Desde el punto de vista del sistema operativo, un proceso se representa como un conjunto de datos que describe su estado en cada momento, los recursos utilizados, los registros, y otra información relevante. Este conjunto de datos se denomina Bloque de control de procesos (PCB, por sus siglas en inglés: Process Control Block).
El PCB es fundamental para la gestión de procesos en un sistema operativo, ya que contiene toda la información necesaria para controlar y administrar un proceso. Cada proceso en el sistema tiene su propio PCB, y estos se almacenan en una estructura de datos que el sistema operativo utiliza para llevar un seguimiento preciso de todos los procesos.
- Identificador del proceso (PID): Un número único que identifica a cada proceso en el sistema.
- Estado del proceso: El estado actual del proceso, que puede ser: nuevo, en ejecución, preparado, bloqueado, suspendido bloqueado y suspendido preparado; el estado del proceso también contiene información relativa a la prioridad del proceso.
- Contador de programa (Program Counter) (PC): La dirección de la siguiente instrucción que se ejecutará para este proceso.
- Registros de la CPU: Incluye el contenido de los registros del procesador utilizados por el proceso, como los registros generales, punteros de pila, registros de estado, entre otros.
- Información de gestión de memoria: Detalles sobre la memoria asignada al proceso, incluyendo las tablas de páginas o segmentos.
- Información de gestión de recursos: Información sobre los recursos que el proceso está utilizando, como archivos abiertos, dispositivos de E/S, y otras asignaciones de recursos.
- Información de contabilidad del proceso: Datos sobre el uso de la CPU, límites de tiempo, y otra información relevante para la contabilidad del sistema.
El PCB funciona como el “documento de identidad” del proceso dentro del sistema operativo. Cuando el sistema operativo cambia de un proceso a otro (cambio de contexto), guarda el estado del proceso saliente en su PCB y carga el estado del proceso entrante desde su respectivo PCB.
El sistema operativo mantiene los PCBs en estructuras como listas enlazadas o tablas, organizadas según el estado de los procesos. Esto permite localizar rápidamente todos los procesos en un estado particular, facilitando la planificación y gestión de recursos.
6.3 Estructura de un proceso: el PCB
La estructura de un proceso se representa comúnmente mediante el Process Control Block (PCB), que es una estructura de datos que almacena toda la información relevante para la gestión del proceso. Entre los elementos contenidos en un PCB destacan:
- Código del programa
- Las instrucciones que el proceso ejecutará.
- Datos
- Las variables necesarias para la ejecución.
- Recursos del sistema
- CPU, memoria, dispositivos de E/S, que el proceso necesita para funcionar.
Para entender mejor el modelo del proceso, podemos utilizar la siguiente analogía de un taller mecánico:

Imagina que cada proceso es un vehículo que llega a un taller mecánico para ser reparado o mantenido. Este vehículo representa una instancia de un programa que ha sido activado y ahora requiere atención.
El mecánico del taller es como el procesador del sistema, encargado de realizar las reparaciones necesarias. Este mecánico debe seguir un conjunto de instrucciones específicas (el programa) para reparar el vehículo.
El mecánico consulta un manual de reparaciones, que contiene todas las instrucciones necesarias para realizar la reparación. Este manual es análogo al código del programa que el proceso necesita ejecutar.
Para llevar a cabo las reparaciones, el mecánico necesita herramientas y piezas de recambio, que en el sistema operativo corresponden a los recursos del sistema, como la CPU, memoria, y dispositivos de entrada/salida.
6.3.1 Ejecución
Mientras el vehículo está en el taller, el mecánico trabaja en él, siguiendo el manual, utilizando las herramientas y asegurándose de que la reparación se realice correctamente.
6.3.2 Analogía
Esto es similar a cómo un proceso se ejecuta en un sistema operativo, siguiendo las instrucciones del programa y utilizando los recursos disponibles.
stateDiagram-v2
[*] --> Nuevo
Nuevo --> Listo: Proceso creado
Listo --> Ejecutando: Proceso seleccionado por el planificador
Ejecutando --> Listo: Interrupción del planificador
Ejecutando --> Bloqueado: Espera de E/S o recurso
Bloqueado --> Listo: E/S o recurso disponible
Ejecutando --> Terminado: Proceso completo
Terminado --> [*]: Liberación de recursos
state Listo {
Cola_de_Listos
}
Este diagrama muestra las principales etapas del ciclo de vida de un proceso en un sistema operativo:
- Nuevo: El proceso se crea y se inicializa.
- Listo (Preparado): El proceso está listo para ejecutarse y espera en la cola de listos.
- Ejecutando: El proceso está siendo ejecutado por la CPU.
- Bloqueado (Suspendido bloqueado o suspendido preparado): El proceso está esperando por algún evento o recurso.
- Terminado: El proceso ha completado su ejecución.
Las transiciones entre estados representan las decisiones del sistema operativo y los eventos que ocurren durante la ejecución del proceso.
La idea clave es que un proceso es una actividad de cierto tipo: tiene un programa, una entrada, una salida y un estado. Varios procesos pueden compartir un solo procesador mediante el uso de un algoritmo de planificación para determinar cuándo se debe detener el trabajo en un proceso para dar servicio a otro.
La existencia del PCB es lo que permite la multitarea en los sistemas operativos modernos. Al guardar y restaurar el estado completo de cada proceso, el sistema puede alternar entre múltiples procesos, dando la ilusión de ejecución simultánea incluso en sistemas con un solo procesador.
6.4 Transiciones de Estado en Procesos
Una transición de estado ocurre cuando un proceso cambia de un estado a otro durante su ciclo de vida. Estas transiciones son gestionadas por el sistema operativo en respuesta a eventos del sistema o solicitudes del proceso.
6.4.1 Detalle de las Transiciones
6.4.1.1 1. Nuevo → Preparado
Cuando se emite la orden de ejecución de un programa:
- Se crea un nuevo proceso
- Se genera el Process Control Block (PCB)
- El proceso se inserta en la cola de preparados
La posición en la cola de preparados dependerá de la política de gestión del sistema operativo (por ejemplo, FIFO, prioridades, etc.).
6.4.1.2 2. Preparado → Ejecución
flowchart TD
subgraph Cola de Preparados
P1[Proceso 1]
P2[Proceso 2]
P3[Proceso 3]
end
P1 --> |Seleccionado| CPU[CPU]
subgraph Ejecución
CPU
end
El planificador (scheduler) selecciona el próximo proceso a ejecutar basándose en algoritmos de planificación específicos.
6.4.1.3 3. Ejecución → Bloqueado
Un proceso pasa a estado bloqueado cuando:
- Realiza una solicitud de E/S
- Espera por un evento específico
- Ejecuta una llamada al sistema que resulta en bloqueo (e.g.,
wait(),sleep())
El proceso permanecerá bloqueado hasta que se complete la operación o evento que está esperando.
6.4.1.4 4. Bloqueado → Preparado
Cuando ocurre el evento esperado:
- El proceso se mueve de la cola de bloqueados a la cola de preparados
- El proceso está listo para ser seleccionado nuevamente por el planificador
6.4.1.5 5. Ejecución → Preparado
Esta transición puede ocurrir por:
- Expiración del quantum de tiempo en sistemas de tiempo compartido
- Una interrupción del sistema
- Cambio de prioridades en la planificación
6.4.1.6 6. Estados de Suspensión
Los estados de suspensión permiten al sistema operativo gestionar eficientemente la memoria, moviendo procesos entre la memoria principal y el almacenamiento secundario.
6.4.1.6.1 Preparado ↔︎ Suspendido Preparado
- Suspensión: Liberar memoria moviendo el proceso a disco
- Reactivación: Volver a cargar el proceso en memoria cuando hay recursos disponibles
6.4.1.6.2 Bloqueado ↔︎ Suspendido Bloqueado
- Suspensión: Mover un proceso bloqueado a disco para liberar recursos
- Reactivación: Volver a cargar el proceso en memoria, manteniendo su estado bloqueado
6.4.1.7 7. Finalización
- Ejecución normal completada
- Error fatal durante la ejecución
- Terminación forzada por el sistema o otro proceso
Cuando un proceso finaliza:
- Se libera la memoria y recursos asignados
- Se elimina el PCB
- El proceso sale del sistema
6.5 Operaciones sobre Procesos
Los sistemas operativos modernos proporcionan varias funciones para manipular y gestionar los procesos. A continuación, se describen las principales operaciones que se pueden realizar sobre un proceso:
6.5.1 1. Crear un Proceso
La creación de un proceso se inicia mediante la orden de ejecución de un programa. Este proceso requiere varios argumentos, como el nombre del proceso y su prioridad. En este momento, se crea el Bloque de Control de Procesos (PCB), que se inserta en la cola de procesos preparados.
La creación del PCB implica la asignación de recursos iniciales y la configuración del contexto del proceso.
6.5.1.1 Tipos de Creación
En este tipo de creación, cada proceso que se crea es hijo del proceso creador y hereda el entorno de ejecución de su padre. Por ejemplo, el primer proceso que ejecuta un usuario suele ser hijo del intérprete de comandos con el que interactúa.
En esta modalidad, cada proceso creado por otro proceso se ejecuta independientemente de su creador y con un entorno diferente. Este tipo de creación no es común en los sistemas operativos modernos.
6.5.2 2. Destruir un Proceso
La destrucción de un proceso implica la eliminación del proceso mediante una orden específica. Esta operación resulta en la eliminación del PCB asociado con el proceso.
Es fundamental que, al destruir un proceso, se liberen todos los recursos asignados para evitar fugas de memoria y otros problemas.
6.5.3 3. Suspender un Proceso
La suspensión de un proceso es una operación de alta prioridad que paraliza el proceso, permitiendo que pueda ser reanudado posteriormente. Esta operación es útil en situaciones de mal funcionamiento o sobrecarga del sistema.
6.5.4 4. Reanudar un Proceso
La reanudación de un proceso se refiere a la activación de un proceso que ha sido previamente suspendido, permitiendo que continúe su ejecución desde el punto en el que fue interrumpido.
Al reanudar un proceso, es crucial que se restaure correctamente su contexto (registros, memoria, etc.) para que pueda continuar su ejecución de manera transparente.
6.5.5 5. Cambiar la Prioridad de un Proceso
Esta operación permite ajustar la prioridad de un proceso en ejecución, lo que puede afectar el orden en el que el proceso recibe tiempo de CPU en comparación con otros procesos.
Cambiar la prioridad de un proceso puede afectar la equidad del sistema y, en algunos casos, provocar inanición de otros procesos.
6.5.6 6. Temporizar la Ejecución de un Proceso
La temporización de un proceso controla su ejecución en función de un período de tiempo fijo, permitiendo que el proceso se ejecute en intervalos regulares o en una sola vez después de un período determinado.
6.5.7 7. Despertar un Proceso
Despertar un proceso se refiere a desbloquear un proceso que ha sido previamente bloqueado debido a la temporización u otras causas.
Un proceso bloqueado no consume CPU pero puede estar usando otros recursos.
Esta estructura utiliza encabezados claros, callouts para destacar información importante y un panel-tabset para organizar los tipos de creación de procesos, lo que facilita la comprensión y el estudio de las operaciones sobre procesos.
6.6 Prioridades en Sistemas Operativos
En un sistema operativo, cada proceso tiene asignada una prioridad. Esta prioridad determina cómo y con qué frecuencia el proceso accede al procesador en comparación con otros procesos. Refleja las necesidades de ejecución del proceso en términos de urgencia y asignación de recursos, influyendo directamente en el orden y la velocidad de ejecución en el sistema.
6.6.1 Clasificación según la Asignación
Las prioridades se pueden clasificar según cómo se asignan:
Estas prioridades son asignadas automáticamente por el sistema operativo al inicio del proceso. La asignación depende de:
- Los privilegios del propietario del proceso
- El modo de ejecución
Ejemplo: Un proceso iniciado por un administrador puede recibir una prioridad más alta que un proceso iniciado por un usuario regular.
En este caso, el usuario asigna la prioridad con la que el proceso se ejecuta. Es común en sistemas de tiempo real donde la respuesta rápida a eventos es crucial.
Ejemplo: En un sistema de control industrial, un usuario podría asignar alta prioridad a un proceso que monitorea la temperatura, asegurando una ejecución rápida.
6.6.2 Clasificación según la Variabilidad
Las prioridades también se clasifican según si pueden o no modificarse durante la ejecución:
Las prioridades estáticas no pueden ser modificadas durante la ejecución del proceso. Una vez asignadas, permanecen constantes. Son utilizadas en sistemas de tiempo compartido, donde la equidad en la asignación de recursos es importante.
Ejemplo: Un proceso de mantenimiento del sistema con prioridad estática podría ejecutarse regularmente sin cambios en su prioridad.
Las prioridades dinámicas pueden ser modificadas durante la ejecución del proceso. Este ajuste permite al sistema operativo reaccionar a eventos cambiantes, ajustando la prioridad de los procesos para asegurar que se manejen adecuadamente.
Ejemplo: Si un proceso de baja prioridad requiere atención urgente debido a un evento crítico, el sistema operativo puede elevar temporalmente su prioridad.