每个程序都在运行时环境中运行吗?

时间:2015-10-03 09:41:26

标签: operating-system runtime-environment

我知道像Java或.NET程序这样的程序使用广泛的运行时系统来执行。但是我在一本关于OS的书中读到了一些内容(在那里没有详细解释),这听起来像用户编写的任何程序在运行时系统中运行而不是直接在操作系统上运行。

给出的示例是,当您读取文件时,您不会为读取的每个位调用操作系统函数,而是将位或字节读入由运行时系统管理的缓冲区中,并且何时为空,你再次调用系统函数。

这是否意味着严格来说,任何程序都在某种运行时环境中运行(除了可能用程序集编写的prgram)?

2 个答案:

答案 0 :(得分:0)

正确的想法是,操作系统下的所有内容都在操作系统的运行时中运行。

音频文件,确定它需要操作系统运行时才能通过OS音频驱动程序并产生一些疯狂的噪音。

本机程序,确实在OS运行时之上运行。

但DotNet和Java,它们有点特别,它们在OS运行时创建一个更抽象的层,将其标准化为所需的形状和形式,统一运行时,然后针对它运行其字节码/汇编,来回转换必要的细节两种方式。

但可以肯定的是,大多数代码都是针对某种运行时环境运行的。 您可以将此概念抽象为操作系统核心本身,它确实在某种CPU环境中运行,也许您可​​以将其称为本机运行时:)。

但即使这样也不完全正确。也许你知道,今天的x86处理器从外部看起来像CISC架构,但是在线路中,处理器实际上是将那些大的复杂CISC指令拆分成RISC指令序列,然后执行并重新排序。它也是某种运行时环境。

很奇怪,但是如果你看看处理器本身,那么物理定律可以看作是运行时的下一个抽象:)。

极端吗?真? 那么考虑理论物理/宇宙学思想,我们可以在全息宇宙中实际生活,模拟,并且不会注意到:)。

这是一个运行时的想法? :)

答案 1 :(得分:0)

根据定义,是的。

软件需要一些执行环境,否则它只是存储在某个存储设备上的一组位。有几种类型的运行时环境,有时不同类型的环境之间的区别是模糊的。

在一个层面上,硬件提供环境,包括指令集架构,设备提供的服务,BIOS等。

然后是操作系统提供的环境。操作系统在各种复杂程度下工作,但通常作为运行程序和主机硬件之间的中介。某些操作系统相当薄,从某种意义上说,程序能够在没有操作系统调解的情况下完成任务。其他人阻止软件直接与硬件通信,因此程序必须发出请求(例如通过操作系统设施或服务),然后操作系统直接与硬件交互。

在另一个级别是指定与编程语言相关联的环境。许多编程语言的语义用一些抽象机器上的执行来表示。示例包括C和C ++,其中每个表达式,每个声明和每个语句在抽象机器上都有一组已定义的效果。许多未定义行为的实例(在标准中指定)相当于语言语句能够超出该抽象机器可接受范围的情况。

与以前类型的环境密切相关,有些语言与某种形式的库相关联。该标准库提供了使程序员工作更轻松的工具。几乎所有中等高级语言都与库相关联 - C,C ++,Java,Ada等等。其中许多功能可以用语言本身实现,但其他功能需要主机系统的帮助(例如操作系统,硬件)等等)因此可能用另一种语言实现(例如汇编程序)。

下一级是运行时环境(例如Java虚拟机),其中执行程序(某种格式)。程序(通常)仅与该运行时环境通信,后者又从托管它的系统请求操作。有时程序可以直接与主机系统通信(通过称为thunking,本机接口等机制)。

然后有程序可以动态地解释代码(例如语言解释器),因此,实际上,源代码本身就是程序,解释器从托管它的环境中请求服务。

即使用汇编编写的程序也可以在某些环境中运行。程序集被转换为特定于机器的指令,这些指令特定于某些主机环境(包括硬件,可能是操作系统,可能是操作系统托管的其他程序)。

还有一些特殊类型的操作系统(例如虚拟机管理程序)可以托管其他操作系统 - 并且通常允许多个操作系统在单个硬件平台上同时执行。当操作系统尝试访问硬件时,该调用将被虚拟机管理程序拦截并调解,而虚拟机管理程序又会发出主机硬件的请求。

问题是,所有这些都涉及软件对其执行的环境做出一些假设。甚至用汇编程序编写的软件也可以直接与硬件通信,它假定一组硬件和与该硬件通信的方式。固件是一种假定它在某些设备上运行的软件(例如主板,内存控制器,硬盘控制器等)。