5  Procesos de sistemas operativos

5.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:

Proceso

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.

5.2 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:

La analogía del taller mecánico
1. Vehículo en el Taller (Proceso)

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.

2. Mecánico (Procesador)

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.

3. Manual de Reparaciones (Programa)

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.

4. Herramientas y Piezas (Recursos del Sistema)

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.

5.2.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.

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;

5.2.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:

  1. Nuevo: El proceso se crea y se inicializa.
  2. Listo (Preparado): El proceso está listo para ejecutarse y espera en la cola de listos.
  3. Ejecutando: El proceso está siendo ejecutado por la CPU.
  4. Bloqueado (Suspendido bloqueado o suspendido preparado): El proceso está esperando por algún evento o recurso.
  5. 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.

5.3 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.

Componentes clave del PCB
  • 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.

Importancia en la multitarea

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.