Un proceso es una abstracción identificable de una colección de recursos del sistema interrelacionados basados en un espacio de direcciones virtuales separado e independiente en cuyo contexto se organiza la ejecución de subprocesos. Las Definiciones ISO 9000:2000 definen un proceso como un conjunto de actividades interrelacionadas e interactivas que transforman entradas en salidas.
El programa de computadora en sí es solo una secuencia pasiva de instrucciones. Mientras que el proceso es la ejecución directa de estas instrucciones.
Además, un proceso es un programa en ejecución y todos sus elementos: espacio de direcciones , variables globales , registros , pila , archivos abiertos , etc.
Por lo general, un proceso en un sistema informático está representado por (también se dice que "posee") los siguientes recursos:
El sistema operativo almacena la mayor parte de la información sobre los procesos en la tabla de procesos.
En los sistemas operativos que admiten subprocesos (threads), los subprocesos también poseen sus propios recursos. Por lo general, este es solo el estado del procesador, aunque los subprocesos también pueden usar otros recursos.
Para reducir la probabilidad de que los procesos interfieran entre sí y la probabilidad de fallas del sistema (por ejemplo, interbloqueos o hiperpaginación ), el sistema operativo proporciona aislamiento de procesos y asigna los recursos que necesitan. El sistema operativo también proporciona mecanismos para que los procesos se comuniquen de manera segura y predecible.
Esta sección analiza la representación de memoria de un proceso en el sistema operativo Linux y la arquitectura x86 . Tal representación difiere poco de muchos otros sistemas operativos y arquitecturas multitarea. Por ejemplo, en amd64 , el sucesor de x86, la pila de llamadas crece de arriba a abajo de la misma manera, pero el tamaño del espacio de direcciones aumenta a 2 48 bytes. [2]
Linux utiliza un modelo de memoria plana y, por lo tanto, hay 232 bytes de memoria disponibles para cada proceso en esta arquitectura. Toda la memoria virtual se divide en espacio de usuario y espacio del kernel . El espacio del kernel ocupa un gigabyte de memoria, comenzando en la dirección más alta. El resto del espacio, es decir, tres gigas, está reservado para espacio de usuario.
El diagrama de la derecha muestra la representación en el espacio de usuario de cualquier proceso. El espacio del kernel es el mismo para todos los procesos, ya que solo puede existir una instancia del kernel en el sistema operativo. Después de iniciar el programa, las instrucciones del procesador (código de máquina) y los datos inicializados se importan a la RAM. Al mismo tiempo, los argumentos de inicio y las variables de entorno se importan a direcciones superiores.
El área de datos inicializados almacena datos de solo lectura. Puede ser, por ejemplo, literales de cadena.
El área de datos no inicializados generalmente almacena variables globales.
El montón se utiliza para asignar memoria mientras se ejecuta el programa. En Linux, hay una llamada al sistema para esto mmap.
El área de la pila se utiliza para llamar a los procedimientos .
Otro detalle importante es la presencia de una sangría aleatoria entre la pila y el área superior, así como entre el área de datos inicializados y el montón. Esto se hace por motivos de seguridad, como evitar que se acumulen otras funciones.
Las bibliotecas de vínculos dinámicos y las asignaciones de archivos se ubican entre la pila y el montón.
En los sistemas operativos multitarea, se hizo posible trabajar simultáneamente con varios procesos. Los sistemas operativos multitarea preventivos permitieron lograr la sensación de ejecutar varios procesos al mismo tiempo. Esto requería medios para gestionar varios procesos.
Unix es uno de los primeros sistemas operativos multitarea. Cada proceso tiene un PID numérico único. Los procesos en él tienen una jerarquía de árbol , donde la raíz es el proceso de inicio con PID 1. Se puede crear un nuevo proceso con una llamada al sistema fork, será una copia exacta del proceso principal . Cualquier proceso, excepto init, siempre tiene un proceso principal (el atributo PPID ( PID principal )); los procesos cuyo padre ha terminado se convierten en procesos secundarios de init.
Los procesos también se combinan en grupos . setpgidEl sistema llama y se encarga de gestionar el identificador de grupo (PGID) getpgid. PGID es igual al PID del líder del grupo. El proceso hijo hereda el grupo del padre. Los grupos se utilizan para gestionar trabajos .
Los grupos de procesos se combinan en sesiones . La llamada al sistema es responsable de crear una nueva sesión setsid. Los procesos de un mismo grupo no pueden pertenecer a diferentes sesiones. Por lo tanto, el líder del grupo no puede convertirse en el líder de la sesión: cuando se crea una sesión, el proceso hijo se convierte automáticamente en el líder de la sesión y el líder del nuevo grupo. Las sesiones se utilizan para realizar un seguimiento de todos los procesos que se ejecutan después de que un usuario haya iniciado sesión.
Cada sesión puede tener como máximo un terminal de control . El emulador de terminal tiene un shell de comandos (generalmente bash o sh) como un proceso secundario que, antes de comenzar, se convierte en el líder de la nueva sesión y se establece a sí mismo como el terminal de control.
El sistema operativo más simple no necesita crear nuevos procesos, ya que tienen un único programa ejecutándose en su interior cuando se enciende el dispositivo. En sistemas más complejos, se deben crear nuevos procesos. Suelen crearse:
Un proceso, además del estado de ejecución principal, puede estar en otros estados, como en espera.
Un proceso de Linux puede estar en uno de los siguientes estados:
Mínimo 2 etapas de finalización:
Razones para dar por terminado el proceso:
de los sistemas operativos | Aspectos|||||
---|---|---|---|---|---|
| |||||
Tipos |
| ||||
Núcleo |
| ||||
Gestión de procesos |
| ||||
Gestión y direccionamiento de memoria | |||||
Herramientas de carga e inicialización | |||||
caparazón | |||||
Otro | |||||
Categoría Wikimedia Commons Wikilibros Wikcionario |