
En informática , un proceso es la instancia de un programa informático que se ejecuta mediante uno o varios hilos . Existen muchos modelos de procesos diferentes, algunos de los cuales son ligeros, pero casi todos los procesos (incluso máquinas virtuales completas ) se basan 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 las estructuras de datos para iniciar, controlar y coordinar la actividad de ejecución. Dependiendo del SO, un proceso puede estar compuesto por múltiples hilos de ejecución que ejecutan instrucciones simultáneamente . [ 1 ] [ 2 ]
Mientras que un programa informático es un conjunto pasivo de instrucciones, generalmente 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 a un mismo programa; por ejemplo, abrir varias instancias del mismo programa suele resultar en 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 un único proceso 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 cada una finalice ( preempción ). Dependiendo de la implementación del sistema operativo, los cambios pueden producirse cuando las tareas se inician y esperan a que finalicen las operaciones de entrada/salida , cuando una tarea cede voluntariamente la CPU, ante interrupciones de hardware y cuando el planificador del sistema operativo decide que un proceso ha agotado su parte justa de tiempo de CPU (por ejemplo, mediante el planificador Completely Fair del kernel de Linux ).
Una forma común de multitarea la proporciona el tiempo compartido de la CPU , un método para intercalar la ejecución de procesos e hilos de usuario, e incluso de tareas independientes del núcleo, aunque esta última característica solo es factible en núcleos con prioridad, como Linux . La prioridad tiene un efecto secundario importante para los procesos interactivos, a los que se les da mayor prioridad con respecto a los procesos que dependen de la CPU; por lo tanto, a los usuarios se les asignan recursos de computación inmediatamente con solo presionar una tecla o mover el ratón. Además, las aplicaciones como la reproducción de vídeo y música reciben algún tipo de prioridad en tiempo real, lo que les permite interrumpir 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 se están ejecutando varios procesos simultáneamente en el mismo procesador. Esta ejecución aparentemente simultánea de múltiples procesos se denomina concurrencia .
Por motivos de seguridad y fiabilidad, la mayoría de los sistemas operativos modernos impiden la comunicación directa entre procesos independientes, proporcionando una comunicación entre procesos estrictamente mediada y controlada.
Representación


En general, un proceso de un sistema informático consta de (o se dice que posee ) los siguientes recursos:
- Una imagen del código máquina ejecutable asociado a un programa.
- Memoria (normalmente una región de memoria virtual ); que incluye el código ejecutable, datos específicos del proceso (entrada y salida), una pila de llamadas (para realizar un seguimiento de las subrutinas activas y/u otros eventos) y un montón para almacenar datos de cálculo intermedios generados durante el tiempo de ejecución.
- Descriptores del sistema operativo de los recursos que se asignan al proceso, como descriptores de archivos ( terminología Unix ) o identificadores ( Windows ), y fuentes y destinos de datos.
- Atributos de seguridad , como el propietario del proceso y el conjunto de permisos del proceso (operaciones permitidas).
- Estado del procesador ( contexto ), como el contenido de los registros y el direccionamiento de la memoria física. El estado se almacena normalmente en los registros de la computadora cuando el proceso se está ejecutando, y en la memoria en caso contrario. [ 1 ]
El sistema operativo almacena la mayor parte de esta información sobre los procesos activos en estructuras de datos denominadas bloques de control de procesos . Cualquier subconjunto de los recursos, normalmente al menos el estado del procesador, puede asociarse a cada uno de los hilos del proceso en los sistemas operativos que admiten hilos o procesos secundarios .
El sistema operativo mantiene sus procesos separados y les asigna los recursos que necesitan, de modo que es menos probable que interfieran entre sí y provoquen fallos del sistema (por ejemplo, interbloqueos o sobrecarga ). El sistema operativo también puede proporcionar mecanismos de comunicación entre procesos para que estos interactúen de forma segura y predecible.
Gestión de procesos y multitarea
Un sistema operativo multitarea puede simplemente alternar entre procesos para dar la apariencia de que muchos procesos se ejecutan simultáneamente (es decir, en paralelo ), aunque en realidad solo un proceso puede estar ejecutándose a la vez en una sola CPU (a menos que la CPU tenga varios núcleos, en cuyo caso se pueden utilizar tecnologías de multihilo u otras similares). [ a ]
Es habitual asociar un único proceso con un programa principal, y los procesos secundarios con cualquier proceso paralelo derivado, que se comporta como subrutinas asíncronas . Se dice que un proceso posee recursos, entre los que se encuentra una imagen de su programa (en memoria). Sin embargo, en sistemas multiprocesador, muchos procesos pueden ejecutarse a partir del mismo programa reentrante en la misma ubicación de memoria, o compartirlo , pero se dice que cada proceso posee su propia imagen del programa.
En los sistemas operativos embebidos , los procesos suelen denominarse "tareas" . El significado de "proceso" (o tarea) es "algo que consume tiempo", a diferencia de "memoria", que es "algo que ocupa espacio". [ b ]
La descripción anterior se aplica tanto a los procesos gestionados por un sistema operativo como a los procesos definidos por los cálculos de procesos .
Si un proceso solicita algo que requiere espera, se bloqueará. Cuando el proceso está bloqueado , puede intercambiarse con el disco, pero esto es transparente en un sistema de memoria virtual , donde las regiones de 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 (programas en ejecución) pueden intercambiarse con el disco, si 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

Un núcleo de sistema operativo que permite la multitarea necesita que los procesos tengan ciertos estados . Los nombres de estos estados no están estandarizados, pero tienen una funcionalidad similar. [ 1 ]
- En primer lugar, el proceso se "crea" al cargarse desde un dispositivo de almacenamiento secundario ( disco duro , CD-ROM , etc.) a la memoria principal . Posteriormente, el planificador de procesos le asigna el estado de "espera".
- Mientras el proceso está en estado de espera, aguarda a que el planificador realice un cambio de contexto . Este cambio de contexto carga el proceso en el procesador y modifica su estado a "en ejecución", mientras que el proceso que antes estaba en ejecución permanece en estado de espera.
- Si un proceso en estado "en ejecución" necesita esperar un recurso (por ejemplo, la entrada del usuario o la apertura de un archivo), se le asigna el estado "bloqueado". El estado del proceso vuelve a ser "en espera" cuando ya no necesita esperar (cuando se encuentra bloqueado).
- Una vez que el proceso finaliza su ejecución o es terminado por el sistema operativo, ya no es necesario. El proceso se elimina instantáneamente o pasa al estado "terminado". Al eliminarse, simplemente espera a ser eliminado de la memoria principal. [ 1 ] [ 3 ]
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 tubería de shell , la salida del primer proceso debe pasar al segundo, y así sucesivamente. Otro ejemplo es una tarea que se ha descompuesto en procesos cooperativos pero parcialmente independientes que pueden ejecutarse simultáneamente (es decir, mediante concurrencia o paralelismo real; este último modelo es un caso particular de ejecución concurrente y es factible siempre que haya varios núcleos de CPU disponibles para los procesos que están listos para ejecutarse).
Incluso es posible que dos o más procesos se ejecuten en máquinas diferentes que pueden tener sistemas operativos (SO) distintos; por lo tanto, se necesitan algunos mecanismos de comunicación y sincronización (llamados protocolos de comunicación para computación distribuida) (por ejemplo, la Interfaz de Paso de Mensajes {MPI}).
Historia
A principios de la década de 1960, el software de control de computadoras había evolucionado desde software de control de monitores , por ejemplo IBSYS , hasta software de control ejecutivo . Con el tiempo, las computadoras se volvieron más rápidas, pero el tiempo de computación aún no era barato ni se utilizaba por completo; este entorno hizo posible y necesario el uso simultáneo de 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 subyacente de las computadoras monoprocesador , y compartían recursos de hardware escasos y limitados; por consiguiente, la concurrencia era de naturaleza serial . En sistemas posteriores con múltiples procesadores , varios programas pueden ejecutarse simultáneamente en paralelo .
Los programas consisten en secuencias de instrucciones para los procesadores. Un solo procesador solo puede ejecutar una instrucción a la vez: es imposible ejecutar varios programas simultáneamente. Un programa puede necesitar algún recurso , como un dispositivo de entrada, que tiene una latencia considerable, o puede iniciar una operación lenta, como enviar la salida a una impresora. Esto provocaría que el procesador quedara inactivo. Para mantener el procesador ocupado en todo momento, la ejecución de dicho programa se detiene y el sistema operativo lo asigna a 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 "programa" se amplió a la de "programa en 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 surgieron algo más tarde. Sin embargo, con la llegada de conceptos como el tiempo compartido , las redes informáticas y los ordenadores con memoria compartida y múltiples CPU , la antigua "multiprogramación" dio paso a la verdadera multitarea , el multiprocesamiento y, posteriormente, la multihilo .
Véase también
Notas
- ↑ Algunas CPU modernas combinan dos o más procesadores independientes en una configuración multinúcleo y pueden ejecutar varios procesos simultáneamente. Otra técnica, denominada multihilo simultáneo (utilizada en la tecnología Hyper-threading de Intel ), permite simular la ejecución simultánea de múltiples procesos o hilos.
- ↑ Las tareas y los procesos se refieren esencialmente a la misma entidad. Y, aunque tienen historias terminológicas algo diferentes, se han llegado a usar como sinónimos. Hoy en día, generalmente se prefiere el término proceso a tarea, excepto cuando se hace referencia a la "multitarea", ya que el término alternativo, "multiprocesamiento", se confunde fácilmente con multiprocesador (que es una computadora con dos o más CPU).
Referencias
- 1 2 3 4 Silberschatz, Abraham ; Cagne, Greg; Galvin, Peter Baer (2004). «Capítulo 4. Procesos». Conceptos de sistemas operativos con Java (Sexta ed.). John Wiley & Sons . ISBN 0-471-48905-0.
- ↑ Vahalia, Uresh (1996). «Capítulo 2. El proceso y el núcleo». UNIX Internals: The New Frontiers . Prentice-Hall Inc. ISBN 0-13-101908-2.
- ↑ Stallings, William (2005). Sistemas operativos: principios internos y de diseño (5.ª ed.). Prentice Hall. ISBN 0-13-127837-1.(en particular el capítulo 3, sección 3.2, "estados del proceso", incluyendo la figura 3.9 "transición de estado del proceso con estados de suspensión")
Lecturas adicionales
- Lauer, Hugh; Needham, Roger (octubre de 1978). "Sobre la dualidad de las estructuras de los sistemas operativos" . Actas del Segundo Simposio Internacional sobre Sistemas Operativos . IRIA.[Artículo histórico que clasifica las arquitecturas de sistemas operativos multiproceso en dos categorías duales.]
- Remzi H. Arpaci-Dusseau y Andrea C. Arpaci-Dusseau (2014). " Sistemas Operativos: Tres Piezas Fáciles ". Libros Arpaci-Dusseau. Capítulos relevantes: Abstracción: El Proceso La API del Proceso
- Gary D. Knott (1974) Una propuesta para ciertas primitivas de gestión de procesos e intercomunicación. ACM SIGOPS Operating Systems Review. Volumen 8, número 4 (octubre de 1974). págs. 7-44.
Enlaces externos
Contenido multimedia relacionado con el proceso (informática) en Wikimedia Commons- Recursos en línea para obtener información sobre procesos.
- Base de datos y foro de información sobre procesos informáticos
- Modelos de procesos con métodos de creación y terminación de procesos. Archivado el 6 de febrero de 2021 en Wayback Machine.
- Proceso (informática)
- Computación concurrente
- Tecnología de sistemas operativos