Administración de procesos en los sistemas operativos
Los procesos son la base sobre la cual se construyen los sistemas operativos modernos. Cada vez que iniciamos un programa, creamos un nuevo proceso. Este proceso es una instancia en ejecución de ese programa y cuenta con sus propios recursos, como memoria y tiempo de CPU, los procesos tambien son considerados como la de trabajo de la cpu.
La gestión de procesos es esencial para:
- Multiprogramación: Permitir que múltiples programas se ejecuten aparentemente al mismo tiempo.
- Concurrencia: Coordinar la ejecución de diferentes tareas.
- Eficiencia: Utilizar de manera óptima los recursos del sistema.
Ejemplo:
En los sistemas operativos mono proceso cuando un proceso se encuentra en ejecución todos los recursos del computador son utilizados por el proceso y si el proceso ingresa a un bucle infinito los recursos del ordenador no se liberan impidiendo la ejecución de otros procesos en colas o nuevos procesos, mientras que en los sistemas operativos que permitan la multiprogramación los procesos se conmutan para dar la ilusión de la multitarea.
En concepto, cada proceso tiene su propia CPU virtual; en la realidad, la CPU real asigna tiempo de ejecución a un proceso y realízala conmutación de un proceso a otro, pero para entender el sistema es mucho más fácil pensar en una colección de procesos que se ejecutan en (pseudo) paralelo, en vez de tratar de llevar la cuenta de cómo la CPU conmuta de programa en programa. Esta conmutación rápida de un proceso a otro se conoce como multiprogramación.
La siguiente figura (a) muestra una computadora multiprogramado cuatro programas en memoria;
(b) lista cuatro procesos, cada uno con su propio flujo de control (es decir, su propio contador de programa lógico) y cada uno ejecutándose en forma independiente. Desde luego que sólo hay un contador de programa físico, por lo que cuando se ejecuta cada proceso, se carga su contador de programa lógico en el contador de programa real. Cuando termina (por el tiempo que tenga asignado), el contador de programa físico se guarda en el contador de programa lógico alma[1]cenado, del proceso en memoria (c) podemos ver que durante un intervalo suficientemente largo todos los procesos han progresado, pero en cualquier momento dado sólo hay un proceso en ejecución.
Creación de un Proceso
La creación de un proceso se inicia cuando un usuario o el sistema operativo solicita la ejecución de un programa. En un sistema multitarea, el proceso pasa por diversas fases, desde la solicitud hasta su ejecución efectiva. El proceso de creación de un proceso generalmente implica lo siguiente:
- Solicitud de creación: Un proceso puede ser creado de manera explícita por un programa, o de manera implícita a través de una llamada al sistema, como
fork()
en sistemas basados en Unix. En sistemas Windows, se utilizan funciones comoCreateProcess()
para crear nuevos procesos. - Asignación de recursos: El sistema operativo asigna al proceso nuevos recursos. Esto incluye espacio en la memoria, identificadores de procesos (PID), y el acceso a archivos o dispositivos necesarios.
- Copia del contexto: Cuando un proceso hijo es creado a partir de un proceso padre, se copia el contexto del proceso padre, aunque la ejecución será independiente. Esto incluye las variables, las pilas de ejecución, y las instrucciones de código a ejecutar.
- Colocación en la cola de procesos: Una vez creado el proceso, el sistema operativo lo coloca en la cola de procesos listos para ser ejecutados. Sin embargo, no se ejecuta inmediatamente, ya que depende de la planificación de la CPU.
Ciclo de Vida del Proceso
Un proceso atraviesa diversas etapas desde su creación hasta su terminación. Estas son las fases principales:
- Nuevo: En este estado, el proceso ha sido creado pero aún no está listo para ejecutarse. Está esperando recursos o el permiso del sistema operativo para iniciar su ejecución.
- Listo (Ready): El proceso está completamente creado y tiene todos los recursos necesarios, pero está esperando que el sistema operativo lo programe para su ejecución en la CPU. En sistemas operativos multitarea, varios procesos pueden estar en este estado simultáneamente, y el planificador decide cuál se ejecutará en base a políticas de planificación (como Round Robin, Prioridad, etc.).
- Ejecutando (Running): El proceso está siendo ejecutado por la CPU. Durante este estado, el proceso está utilizando los recursos de la computadora para llevar a cabo sus instrucciones. Solo un proceso puede estar en este estado a la vez en un solo núcleo de procesador, aunque en sistemas multiprocesador o multinúcleo, pueden ejecutarse varios procesos simultáneamente.
- Bloqueado (Blocked): En este estado, el proceso está esperando un evento externo para continuar su ejecución. Esto puede incluir esperar que un recurso, como un archivo o una entrada de usuario, esté disponible. Mientras está bloqueado, el proceso no puede hacer uso de la CPU.
- Terminado (Terminated): Un proceso llega a este estado cuando ha completado su ejecución o ha sido detenido por alguna razón, como una excepción o una solicitud del sistema operativo. El proceso no se ejecuta más, y los recursos asignados a él son liberados.
Terminación del Proceso
La terminación de un proceso ocurre cuando éste ha terminado su tarea o cuando se encuentra con un error que no puede recuperarse. Esta fase también puede involucrar varios pasos:
- Liberación de recursos: Antes de que el proceso termine completamente, el sistema operativo libera los recursos que se le habían asignado, como memoria, identificadores de archivo, y otros.
- Retorno del valor de salida: El proceso puede devolver un valor al proceso que lo creó (si es el caso), indicando si la ejecución fue exitosa o si ocurrió algún error. Esto puede ser indicado a través de códigos de salida o mediante señales.
- Eliminación de la entrada de la tabla de procesos: El sistema operativo elimina el proceso de la tabla de procesos, que es una estructura de datos donde se mantiene un registro de los procesos en ejecución.
- Notificación al proceso padre: Si el proceso hijo fue creado por otro proceso (el padre), al finalizar, el padre puede ser notificado de la terminación del hijo para poder recoger el valor de salida (en sistemas tipo Unix, esto se realiza mediante la llamada
wait()
).
Bibliografía
Tanenbaum, A. S. (2010). Sistemas Operativos Modernos (3ª ed.). Prentice Hall.