La ejecución en ingeniería informática y de software es el proceso mediante el cual una computadora o máquina virtual interpreta y actúa según las instrucciones de un programa informático . Cada instrucción de un programa es una descripción de una acción particular que debe realizarse para resolver un problema específico. La ejecución implica seguir repetidamente un ciclo de " búsqueda-decodificación-ejecución " para cada instrucción realizada por la unidad de control . A medida que la máquina ejecutora sigue las instrucciones, se producen efectos específicos de acuerdo con la semántica de esas instrucciones.
Los programas para una computadora pueden ejecutarse en un proceso por lotes sin interacción humana o un usuario puede escribir comandos en una sesión interactiva de un intérprete . En este caso, los "comandos" son simplemente instrucciones de programa, cuya ejecución está encadenada.
El término correr se utiliza casi como sinónimo. Un significado relacionado tanto de "ejecutar" como de "ejecutar" se refiere a la acción específica de un usuario que inicia (o inicia o invoca ) un programa, como en "Ejecute la aplicación".
Antes de la ejecución, primero se debe escribir un programa. Esto generalmente se hace en el código fuente , que luego se compila en el momento de la compilación (y se vincula estáticamente en el momento del enlace ) para producir un ejecutable. Luego, este ejecutable es invocado, generalmente por un sistema operativo, que carga el programa en la memoria ( tiempo de carga ), posiblemente realiza un enlace dinámico y luego comienza la ejecución moviendo el control al punto de entrada del programa; Todos estos pasos dependen de la interfaz binaria de la aplicación del sistema operativo. En este punto comienza la ejecución y el programa entra en tiempo de ejecución . Luego, el programa se ejecuta hasta que finaliza, ya sea en una terminación normal o en un bloqueo .
Un código ejecutable , un archivo ejecutable o un programa ejecutable , a veces denominado simplemente ejecutable o binario , es una lista de instrucciones y datos que hacen que una computadora "realice tareas indicadas de acuerdo con instrucciones codificadas ", [1] a diferencia de un archivo de datos que debe ser interpretado ( analizado ) por un programa para que tenga significado.
La interpretación exacta depende del uso. "Instrucciones" se entiende tradicionalmente como instrucciones de código de máquina para una CPU física . [2] En algunos contextos, un archivo que contiene instrucciones de secuencias de comandos (como bytecode ) también puede considerarse ejecutable.
El contexto en el que tiene lugar la ejecución es crucial. Muy pocos programas se ejecutan en una máquina desnuda . Los programas suelen contener suposiciones implícitas y explícitas sobre los recursos disponibles en el momento de la ejecución. La mayoría de los programas se ejecutan dentro de un sistema operativo multitarea y bibliotecas de tiempo de ejecución específicas del lenguaje fuente que brindan servicios cruciales que no son proporcionados directamente por la computadora. Este entorno de apoyo, por ejemplo, normalmente desacopla un programa de la manipulación directa de los periféricos de la computadora, proporcionando en su lugar servicios más generales y abstractos.
Para que los programas y los manejadores de interrupciones funcionen sin interferencias y compartan la misma memoria de hardware y acceso al sistema de E/S, en un sistema operativo multitarea que se ejecuta en un sistema digital con una sola CPU/MCU se requiere tener algún tipo de Instalaciones de software y hardware para realizar un seguimiento de los datos de los procesos en ejecución (direcciones de páginas de memoria, registros, etc.) y para guardarlos y recuperarlos al estado en el que se encontraban antes de su suspensión. Esto se logra mediante un cambio de contexto. [3] : 3.3 [4] A los programas en ejecución a menudo se les asigna un identificador de contexto de proceso (PCID).
En los sistemas operativos basados en Linux, un conjunto de datos almacenados en registros generalmente se guarda en un descriptor de proceso en la memoria para implementar el cambio de contexto. [3] También se utilizan PCID.
El tiempo de ejecución , tiempo de ejecución o tiempo de ejecución es la fase final del ciclo de vida de un programa de computadora , en la que el código se ejecuta en la unidad central de procesamiento (CPU) de la computadora como código de máquina . En otras palabras, "tiempo de ejecución" es la fase de ejecución de un programa.
Un error de tiempo de ejecución se detecta después o durante la ejecución (estado de ejecución) de un programa, mientras que el compilador detecta un error de tiempo de compilación antes de que se ejecute el programa. La verificación de tipos , la asignación de registros , la generación de código y la optimización del código generalmente se realizan en tiempo de compilación, pero se pueden realizar en tiempo de ejecución según el lenguaje y el compilador en particular. Muchos otros errores de tiempo de ejecución existen y son manejados de manera diferente por diferentes lenguajes de programación , como errores de división por cero , errores de dominio, errores de subíndice de matriz fuera de límites , errores de desbordamiento aritmético , varios tipos de errores de desbordamiento y subdesbordamiento , y muchos otros errores de tiempo de ejecución generalmente considerados. como errores de software que pueden o no ser detectados y manejados por un lenguaje informático en particular.
Cuando se va a ejecutar un programa, un cargador primero realiza la configuración de memoria necesaria y vincula el programa con cualquier biblioteca vinculada dinámicamente que necesite, y luego la ejecución comienza desde el punto de entrada del programa . En algunos casos, un lenguaje o implementación hará que estas tareas las realice el tiempo de ejecución del lenguaje, aunque esto es inusual en los lenguajes convencionales en los sistemas operativos de consumo comunes.
Parte de la depuración de programas solo se puede realizar (o es más eficiente o precisa cuando se realiza) en tiempo de ejecución. Los errores lógicos y la verificación de límites de matrices son ejemplos. Por esta razón, algunos errores de programación no se descubren hasta que el programa se prueba en un entorno de producción con datos reales, a pesar de las sofisticadas comprobaciones en tiempo de compilación y las pruebas previas al lanzamiento. En este caso, el usuario final puede encontrar un mensaje de "error de tiempo de ejecución".
El manejo de excepciones es una característica del lenguaje diseñada para manejar errores en tiempo de ejecución, proporcionando una forma estructurada de detectar situaciones completamente inesperadas, así como errores predecibles o resultados inusuales sin la cantidad de verificación de errores en línea que se requiere en los lenguajes que no la tienen. Los avances más recientes en los motores de ejecución permiten el manejo automatizado de excepciones que proporciona información de depuración de "causa raíz" para cada excepción de interés y se implementa independientemente del código fuente, adjuntando un producto de software especial al motor de ejecución.
Un sistema de ejecución , también llamado entorno de ejecución , implementa principalmente partes de un modelo de ejecución . [ aclaración necesaria ] Esto no debe confundirse con la fase del ciclo de vida de tiempo de ejecución de un programa, durante la cual el sistema de tiempo de ejecución está en funcionamiento. Cuando se trata el sistema de ejecución como distinto del entorno de ejecución (RTE), el primero puede definirse como una parte específica del software de aplicación (IDE) utilizado para la programación , una pieza de software que proporciona al programador un entorno más conveniente para ejecutar programas. durante su producción ( testing y similares), mientras que el segundo (RTE) sería la instancia misma de aplicación de un modelo de ejecución al programa desarrollado que luego se ejecuta en el sistema de ejecución antes mencionado .
La mayoría de los lenguajes de programación tienen algún tipo de sistema de ejecución que proporciona un entorno en el que se ejecutan los programas. Este entorno puede abordar una serie de cuestiones que incluyen la gestión de la memoria de la aplicación , cómo el programa accede a las variables , mecanismos para pasar parámetros entre procedimientos , interfaz con el sistema operativo y otros. El compilador hace suposiciones dependiendo del sistema de ejecución específico para generar el código correcto. Normalmente, el sistema de ejecución tendrá cierta responsabilidad de configurar y administrar la pila y el montón , y puede incluir características como recolección de basura , subprocesos u otras características dinámicas integradas en el lenguaje. [5]
El ciclo de instrucción (también conocido como ciclo de recuperación-decodificación-ejecución , o simplemente ciclo de recuperación-ejecución ) es el ciclo que sigue la unidad central de procesamiento (CPU) desde el arranque hasta que la computadora se apaga para poder procesar instrucciones. . Se compone de tres etapas principales: la etapa de búsqueda, la etapa de decodificación y la etapa de ejecución.
En las CPU más simples, el ciclo de instrucciones se ejecuta secuencialmente y cada instrucción se procesa antes de que se inicie la siguiente. En la mayoría de las CPU modernas, los ciclos de instrucciones se ejecutan al mismo tiempo , y a menudo en paralelo , a través de una canalización de instrucciones : la siguiente instrucción comienza a procesarse antes de que finalice la instrucción anterior, lo cual es posible porque el ciclo se divide en pasos separados. [6]
Un sistema que ejecuta un programa se llama intérprete del programa. En términos generales, un intérprete ejecuta directamente un programa. Esto contrasta con un traductor de idiomas que convierte un programa de un idioma a otro antes de ejecutarlo.
Una máquina virtual ( VM ) es la virtualización / emulación de un sistema informático . Las máquinas virtuales se basan en arquitecturas informáticas y proporcionan la funcionalidad de una computadora física. Sus implementaciones pueden involucrar hardware, software o una combinación especializados.
Las máquinas virtuales se diferencian y están organizadas según su función, como se muestra aquí:
Algunos emuladores de máquinas virtuales, como QEMU y los emuladores de consolas de videojuegos , están diseñados para emular también (o "imitar virtualmente") diferentes arquitecturas de sistemas, permitiendo así la ejecución de aplicaciones de software y sistemas operativos escritos para otra CPU o arquitectura. La virtualización a nivel de sistema operativo permite particionar los recursos de una computadora a través del kernel . Los términos no son universalmente intercambiables.