Procesos y Multitarea en Sistemas Operativos: Conceptos Clave

1. ¿Qué es un Proceso en un Sistema Operativo?

Un proceso es un programa en ejecución. En los libros de texto se pueden encontrar definiciones más formales, como, por ejemplo, que un proceso puede definirse como “la unidad de procesamiento gestionada por el sistema operativo” o como “la entidad que puede ser asignada a un procesador y ejecutada por él”.

2. El Concepto de Multitarea

2.1. Orígenes de la Multitarea

En los ordenadores de la segunda generación (años 60), cuando el trabajo que se estaba ejecutando se detenía para esperar a que se completara una operación con cinta u otro dispositivo de Entrada/Salida[1], la CPU simplemente permanecía inactiva hasta terminar la operación de E/S. El tiempo de espera de las operaciones de E/S podía ser a menudo del 80 al 90 por ciento del tiempo total que tardaba en ejecutarse la tarea, por lo que debía hacerse algo para evitar que la (costosa) CPU estuviera inactiva por mucho tiempo. Así pues, en la tercera generación de ordenadores (años 70), la solución que surgió fue particionar la memoria en varias piezas, con un trabajo distinto en cada partición. Mientras un trabajo esperaba a que se completara una operación de E/S, otro podía estar usando la CPU. Si se podían contener suficientes trabajos en la memoria principal al mismo tiempo, la CPU podía estar ocupada casi el 100 por ciento del tiempo.

2.2. ¿Cómo Funciona la Multitarea?

Se denomina multiprogramación o multitarea a la técnica por la cual dos o más procesos pueden alojarse en la memoria principal y ser ejecutados concurrentemente por el procesador o CPU. En un sistema multitarea, el sistema operativo reparte el tiempo de uso del procesador entre el conjunto de procesos para que todos avancen en su ejecución. La ejecución de los procesos se solapa en el tiempo a tal velocidad que causa la impresión de realizarse en paralelo (simultáneamente). Se trata de un paralelismo simulado, dado que una CPU solo puede trabajar con un proceso cada vez. De ahí que, en rigor, se diga que la CPU ejecuta «concurrentemente» (no simultáneamente) varios procesos; en un lapso determinado, se ejecutarán alternativamente partes de múltiples procesos cargados en la memoria principal.

3. El Cambio de Contexto

Imagine que un usuario tiene abierto un editor de texto, un navegador web y un editor de vídeo. En este escenario, tenemos (como mínimo) tres procesos activos. Cada cierto tiempo, el sistema operativo decide detener la ejecución de un proceso y comenzar a ejecutar otro; por ejemplo, porque el primero ha utilizado más tiempo del que le correspondía.

Cuando un proceso se suspende temporalmente, debe poder reanudarse después exactamente en el mismo estado en que se detuvo. Esto significa que toda la información relevante del proceso debe guardarse de forma explícita. En muchos sistemas operativos, esta información se almacena en una tabla del sistema operativo conocida como la tabla de procesos, la cual tiene una entrada para cada proceso existente.

A cada una de estas entradas se le conoce como Bloque de Control de Proceso (BCP), y la información que contiene es la siguiente:

  • Información de identificación del proceso: Identificador del proceso (PID), usuario que lo lanzó (UID), grupo del usuario (GID) e identificador del proceso padre (PPID).
  • Estado del procesador: Valores de los registros del procesador en el momento en que el proceso dejó de ejecutarse.
  • Información de control del proceso:
    • Información de planificación y estado: Estado del proceso (listo, bloqueado, etc.), evento que espera (si está bloqueado), prioridad, etc.
    • Descripción de la memoria: Zonas de memoria asignadas al proceso.
    • Recursos asignados: Archivos abiertos, puertos de comunicación, etc.
    • Punteros: Utilizados para organizar y almacenar los procesos en colas o anillos, facilitando la tarea del planificador.
    • Comunicación entre procesos: Almacén de señales y mensajes enviados al proceso.

Al hecho de detener la ejecución de un proceso para iniciar la de otro se le conoce como cambio de contexto. En cada cambio, el sistema operativo debe seleccionar cuál de los procesos disponibles será el siguiente en ejecutarse. De esto se encarga una parte del núcleo llamada planificador. Una vez seleccionado, otra parte llamada activador se encarga de ponerlo en marcha.

4. Estados de un Proceso

Un proceso puede encontrarse en varios estados a lo largo de su ciclo de vida. Los tres estados básicos son:

  1. Listo: El proceso está en espera de ser seleccionado por el planificador para pasar al estado de ejecución.
  2. Ejecución: El proceso está siendo ejecutado actualmente por la CPU.
  3. Bloqueado: El proceso está esperando a que ocurra un evento externo, como la finalización de una operación de entrada/salida.

Además de estos, existen otros estados posibles:

  • Suspendido: Para liberar memoria RAM, el sistema operativo puede mover la imagen completa de un proceso al área de intercambio en el disco.
  • En espera (o Nuevo): El proceso ha sido creado pero está en una cola esperando los recursos necesarios para poder ser admitido en el sistema y pasar al estado ‘listo’.

5. Creación de un Proceso

Para que un programa almacenado en disco se convierta en un proceso en ejecución, el sistema operativo realiza los siguientes pasos:

  1. Asignar un espacio de memoria libre para alojar al nuevo proceso.
  2. Seleccionar una entrada libre en la tabla de Bloques de Control de Proceso (BCP).
  3. Rellenar el BCP con la información relativa al nuevo proceso.
  4. Cargar las distintas regiones del programa (código, datos, etc.) en la zona de memoria previamente reservada.
  5. Cambiar el estado del proceso a ‘listo’ para que el planificador pueda seleccionarlo.

6. Hilos (Threads): Ejecución Concurrente dentro de un Proceso

Un proceso puede tener un solo flujo de ejecución (como en los procesos tradicionales, donde una instrucción se ejecuta tras la anterior) o más de un flujo, conocido como hilo de ejecución (thread), lo que permite ejecutar varias instrucciones de forma concurrente dentro del mismo proceso.

Cuando un programa comienza a ejecutarse, tiene un único hilo. Sin embargo, a petición del propio programa, este puede dividirse en dos o más hilos, lo que puede acelerar su ejecución.

Ventajas de usar hilos

Diseñar un programa utilizando hilos ofrece varias ventajas:

  • Separación de tareas: Cada tarea se puede encapsular en un hilo independiente.
  • Modularidad: Facilita la división de trabajos complejos en tareas más sencillas y manejables.
  • Rendimiento: Aumenta la velocidad de ejecución del programa, ya que aprovecha los tiempos de bloqueo de unos hilos para ejecutar otros.

Características de los Hilos

Los distintos hilos de un mismo proceso comparten recursos como el espacio de memoria, los archivos abiertos y el estado de autenticación. Sin embargo, aunque compartan la memoria, cada hilo mantiene información propia que no comparte con los demás, como el estado del microprocesador y su propia pila de ejecución.

Cabe notar que no existe un mecanismo de protección de memoria entre hilos del mismo proceso. Para coordinar el acceso a los datos compartidos, se emplean mecanismos de sincronización que impiden que un hilo acceda a los datos mientras otro los está modificando.

Estados de un Hilo y del Proceso

Un hilo puede estar en estado de ejecución, listo o bloqueado. El estado del proceso al que pertenecen los hilos es una combinación de los estados de estos:

  • Si al menos un hilo está en ejecución, el proceso está en ejecución.
  • Si ningún hilo está en ejecución pero al menos uno está listo, el proceso está listo.
  • Si todos los hilos están bloqueados, el proceso está bloqueado.

Aplicaciones Típicas

Una de las aplicaciones más comunes de los hilos es el diseño de servidores. Por ejemplo, en un servidor web, cada vez que se recibe una petición de un cliente, se puede crear un nuevo hilo para gestionarla. De esta forma, el hilo principal del servidor no se bloquea atendiendo una única petición, sino que puede gestionar múltiples solicitudes de trabajo simultáneamente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.