第07章 程序是在何种环境中运行的
热身问题
1:应用的运行环境,指的是什么?
指操作系统和计算机本身(¥[硬件])的种类。应用的运行环境通常使用类似于Windows(OS)和AT兼容机(硬件)这样的¥[OS]和硬件的种类来表示的。AT¥[兼容机]是指,可以和IBM开发的PC/AT在硬件上相互兼容的计算机的总称。称为“PC/AT兼容机”。
2:Macintosh用的操作系统(MacOS),在AT兼容机上能运行呢?
¥[无法运行],不同的硬件种类需要不同的操作系统。
3:Windows上的应用,在MacOS上能运行么?
无法运行,应用是为了在特定操作系统上运行而做成的。
4:Java虚拟机的功能是什么?
运行Java应用的¥[字节代码]。只要分别为各个环境安装专用的Java虚拟机,同样的字节代码就能在各种环境下运行了。
7.1 运行环境 = 操作系统 + 硬件
运行环境 = 操作系统+硬件,程序中包含着运行环境这一内容。操作系统和硬件决定了程序的运行环境。同一类型的硬件可以选择安装多种操作系统。CPU只能解释器本身固有的机器语言。不同的CPU能解释的机器语言的种类也是不同的。
由于同一个程序能够被大量用户使用,所以说程序具有很大的价值。即使是自由软件(free soft)被很多人使用,也是很令人开心的。
机器语言的程序称为本地代码(native code)。程序员用C语言等编写的程序,在编写阶段仅仅是文本文件。文本文件在任何环境下都能显示和编辑。我们称之为源代码。通过对源代码进行编译,就可以得到本地代码。
CPU负责解析并运行从源代码编译而来的本地代码。
7.2 Windows克服了CPU以外的硬件差异
计算机的硬件¥[不仅仅]是由¥[CPU]构成的,还包括用于存储程序指令和数据的内存,以及通过I/O连接的键盘、显示器、硬盘、打印机等¥[外围设备]。
计算机如何控制这些外围设备?Windows操作系统为克服这些硬件构成的差异作出了很大贡献。Windows之前,MS-DOS时代,不同机型的¥[内存和I/O地址]的构成等都是不同的,因此每个机型都需要专门的应用。因为这些应用软件中存在着¥[直接操作]计算机硬件的部分。这是因为一是当时MS-DOS的功能尚不完善,二是为了提高程序的运行速度。
不过随着Windows的广泛使用,这样的局面也得到了大幅改善。因为只要Windows能够运行,这样的应用(本地代码)在任何机型上都可以运行。在Windows的应用软件中,键盘输入,显示器输出等并不是直接向¥[硬件]发送指令,而是通过向Windows发送指令来间接实现。因此,程序员就不用注意内存和I/O地址的不同构成了。因为Windows操作的是硬件而非软件,而且针对不同的机型,这些硬件的构成也是有差异的。所以,Windows本身则需要为¥[不同的机型]分别提供专用的版本。其实Windows本身也是无法吸收CPU类型的差异,Windows针对特定的CPU有各自的本地代码。
同样类型的计算机,可安装的操作系统类型也会有很多种选择。当然,应用程序则必须根据不同的操作系统来专门开发。CPU的种类不同,所对应的¥[机器语言]也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同。
应用程序向¥[操作系统]¥[传递指令]的¥[途径]称为¥[API](Application Programming Interface)。API提供了任何程序都可以利用的¥[函数组合]。像键盘输入、鼠标输入、显示器显示等同外围设备进行输入输出操作的功能,都是通过API提供的。
在同类型的操作系统下,不管硬件如何,API基本上没有差别。因而,针对某特定操作系统的API所编写的程序,在任何硬件上都可以运行。当然,由于CPU种类不同,机器语言也不相同,因此¥[本地代码]当然也是不同的,这种情况下,就需要能够生成各CPU专用的本地代码的¥[编译器],来对¥[源代码]进行重新¥[编译]了。
总之,程序(本地代码)的运行环境是有操作系统和硬件决定的。
7.6 提供相同运行环境的Java虚拟机
还有一种方法能够提供不依赖于特定硬件及操作系统的程序运行环境,如Java。
Java有两个层面的意思。一是作为¥[编程语言]的Java,另一个是作为程序¥[运行环境]的Java。同其他编程语言一样,Java也是将Java语法记述的源代码编译后运行。不过,编译后生成的不是特定CPU使用的本地代码,而是名为¥[字节代码]的程序。字节代码的运行环境称为Java¥[虚拟机](JavaVM,Java Virtual Machine)。Java虚拟机是一边把Java字节代码逐一转换成本地代码一边运行的。
例如,在使用用于AT兼容机的Java编译器和Java¥[虚拟机]的情况下,编译器会将程序员编写的¥[源代码](sample.java)转换成¥[字节代码](sample.class)。而Java虚拟机(Java.exe)则会把字节代码变换成AT兼容机的CPU使用的¥[本地代码],然后由CPU负责实际的处理。
在程序运行时,将编译后的字节代码转换成本地代码,这样的操作方法看上去有些迂回,但由此可以实现同样的字节代码在不同的环境下运行。如果能够结合为各种类型的¥[操作系统]和¥[硬件]做成的Java虚拟机,那么,同样字节代码的应用就可以在任何环境下运行了。
PAD(Personal Digital Assistant)是指可以放入手提包中的小型手持计算机。也称为“¥[手持设备]”。
例如Windows有Windows专用的Java虚拟机,Maintosh也有Macintosh专用的Java虚拟机。从操作系统方面来看,Java虚拟机是一个¥[应用]。而从Java应用方面来看,Java虚拟机就是¥[运行环境]。Java虚拟机最大的问题就是速度问题,因为虚拟机每次运行时都要把字节代码¥[变换成]本机代码。
7.7 BIOS和引导程序
Windows中存在着著名的BIOS(Basic Input/Output System)的系统,BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS有“¥[引导程序]”的功能,引导程序是存储在启动驱动器起始区域的小程序。引导程序能够把OS加载到内存中运行。虽然¥[启动应用]是OS的功能,但是OS并不能¥[启动]自己,而是通过引导程序来启动。
1:运行环境=操作系统(Operating System)+硬件,操作系统和硬件决定了程序的运行环境。
2:同一类型的硬件可以选择安装多种操作系统。
3:从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数。CPU只能解释其本身固有的机器语言。不同的CPU能解释的机器语言的种类也是不同的。
4:机器语言的程序称为本地代码(native code)(native |ˈneɪtɪv| noun 本地人 原住民 adj原住民的;nature |ˈneɪtʃə(r)| noun 本质 自然界)。