En informática , la ejecución es el proceso mediante el cual un programa informático se procesa para realizar las acciones que codifica. A medida que el procesador sigue las instrucciones del programa, se producen efectos de acuerdo con la semántica de dichas instrucciones. El término «ejecutar» suele ser sinónimo. El acto de iniciar la ejecución se denomina a menudo «lanzamiento» o «invocación» , además de «ejecutar » y «ejecutar» .
Un procesador de ejecución puede presentarse en diversas formas. Un programa en código máquina puede ejecutarse mediante la interfaz programable de una computadora , donde la ejecución implica seguir repetidamente un ciclo de búsqueda, decodificación y ejecución para cada instrucción del programa ejecutada por la unidad de control . El código fuente puede ejecutarse mediante un software intérprete . Un programa puede ejecutarse en un proceso por lotes sin interacción humana o un usuario puede escribir comandos en una sesión interactiva .
Relación con el desarrollo
Los aspectos de la ejecución afectan e impulsan el desarrollo de software .
Independencia de la plataforma
Con frecuencia, el software depende de servicios externos, como un entorno de ejecución y una biblioteca de ejecución adaptada al entorno anfitrión, para proporcionar servicios que puedan desacoplar un ejecutable de la manipulación directa del ordenador y sus periféricos, y así proporcionar una solución más independiente de la plataforma.
Error de tiempo de ejecución
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 un error de tiempo de compilación es detectado por el compilador antes de que el programa se ejecute. La verificación de tipos , la asignación de registros , la generación de código y la optimización de código generalmente se realizan en tiempo de compilación, pero pueden realizarse en tiempo de ejecución dependiendo del lenguaje y el compilador específicos. Existen muchos otros errores de tiempo de ejecución que son manejados de manera diferente por los distintos lenguajes de programación , como errores de división por cero , errores de dominio, errores de índice de matriz fuera de límites , errores de subdesbordamiento aritmético , varios tipos de errores de subdesbordamiento y sobredesbordamiento , y muchos otros errores de tiempo de ejecución generalmente considerados errores de software que pueden o no ser detectados y manejados por cualquier lenguaje de programación en particular.
El manejo de excepciones permite gestionar errores en tiempo de ejecución, proporcionando una forma estructurada de detectar situaciones inesperadas, así como errores predecibles o resultados inusuales, sin la necesidad de realizar comprobaciones de errores en línea, como ocurre en lenguajes que no las incluyen. Los avances más recientes en los motores de ejecución posibilitan el manejo automatizado de excepciones , que proporciona información de depuración sobre la causa raíz de cada excepción relevante y se implementa independientemente del código fuente, mediante la integración de un software específico al motor de ejecución.
Depuración
Algunas tareas de depuración solo pueden realizarse (o resultan más eficientes y precisas) durante la ejecución del programa. Los errores lógicos y la comprobación de límites de matrices son ejemplos de ello. Por este motivo, 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 encontrarse con un mensaje de "error en tiempo de ejecución".
Entorno de ejecución
Un entorno de ejecución es el contexto en el que se ejecuta un programa. Los siguientes atributos de entorno son de uso común. No son estrictamente distintos, ya que un entorno puede describirse con varios de estos atributos.
nativo del huésped
La ejecución nativa del sistema es un escenario común, especialmente desde un punto de vista histórico. Consiste en controlar un ordenador mediante las instrucciones de su unidad central de procesamiento (CPU). La CPU interpreta el programa a nivel de instrucciones de máquina .
Cambio de contexto
El cambio de contexto , una característica de un sistema operativo multitarea , admite la ejecución concurrente de múltiples ejecutables nativos del host. Para intercambiar un ejecutable (identificado por un identificador de contexto de proceso ) del entorno de ejecución, el sistema operativo guarda sus datos de contexto de ejecución, como direcciones de páginas de memoria y valores de registros. Para volver a insertarlo, el sistema operativo restaura los datos. [ 1 ] : 3.3 [ 2 ]
En un sistema operativo basado en Linux, un conjunto de datos almacenados en registros se guarda normalmente en un descriptor de proceso en la memoria para implementar un cambio de contexto. [ 1 ] También se utilizan PCID.
Cargando
Cuando se inicia un programa, un cargador realiza la configuración de memoria y enlaza el programa con las bibliotecas de enlace dinámico que necesita; a continuación, la ejecución comienza en el punto de entrada del programa . En algunos casos, estas tareas las realiza el entorno de ejecución del lenguaje o su implementación, aunque esto es poco común en los lenguajes más utilizados en los sistemas operativos de consumo habituales.
Sistema de tiempo de ejecución
Un sistema de ejecución es una capa de software que proporciona servicios a un ejecutable. Forma parte de un modelo de ejecución . En este sentido, un entorno de ejecución (RTE) abarca todo aquello con lo que un programa puede interactuar, incluido el sistema de ejecución.
La mayoría de los lenguajes de programación incluyen un sistema de ejecución. Este puede abordar cuestiones como la gestión de memoria , el acceso a variables , los mecanismos de paso de parámetros, el acceso al sistema operativo y más. El compilador realiza suposiciones en función del sistema de ejecución específico para generar código. Normalmente, el sistema de ejecución se encarga de configurar y gestionar la pila y el montón , y puede incluir características como la recolección de basura , la programación multihilo u otras características dinámicas del lenguaje. [ 3 ]
Ciclo de instrucción
El ciclo de instrucción es el ciclo que sigue la CPU desde el arranque hasta el apagado del ordenador para procesar las 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, procesándose cada instrucción antes de que comience la siguiente. En la mayoría de las CPU modernas, los ciclos de instrucciones se ejecutan concurrentemente , y a menudo en paralelo , mediante una tubería de instrucciones : la siguiente instrucción comienza a procesarse antes de que la anterior haya finalizado, lo cual es posible porque el ciclo se divide en pasos separados. [ 4 ]
Virtual
Una máquina virtual (VM) proporciona la funcionalidad de un ordenador físico, implementada parcial o totalmente como una capa de software , en lugar de acceder directamente al sistema anfitrión. Mediante la virtualización , una VM proporciona un sistema informático lógicamente independiente del ordenador anfitrión y de otras VM en el mismo, a través de una capa de software relativamente ligera que permite un rendimiento relativamente alto, aunque a costa de estar limitada por la tecnología del anfitrión. Mediante la emulación , una VM proporciona un ordenador distinto que puede diferir significativamente de la tecnología del sistema informático anfitrión, pero generalmente a costa de un rendimiento relativamente lento debido a una capa de software más gruesa.
Una tecnología de máquina virtual (VM) puede variar en alcance. Una VM de sistema (también conocida como VM de virtualización completa ) proporciona la funcionalidad necesaria para ejecutar un sistema operativo independiente . Un hipervisor utiliza la ejecución nativa para compartir y administrar el hardware, lo que permite múltiples entornos aislados entre sí, pero que existen en la misma máquina física. Los hipervisores modernos utilizan virtualización asistida por hardware , hardware específico para virtualización, principalmente de las CPU del host. En cambio, una VM de proceso (como los entornos de ejecución de .NET , Java y Python ) ejecuta un programa informático en un entorno independiente de la plataforma.
Algunos emuladores, como QEMU y los emuladores de consolas de videojuegos , están diseñados para emular (o "imitar virtualmente") diferentes arquitecturas de sistema, lo que permite 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 un ordenador mediante el núcleo . Estos términos no son universalmente intercambiables.
Interpretado
Un intérprete ejecuta código que se encuentra en un formato que permite su ejecución directa. Ya se han realizado todos los pasos de preparación necesarios para el entorno. Un ejecutable puede ser ejecutado directamente por una CPU (incluida una CPU virtual). El código fuente puede ejecutarse en un entorno que lo admita. Por ejemplo, JavaScript y Python se ejecutan mediante software intérprete que no requiere compilación.
Véase también
- Ejecutable : Datos que hacen que una computadora siga las instrucciones indicadas.
- Contador de programa : registro que almacena en qué punto de un programa se encuentra un procesador.
- Fase del ciclo de vida del programa
Referencias
- ^ Bovet , Daniel P.; Cesati, Marco (2005). Comprensión del kernel de Linux (3 ed.). Sebastopol, CA: O'Reilly. ISBN 0-596-00565-2OCLC 64549743
- ↑ "Diferencia entre intercambio y cambio de contexto" . GeeksforGeeks . 10 de junio de 2021. Consultado el 10 de agosto de 2022 .
- ↑ Aho, Alfred V.; Lam , Monica Sin-Ling ; Sethi, Ravi ; Ullman, Jeffrey David (2007). Compiladores: Principios, técnicas y herramientas (2.ª ed.). Boston, MA, EE. UU.: Pearson Education . pág. 427. ISBN 978-0-321-48681-3.
- ↑ Crystal Chen, Greg Novick y Kirk Shimano (2000). "Pipelining" . Recuperado el 26 de junio de 2019 .
- Terminología informática