程序是在何种环境中运行的
问题
-
应用的运行环境,指的是什么?
操作系统+硬件
-
Macintosh用的操作系统MacOS,在AT兼容机上能运行吗?
无法运行,不同的硬件种类需要不同的操作系统
-
Windows上的应用,在MacOS上能运行吗?
无法运行,应用是为了在特定操作系统上运行而作成的
-
FreeBSD提供的Ports,指的是什么?
通过使用源代码来提供应用,并根据运行环境进行整合编译,从而得以在该环境下运行的机制
-
在Macintosh上可以利用的Windows环境模拟器称为什么?
Virtual PC for Mac
-
Java虚拟机的功能是什么?
运行Java应用的字节代码。只要分别为各个环境安装专用的Java虚拟机,同样的字节代码就能在各种环境下运行了。
运行环境=操作系统+硬件
操作系统和硬件决定了程序的运行环境
同一类型的硬件可以选择安装多种操作系统。
从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数。CPU只能解释其自身固有的机器语言。不同的CPU能解释的机器语言的种类也是不同的。机器语言的程序称为本地代码native code。程序员用C语言等编写的程序,在编写阶段仅仅是文本文件,我们称之为源代码。文本文件在任何环境下都能显式和编辑。通过对源代码进行编译,就可以得到本地代码。
Windows克服了CPU以外的硬件差异
计算机的硬件并不仅仅是由CPU构成的,还包括用于存储程序指令和数据的内存,以及通过I/O连接的外围设备。Windows操作系统对克服这些硬件构成的差异做出了很大贡献。在Windows的应用软件中,键盘输入、显示器输出等并不是直接向硬件发送指令,而是通过向Windows发送指令来间接实现的。因此,程序员就不用注意内存和I/O地址的不同构成了。
因为Windows操作的是硬件而非应用软件,而且针对不同的机型,这些硬件的构成也是有差异的。不过,Windows本身则需要为不同的机型分别提供专用的版本。应用软件则必须根据不同的操作系统类型来专门开发。CPU的类型不同,所对应的机器语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也是不同的。
应用程序向操作系统传递指令的途径称为API(Application Programming Interface),不同操作系统的API是有差异的。在同类型操作系统下,不管硬件如何,API基本上没有差别。因而,针对某特定操作系统的API所编写的程序,在任何硬件上都可以运行。由于CPU种类不同,机器语言也不相同,因此本地代码当然也是不同的。这种情况下,就需要利用能够生成各CPU专用的本地代码的编译器,来对源代码进行重新编译了。
FreeBSD Port帮你轻松使用源代码
Unix系列操作系统FreeBSD中,存在一种名为Ports的机制。该机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话,Ports就会自动使用FTP连接到相关站点来下载代码。
FreeBSD上应用的源代码,大部分都是用C语言来记述的。FreeBSD等Unix系列操作系统都带有标准的C编译器。C编译器可以结合FreeBSD的运行环境生成合适的本地代码。Ports能够克服包含CPU在内的所有硬件差异的系统。根据不同的运行环境来重新调整程序,一般也称为“移植”。
利用虚拟机获得其他操作系统环境
Virtual PC for Mac可以使Macintosh这一硬件变得同AT兼容机一样,从而能在该硬件上安装Windows。这样一来,Windows下的所有应用都可以正常运行了。Windows应用利用的是Windows操作系统的API。虽然表面上是Windows将硬件处理为了AT兼容机,但由于Virtual PC for Mac的作用,实际上运行的是Macintosh这一硬件。
提供相同运行环境的Java虚拟机
除虚拟机的方法之外,还有一种方法能够提供不依赖于特定硬件及操作系统的程序运行环境,那就是Java。大家说的Java,有两个层面的意思:一个是作为编程语言的Java,另一个是作为程序运行环境的Java。同其他编程语言相通,Java也是将源代码编译后运行。不过,编译后生成的并不是特定CPU使用的本地代码,而是名为字节代码的程序。字节代码的运行环境就称为Java虚拟机。Java虚拟机是一边把Java字节代码逐一转换成本地代码一边运行的。
在程序运行时,将编译后的字节diamante转换成本地代码,这样的操作方法看上去有些迂回,但由此可以实现同样的字节代码在不同的环境下运行。如果能够结合各种类型的操作系统和硬件作成Java虚拟机,那么同样的字节代码的应用就可以在任何环境下运行。
Windows、Macintosh都有专用的Java虚拟机。从操作系统方面来看,Java虚拟机是一个应用,而从Java应用方面来看,Java虚拟机就是运行环境。但它也有问题:
- 不同的Java虚拟机之间无法进行完整互换。
- 运行速度的问题
BIOS和引导
程序的运行环境中,存在着名为BIOS的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有启动引导程序的功能。引导程序是存储在启动驱动器趋势区域的小程序。操作系统的启动驱动器一般是硬盘,不过有时也可以是CD-ROM或软盘。
开机后,BIOS会确认硬件是否正常运行,没有问题的话就会启动引导程序。引导程序的功能是把在硬盘灯记录的OS加载到内存中运行。虽然启动应用是OS的功能,但OS并不能自己启动自己,而是通过引导程序来启动。