Ejecución (informática)

From Wikipedia, the free encyclopedia

En ingeniería informática y de software, la ejecución es el proceso mediante el cual una computadora o máquina virtual interpreta y ejecuta las instrucciones de un programa. Cada instrucción describe una acción específica que debe realizarse para resolver un problema específico. A medida que la máquina ejecuta las instrucciones, se producen efectos específicos según la semántica de dichas instrucciones.

Los programas pueden ejecutarse de manera autónoma dentro de un proceso por lotes, sin intervención directa del usuario. También es posible que una persona interactúe con el sistema introduciendo instrucciones en un intérprete de comandos. En este último caso, cada orden introducida es procesada de forma secuencial.

Antes de su ejecución, un programa debe escribirse. Esto generalmente se hace en código fuente, que luego se compila para generar un ejecutable. Este ejecutable es invocado, normalmente por el Sistema operativo, que carga el programa en memoria (tiempo de carga), posiblemente realiza el enlazado dinámico y luego inicia la ejecución transfiriendo el control al punto de entrada del programa; todos estos pasos dependen de la interfaz binaria de aplicaciones (ABI) del sistema operativo, en este punto, comienza la ejecución y el programa entra en tiempo de ejecución.

Ejecutable

El ejecutable, un archivo ejecutable o un programa ejecutable, a veces simplemente llamado binario, es una lista de instrucciones que permiten a una computadora llevar a cabo acciones específicas siguiendo la lógica codificada en él,[1] a diferencia de un archivo de datos que debe ser interpretado por un programa para que tenga sentido.

La interpretación del término varía según el contexto. Tradicionalmente, cuando se habla de “instrucciones” se hace referencia a instrucciones en código máquina destinadas a una CPU física. No obstante, en ciertos entornos también se considera ejecutable a un archivo que contiene instrucciones interpretadas o compiladas para otro tipo de motor de ejecución, como ocurre con el bytecode o con algunos lenguajes de script.

Contexto de ejecución

El contexto en el que se ejecuta el programa es crucial. Muy pocos programas se ejecutan directamente en la máquina. Los programas suelen contener suposiciones implícitas y explícitas sobre los recursos disponibles durante la ejecución. La mayoría se ejecutan dentro de un sistema operativo multitarea y bibliotecas de tiempo de ejecución específicas del lenguaje de programación, que proporcionan servicios esenciales que el propio ordenador no ofrece directamente.

Cambio de contexto

Para que los programas y los manejadores de interrupciones puedan ejecutarse sin estorbarse entre sí, compartiendo la memoria física y los recursos de entrada/salida en un sistema operativo multitarea que funciona sobre una CPU o microcontrolador único, es necesario disponer de mecanismos especiales de software y hardware que permitan conservar y restaurar el estado de cada proceso. Este estado incluye información como registros, direcciones de memoria y otros datos relevantes que describen lo que estaba haciendo la tarea en ejecución antes de ser interrumpida. Esto se logra mediante un cambio de contexto.[2][3] En muchos sistemas, a cada proceso se le asigna un identificador de contexto de proceso identificador de contexto de proceso (PCID) que facilita esta gestión

En los sistemas operativos basados en Linux, un conjunto de datos almacenados en registros se suele guardar en un descriptor de proceso en memoria para implementar el cambio de contexto.

Tiempo de ejecución

El tiempo de ejecución es la fase final del ciclo de vida de un programa informático, en la que el código se ejecuta en la unidad central de procesamiento (CPU) del ordenador como código máquina. En otras palabras, el "tiempo de ejecución" es la fase en la que se ejecuta un programa.

Un error en tiempo de ejecución se detecta después o durante la ejecución de un programa, mientras que un error en tiempo de compilación lo detecta el compilador antes de que el programa se ejecute. La comprobación de tipos, la asignación de registros, la generación de código y la optimización del código se realizan normalmente en tiempo de compilación, pero pueden realizarse en tiempo de ejecución dependiendo del lenguaje y el compilador.

Existen muchos otros errores en tiempo de ejecución que se gestionan de forma diferente en cada lenguaje de programación, como los errores de división por cero, los errores de dominio, los errores de índice fuera de rango en matrices, los errores de subdesbordamiento aritmético, varios tipos de errores de subdesbordamiento y desbordamiento, y muchos otros errores en tiempo de ejecución generalmente considerados fallos de software que pueden o no ser detectados y gestionados por un lenguaje de programación específico.

Detalles de implementación

Cuando se va a ejecutar un programa, un cargador primero realiza la configuración de memoria necesaria y enlaza el programa con las bibliotecas de enlace dinámico que necesite; luego, la ejecución comienza desde el punto de entrada del programa. En algunos casos, el entorno de ejecución del lenguaje o la implementación delega estas tareas, aunque esto es poco común en los lenguajes más utilizados en los sistemas operativos de consumo habituales.

Algunas tareas de depuración de programas solo pueden realizarse (o son más eficientes o precisas) durante la ejecución. Ejemplos de ello son los errores lógicos y la comprobación de límites de matrices. Por este motivo, algunos errores de programación no se detectan 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 en tiempo de ejecución".

Errores de la aplicación (excepciones)

El manejo de excepciones es una característica del lenguaje diseñada para gestionar errores en tiempo de ejecución. Proporciona una forma estructurada de detectar situaciones completamente inesperadas, así como errores predecibles o resultados inusuales, sin la necesidad de realizar comprobaciones de errores en línea, algo fundamental en lenguajes que carecen de esta característica.

Sistema de tiempo de ejecución

Un sistema de tiempo de ejecución, también llamado entorno de ejecución, implementa principalmente partes de un modelo de ejecución. Esto no debe confundirse con la fase de ejecución de un programa, durante la cual el sistema de ejecución está en funcionamiento. Al considerar el sistema de ejecución como algo 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, un software que proporciona al programador un entorno más conveniente para ejecutar programas durante su producción ( pruebas, etc.), mientras que el segundo (RTE) sería la instancia concreta de un modelo de ejecución aplicado al programa desarrollado, que luego se ejecuta en el sistema de ejecución mencionado.

La mayoría de los lenguajes de programación cuentan con algún tipo de sistema de ejecución que proporciona un entorno para la ejecución de los programas. Este entorno puede abordar diversos aspectos, como la gestión de la memoria de la aplicación, el acceso a las variables, los mecanismos para pasar parámetros entre procedimientos, la interacción con el sistema operativo, entre otros. El compilador realiza suposiciones, dependiendo del sistema de ejecución específico, para generar código correcto. 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, hilos u otras características dinámicas integradas en el lenguaje.

Ciclo de instrucción

El ciclo de instrucción es el ciclo que sigue la unidad central de procesamiento (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 de forma secuencial, 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 de forma concurrente y, a menudo, en paralelo, a través de una segmentación de instrucciones: la siguiente instrucción comienza a procesarse antes de que haya finalizado la anterior, lo cual es posible porque el ciclo se divide en pasos separados.[4]

Intérprete

Un sistema que ejecuta un programa se denomina intérprete del programa. En términos generales, un intérprete ejecuta directamente un programa. Esto contrasta con un traductor de lenguajes, que convierte un programa de un idioma a otro antes de su ejecución.

Máquina virtual

Véase también

Referencias

Related Articles

Wikiwand AI