Execution
计算机或软件工程中的 execution 是计算机或虚拟机读取并执行计算机程序的指令的过程。程序的每一个指令都是为了解决某个特定问题必须执行的特定行为的描述。control unit 执行每条指令时对指令进行 ‘fetch-decode-execute’。随着执行机器执行指令,依据这些指令的语义产生特殊的效果。
计算机中的程序可能执行于批处理程序,或者用户在解释器的交互式会话中输入命令。这种情况下,“commands” 是简单的程序指令,它们被链接在一起执行。
Process
在执行前,程序必须先被编写。这通常在源码中完成,它在 complie time (在 link time 静态链接) 被编译为可执行对象。如果可执行对象被调用,通常被操作系统调用,将加载程序进入内存 (load time),可能执行 dynamic linking,随后通过将控制移动到程序的 entry point 开始执行;所以这些行为都依赖于操作系统的 Application Binary Interface。此时可执行文件开始执行,程序进入 run time。程序会运行到结束,要么正常 termination 要么 crash。
Executable
Executable code,executable file,executable program 有时被简称为 executable 或 binary,是指令的列表和数据,使计算机“根据编码的指令执行指定的任务”。
“Instructions” 传统上是指物理 CPU 上的 machine code 指令。
Context of execution
执行的环境至关重要。很少有程序在 bare machine 上执行。程序通常包含对其执行时可用的资源显式或隐式的假设。大部分程序运行于 multitasking operating system 和源语言指定的 run-time libraries 中,以使用计算机本身不提供的重要服务。这种支持性环境将程序从对计算机外围设备的直接操作种解放出来,提供一个更通用,更抽象的服务。
Context switching
为了使程序和 interrupt handlers 不受干扰的工作,并且共享相同的硬件内存和对 I/O 系统的访问,运行于具有单一 CPU/MCU 的数字系统之上的 multitasking operating systmes 之中,需要某些软件和硬件设施来追踪正在执行的进程数据 (内存页地址,寄存器等。),且能保存和恢复它们在被挂起之前的状态。这通过上下文转换完成。运行的程序通常会被分配一个 Process Context IDentifiers。
在基于 Linux 的操作系统中,存储在寄存器中的数据集通常被存储在内存中的进程描述符中,以实现上下文转换。也会使用 PCIDs。
Runtime system
runtime system,也被称为runtime environment。
大部分的编程语言都有某种形式的运行时系统,提供程序运行的环境。环境可以解决许多问题,包括应用内存的管理,程序如何访问变量,在 procedures 间传递参数的机制,与操作系统间的接口,等。编译器假设依赖于特定的运行期系统以产生正确的代码。通常运行期系统负责设置和管理 stack 和 heap,可能包含一些特性例如 garbage collection,threads 或其他内置于语言中的动态特性。
Interpreter
执行程序的系统被称为程序的 interperter。笼统的说,解释器直接执行程序。