Proceso (informática)

Compartir Imprimir Citar
Ejecución particular de un programa informático
Programa vs. Proceso vs. Thread
Programación, Preparación, Context Switching

En informática, un proceso es la instancia de un programa informático que está siendo ejecutado por uno o varios subprocesos. Hay muchos modelos de procesos diferentes, algunos de los cuales son livianos, pero casi todos los procesos (incluso las máquinas virtuales completas) están arraigados en un proceso del sistema operativo (SO) que comprende el código del programa, los recursos del sistema asignados, los permisos de acceso físico y lógico, y estructuras de datos para iniciar, controlar y coordinar la actividad de ejecución. Según el sistema operativo, un proceso puede estar compuesto por varios subprocesos de ejecución que ejecutan instrucciones al mismo tiempo.

Mientras que un programa de computadora es una colección pasiva de instrucciones típicamente almacenadas en un archivo en el disco, un proceso es la ejecución de esas instrucciones después de ser cargadas desde el disco a la memoria. Varios procesos pueden estar asociados con el mismo programa; por ejemplo, abrir varias instancias del mismo programa a menudo da como resultado la ejecución de más de un proceso.

La multitarea es un método que permite que varios procesos compartan procesadores (CPU) y otros recursos del sistema. Cada CPU (núcleo) ejecuta una sola tarea a la vez. Sin embargo, la multitarea permite que cada procesador cambie entre las tareas que se están ejecutando sin tener que esperar a que finalice cada tarea (preemption). Dependiendo de la implementación del sistema operativo, los cambios se pueden realizar cuando las tareas se inician y esperan la finalización de las operaciones de entrada/salida, cuando una tarea cede voluntariamente la CPU, en las interrupciones de hardware y cuando el programador del sistema operativo decide que un proceso ha expirado. parte del tiempo de la CPU (por ejemplo, por el programador completamente justo del kernel de Linux).

El tiempo compartido de la CPU proporciona una forma común de multitarea, que es un método para intercalar la ejecución de las tareas de los usuarios. procesos y subprocesos, e incluso de tareas independientes del kernel, aunque esta última característica solo es factible en kernels preventivos como Linux. La preferencia tiene un efecto secundario importante para los procesos interactivos a los que se les da una mayor prioridad con respecto a los procesos vinculados a la CPU, por lo tanto, a los usuarios se les asignan recursos informáticos de inmediato con solo presionar una tecla o mover el mouse. Además, las aplicaciones como la reproducción de videos y música reciben algún tipo de prioridad en tiempo real, lo que anula cualquier otro proceso de menor prioridad. En los sistemas de tiempo compartido, los cambios de contexto se realizan rápidamente, lo que hace que parezca que varios procesos se ejecutan simultáneamente en el mismo procesador. Esta ejecución simultánea de múltiples procesos se llama concurrencia.

Por motivos de seguridad y confiabilidad, la mayoría de los sistemas operativos modernos evitan la comunicación directa entre procesos independientes, proporcionando una funcionalidad de comunicación entre procesos estrictamente mediada y controlada.

Representación

Una lista de procesos como se muestra por htop
A process table as displayed by KDE System Guard
Una tabla de proceso como muestra KDE System Guard

En general, un proceso de sistema informático consta de (o se dice que posee) los siguientes recursos:

El sistema operativo contiene la mayor parte de esta información sobre procesos activos en estructuras de datos denominadas bloques de control de procesos. Cualquier subconjunto de los recursos, típicamente al menos el estado del procesador, puede estar asociado con cada uno de los procesos. subprocesos en sistemas operativos que admiten subprocesos o procesos secundarios.

El sistema operativo mantiene sus procesos separados y asigna los recursos que necesitan, por lo que es menos probable que interfieran entre sí y causen fallas en el sistema (por ejemplo, interbloqueo o hiperpaginación). El sistema operativo también puede proporcionar mecanismos para la comunicación entre procesos para permitir que los procesos interactúen de manera segura y predecible.

Multitarea y gestión de procesos

Un sistema operativo multitarea puede simplemente cambiar entre procesos para dar la apariencia de que muchos procesos se ejecutan simultáneamente (es decir, en paralelo), aunque de hecho solo se puede ejecutar un proceso a la vez en una sola CPU (a menos que la CPU tiene múltiples núcleos, entonces se pueden usar subprocesos múltiples u otras tecnologías similares).

Es habitual asociar un solo proceso con un programa principal y los procesos secundarios con cualquier proceso paralelo derivado, que se comportan como subrutinas asíncronas. Se dice que un proceso posee recursos, de los cuales una imagen de su programa (en memoria) es uno de esos recursos. Sin embargo, en los sistemas de multiprocesamiento, muchos procesos pueden ejecutarse o compartir el mismo programa reentrante en la misma ubicación de la memoria, pero se dice que cada proceso posee su propia imagen Del programa.

Los procesos a menudo se denominan "tareas" en sistemas operativos embebidos. El sentido de "proceso" (o tarea) es "algo que ocupa tiempo", a diferencia de "memoria", que es "algo que ocupa espacio".

La descripción anterior se aplica tanto a los procesos administrados por un sistema operativo como a los procesos definidos por los cálculos de procesos.

Si un proceso solicita algo por lo que debe esperar, será bloqueado. Cuando el proceso está en estado bloqueado, es elegible para el intercambio a disco, pero esto es transparente en un sistema de memoria virtual, donde las regiones de la memoria de un proceso pueden estar realmente en el disco y no en la memoria principal en cualquier momento.. Incluso partes de procesos/tareas activos (ejecución de programas) son elegibles para el intercambio en el disco, si las partes no se han utilizado recientemente. No todas las partes de un programa en ejecución y sus datos tienen que estar en la memoria física para que el proceso asociado esté activo.

Estados del proceso

Los diversos estados del proceso, mostrados en un diagrama de estado, con flechas que indican posibles transiciones entre estados.

Un kernel de sistema operativo que permite que los procesos de necesidades multitarea tengan ciertos estados. Los nombres de estos estados no están estandarizados, pero tienen una funcionalidad similar.

Comunicación entre procesos

Cuando los procesos necesitan comunicarse entre sí, deben compartir partes de sus espacios de direcciones o utilizar otras formas de comunicación entre procesos (IPC). Por ejemplo, en una canalización de shell, la salida del primer proceso debe pasar al segundo, y así sucesivamente; otro ejemplo es una tarea que se puede descomponer en procesos cooperativos pero parcialmente independientes que se pueden ejecutar a la vez (es decir, usando concurrencia o paralelismo verdadero; el último modelo es un caso particular de ejecución concurrente y es factible siempre que haya suficientes núcleos de CPU disponibles para todos los procesos que están listos para ejecutar).

Incluso es posible que dos o más procesos se ejecuten en diferentes máquinas que pueden ejecutar diferentes sistemas operativos (SO), por lo tanto, se necesitan algunos mecanismos de comunicación y sincronización (llamados protocolos de comunicaciones para computación distribuida) (p. ej., Message Interfaz de paso, a menudo llamada simplemente MPI).

Historia

A principios de la década de 1960, el software de control informático había evolucionado desde el software de control de monitores, por ejemplo, IBSYS, hasta el software de control ejecutivo. Con el tiempo, las computadoras se volvieron más rápidas, mientras que el tiempo de la computadora aún no era barato ni se utilizaba por completo; tal entorno hizo posible y necesaria la multiprogramación. La multiprogramación significa que varios programas se ejecutan simultáneamente. Al principio, más de un programa se ejecutaba en un solo procesador, como resultado de la arquitectura de computadora monoprocesador subyacente, y compartían recursos de hardware escasos y limitados; en consecuencia, la concurrencia era de carácter serie. En sistemas posteriores con múltiples procesadores, múltiples programas pueden ejecutarse simultáneamente en paralelo.

Los programas consisten en secuencias de instrucciones para procesadores. Un solo procesador puede ejecutar solo una instrucción a la vez: es imposible ejecutar más programas al mismo tiempo. Un programa puede necesitar algún recurso, como un dispositivo de entrada, que tiene un gran retraso, o un programa puede iniciar una operación lenta, como enviar la salida a una impresora. Esto llevaría a que el procesador esté "inactivo" (no usado). Para mantener el procesador ocupado en todo momento, la ejecución de dicho programa se detiene y el sistema operativo cambia el procesador para ejecutar otro programa. Para el usuario, parecerá que los programas se ejecutan al mismo tiempo (de ahí el término "paralelo").

Poco después, la noción de un "programa" se amplió a la noción de un "programa de ejecución y su contexto". Nació el concepto de proceso, que también se hizo necesario con la invención del código reentrante. Los hilos llegaron algo más tarde. Sin embargo, con el advenimiento de conceptos como el tiempo compartido, las redes informáticas y las computadoras con memoria compartida de múltiples CPU, la antigua "multiprogramación" dio paso a la verdadera multitarea, multiprocesamiento y, más tarde, multihilo.