读《程序是怎样跑起来的》第七章有感

在第七章中主要了解到了程序的运行环境。
运行环境=操作系统+硬件
应用的运行环境通常是用类似于Windows(OS)和AT兼容机(硬件)这样的OS和硬件的种类来表示的。不同的硬件种类需要不同的操作系统。同一类型的硬件可以选择安装多种操作系统。例如,同样的AT兼容机中,既可以安装Windows,也可以安装Linux等操作系统。正因如此,Office2007的运行环境中,把硬件和操作系统的种类这两方面内容都列了出来。不过,Windows及Linux操作系统也存在多种版本。根据应用的具体情况,有时只有在特定版本的操作系统上才能运行。从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数。为了保证Office2007的正常运行,需要具备Pentium等被称为x86的CPU(微处理器)。CPU只能解释其自身固有的机器语言。不同的CPU能解释的机器语言的的种类也是不同的。例如,CPU有x86、MIPS、SPARC、PowerPC等几种类型,它们各自的机器语言是完全不同的。机器语言的程序称为本地代码。程序员用C语言等编写的程序,在编写阶段仅仅是文本文件。文本文件在任何环境下都能显示和编辑,我们称之为源代码。通过对源代码进行编译,就可以得到本地代码。在市面上出售的用于Windows的应用软件包CD-ROM中,收录的就不是源代码,而是本地代码。
Windows克服了CPU以外的硬件差异。计算机的硬件不仅仅有CPU构成,还包括用于存储程序指令和数据的内存,以及通过I/O连接的键盘、显示器、硬盘、打印机等外围设备。在Windows的应用软件中,键盘输入、显示器输出等并不是直接向硬件发送指令、而是通过向Windows发送指令来间接实现的。因此,程序员就不用注意内存和I/O地址的不同构成了。因为Windows操作的是硬件而非应用软件,而且针对不同的机型,这些硬件的构成也是有差异的。不过,Windows本身则需要为不同的机型分别提供专用的版本,比如用于AT兼容机的Windows,用于PC-9081的Windows等。而即便是Windows,也依然无法吸收CPU类型的差异。这是因为,市面上销售的Windows应用软件,都是用特定的CPU的本地代码来完成的。
应用程序向操作系统传递指令的途径称为API。Windows及Unix系统操作系统的API,提供了任何应用程序都可以利用的函数组合。因为不同操作系统的API是有差异的,因此,将同样的应用程序移植到其他操作系统时,就必须要重写应用中利用到API的部分。像键盘输入、鼠标输入、显示器输出、文件输入输出等同外围设备进行输入输出操作的功能,都是通过API提供的。在同类型操作系统下,不管硬件如何,API基本上没有差异。程序(本地代码)的运行环境是由操作系统和硬件来决定的。
利用虚拟机获取其他操作系统环境。通过利用虚拟机,我们就可以在Macintosh的Mac操作系统上运行Windows应用了。Virtual PC for MAC可以使Macintosh这一硬件变得同AT兼容机一样,从而能在硬件上安装Windows。除虚拟机的方法外,还有一种方法能够提供不依赖于特定硬件及操作系统的程序运行环境,那就是Java。Java有两个层面的意思,一个是作为编程语言Java,另一个是作为程序运行环境的Java。同其他编程语言相同,Java也是将Java语法记述的源代码编译后运行。不过,编译后生成的并不是特定CPU使用的本地代码,而是名为字节代码的程序。字节代码的运行环境就称为Java虚拟机。Java虚拟机是一边把Java字节代码诼一转换成本地代码一边运行的。

posted @ 2024-02-29 20:54  左岸的咖啡屋  阅读(34)  评论(0)    收藏  举报