- 1 运行环境 = 操作系统 + 硬件
- 2 Windows 克服了 CPU 以外的硬件差异
- 3 不同操作系统的 API 不同
- 4 FreeBSD Port 帮你轻松使用源代码
- 5 利用虚拟机获得其他操作系统环境
- 6 提供相同运行环境的 Java 虚拟机
- 7 BIOS 和引导
1 运行环境 = 操作系统 + 硬件
- 操作系统和硬件决定了程序的运行环境。
- 同一类型的硬件可以选择安装多种操作系统。
- 根据应用的具体情况,有时只有在特定版本的操作系统上 才能运行。


CPU 只能解释其自身固有的机器语言。不同的 CPU 能解释的机器 语言的种类也是不同的。例如,CPU 有 x86、MIPS、SPARC、PowerPCA 等几种类型,它们各自的机器语言是完全不同的。
机器语言
的程序称为本地代码(native code)。程序员用 C 语言等 编写的程序,在编写阶段仅仅是文本文件。文本文件(排除文字编码的 问题)在任何环境下都能显示和编辑。我们称之为 源代码
。通过对源代 码进行编译,就可以得到本地代码。

2 Windows 克服了 CPU 以外的硬件差异
计算机的硬件并不仅仅是由 CPU 构成的,还包括用于存储程序指 令和数据的内存,以及通过 I/O 连接的键盘、显示器、硬盘、打印机等 外围设备.Windows 操作系统对克服这些硬件构成的差异做出了很大贡献。
例如,如果想使用当时大热的文字处理软件——JustSystem 的“一 太郎”的话,就必须要买各个机型专用的一太郎软件(图 7-3(a))。这是 因为,应用软件的功能中,存在着直接操作计算机硬件的部分。

MS-DOS 应用大多都是不经过操作系统而直接控制硬件的,而 Windows 应 用则基本上都由 Windows 来完成对硬件的控制

而即便是 Windows,也依然无法吸收 CPU 类型的差异。这是因 为,市面上销售的 Windows 应用软件,都是用特定的 CPU 的本地代码 来完成的。
3 不同操作系统的 API 不同
同样机型的计算机,可安 装的操作系统类型也会有多种选择。CPU 的类型不同,所对应的机器语言也不同,同样的道理,操作系统 的类型不同,应用程序向操作系统传递指令的途径也是不同的。
应用程序向操作系统传递指令的途径称为API(Application Programming Interface)
。因为不同操作系统的 API 是 有差异的,因此,将同样的应用程序移植到其他操作系统时,就必须 要重写应用中利用到 API 的部分。像键盘输入 、鼠标输入、显示器输 出、文件输入输出等同外围设备进行输入输出操作的功能,都是通过 API 提供的。在同类型操作系统下,不管硬件如何,API 基本上没有差别。
4 FreeBSD Port 帮你轻松使用源代码
Unix 系列操作系统 FreeBSD 中,存在一种名为 Ports 的机制
。该 机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可 以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话, Ports 就会自动使用 FTPA 连接到相关站点来下载代码(图 7-5)。

5 利用虚拟机获得其他操作系统环境
即使不通过移植,也可以使用别的方法来运行其他操作系统的应 用。这里我们要介绍的方法就是利用虚拟机软件
。
6 提供相同运行环境的 Java 虚拟机
除虚拟机的方法之外,还有一种方法能够提供不依赖于特定硬件 及操作系统的程序运行环境,那就是 Java。
同其他编程语言相同,Java 也是 将 Java 语法记述的源代码编译后运行。不过,编译后生成的并不是特 定 CPU 使用的本地代码,而是名为 字节代码的程序。字节代码的运行 环境就称为 Java 虚拟机(JavaVM,Java Virtual Machine)
。Java 虚拟 机是一边把 Java 字节代码逐一转换成本地代码一边运行的。如果能够结合各种类型的操作系统和硬件作成 Java 虚拟机, 那么,同样字节代码的应用就可以在任何环境下运行了.

7 BIOS 和引导
程序的运行环境中,存在着名为 BIOS
(Basic Input/Output System)的系统。 BIOS 存储在 ROM 中,是预先内置在计算机主机内部的程序。 BIOS 除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序” 的功能。 引导程序是
存储在启动驱动器起始区域的小程序。
开机后,BIOS 会确认硬件是否正常运行,没有问题的话就会启动 引导程序。引导程序的功能是把在硬盘等记录的 OS 加载到内存中运 行。虽然启动应用是 OS 的功能,但 OS 并不能自己启动自己,而是通 过引导程序来启动。