1. Compilación (o interpretación): Un programa escrito en un lenguaje de alto nivel (como C ++, Java, Python) debe traducirse a instrucciones de máquina y modelar. Esto sucede de dos maneras principales:
* Compilación: El compilador traduce todo el programa en un archivo ejecutable completo (por ejemplo, un archivo `.exe` en Windows o un archivo binario en Linux/MacOS). Este ejecutable contiene un código de máquina específico para la arquitectura de la computadora de destino.
* Interpretación: Un intérprete traduce y ejecuta el programa línea por línea, sin crear un ejecutable separado. Esto es más lento que la compilación, pero ofrece más independencia de la plataforma. Lenguajes como Python y JavaScript generalmente se interpretan (aunque a menudo se usa la compilación [JIT] justo a tiempo para mejorar el rendimiento).
2. Carga: El cargador del sistema operativo es responsable de cargar el ejecutable del programa en la memoria. Esto implica:
* Encontrar el ejecutable: El cargador localiza el archivo de programa en el dispositivo de almacenamiento (disco duro, SSD, etc.).
* Memoria de asignación: Se reserva espacio en la RAM de la computadora para el código, los datos y la pila del programa. La pila se utiliza para datos temporales y llamadas de funciones. El montón se usa para la memoria asignada dinámicamente.
* Reubicación: El cargador ajusta las direcciones de memoria dentro del programa para reflejar su ubicación real en la RAM.
* Vinculación: Si el programa usa bibliotecas o módulos externos, el cargador los vincula al programa.
3. Creación del bloque de control de proceso (PCB): El sistema operativo crea una PCB, una estructura de datos que contiene toda la información necesaria para administrar el proceso. Esta información incluye:
* ID de proceso (PID): Un identificador único para el proceso.
* contador del programa: Apunta a la siguiente instrucción que se ejecutará.
* Registros de CPU: Almacene los datos temporales utilizados por la CPU.
* Información de gestión de memoria: Detalles sobre la memoria asignada al proceso.
* Estado de I/O: Información sobre las operaciones de E/S del proceso.
* Estado: Indica si el proceso está ejecutando, listo, bloqueado, etc.
4. Ejecución: Una vez que se carga el programa y se crea el PCB, el programador del sistema operativo asigna el proceso a un núcleo de CPU. La CPU luego obtiene instrucciones del código del programa en la memoria, las ejecuta y actualiza la PCB en consecuencia. El proceso continúa ejecutándose hasta que se complete o se termina.
En resumen, un programa es un conjunto estático de instrucciones, mientras que un proceso es una instancia dinámica de un programa en ejecución. El proceso tiene su propio espacio de memoria, recursos y una PCB administrada por el sistema operativo. Múltiples procesos pueden ejecutarse simultáneamente (aunque no necesariamente simultáneamente en una CPU de un solo núcleo).