《程序是怎么跑起来的》第七章 程序是在什么环境中运行的

7.1 运行环境 = 操作系统 + 硬件

《程序是怎么跑起来的》第七章 程序是在什么环境中运行的

操作系统和硬件决定了程序的运行环境

2007 office 需要的运行环境:
《程序是怎么跑起来的》第七章 程序是在什么环境中运行的
同一类型的硬件可以选择安装多种操作系统,Windows和Linux操作系统也存在多种版本,根据应用的具体情况,有时只有在特定版本的操作系统上才能运行

从程序的运行环境这一角度考量硬件时,CPU的种类是特别重要的参数。CPU只能解释其自身固有的机器语言,不同的CPU能解释得机器语言的类型也不同,如CPU有x86,MIPS,PowerPC等,它们各自的机器语言是完全不同的

机器语言的程序称为本地代码,程序员用C语言等编写的程序,在编写阶段仅仅是文本文件,文本文件在任何环境下都可以显示和编辑,我们称之为源代码,通过对源代码进行编译,就可以得到本地代码,Windows应用程序的本地代码,通常是EXE文件和DLL文件等形式

《程序是怎么跑起来的》第七章 程序是在什么环境中运行的

7.2 Windows克服了CPU以外的硬件差异

计算机的硬件并不仅是由CPU构成的,还包括内存,I/O连接的键盘,鼠标,显示器,硬盘等外围设备

Windows操作系统对克服这些硬件构成的差异做出了很大贡献,在MS-DOS时代,如想要使用“一太郎(日本一款文字处理软件)”,就必须购买各个机型专用的一太郎软件,因为应用程序的功能中,存在着直接操作计算机硬件的部分。这么做是因为当时MS-DOS的功能并不完善,且为了提高程序的运行速度
《程序是怎么跑起来的》第七章 程序是在什么环境中运行的

不过随着Windows的广泛使用,只要Windows能正常运行,同样的应用(本地代码)在任何机型上都可以运行。在Windows的应用软件中,I/O并不是直接向硬件发送指令,而是向Windows发送指令完成的。但Windows本身需要为不同的机型提供专用的版本

《程序是怎么跑起来的》第七章 程序是在什么环境中运行的

7.3 不同操作系统的API不同

应用软件必须根据不同的操作系统类型来专门开发,CPU的类型不同,所对应的机器语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同

应用程序向操作系统传递指令的途径统称为API 应用程序编程接口,Windows及Unix系列操作系统的API,提供了任何应用程序都可以利用的函数组合。因为不同的操作系统的API是有差异的,因此将同样的应用程序移植到其它操作系统时,就必须重写应用中用到的API部分。像键盘输入,鼠标输入,显示器输出等外围设备进行输入输出操作的功能,都是通过API提供的

7.4 FreeBSD Port

既然CPU类型不同会导致同样的本地代码无法重复利用,那么为什么不直接将源代码分发给程序?

在Unix系列操作系统FreeBSD中,存在一种名Ports的机制,该机制可以结合当前运行的硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话,Ports就会使用FTP连接到相关站点下载

Ports能够克服包含CPU在内的所有硬件差异的系统,Ports表示porting(移植)的意思,根据不同的运行环境来重新调整程序,一般也称为移植

7.5 利用虚拟机获得其它操作系统环境

可以使用虚拟机软件来运行其它操作系统的应用,如在Mac上使用虚拟机软件运行Windows的应用

7.6 提供相同运行环境的Java虚拟机

除了虚拟机的方法外,还有一种方法能够不依赖于特定硬件及操作系统的程序运行环境,就是java

java有两个层面的意思,一个是作为编程语言的java,另一个是作为程序运行环境的java

java将java语法记述的源代码运行后,编译生成的并不是COU使用的本地代码,而是名为字节代码的程序。字节代码的运行环境就是java虚拟机,java虚拟机就是一边把java字节代码逐一转换成本地代码一边运行的

java虚拟机可以实现同样的字节代码在不同的环境下运行

7.7 BIOS和引导

程序的运行环境中,存在着名为BIOS的系统,BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘,磁盘,显卡等基本控制程序外,还有启动引导程序。引导程序是存储在启动驱动器起始区域的小程序,操作系统的启动驱动器一般是硬盘

开机后,BIOS会确认硬件是否正常运行,没有问题的话就会启动引导程序,引导程序的功能就是把在硬盘等记录的OS加载到内存中运行,虽然启动应用是OS的功能,但OS不可以自己启动自己,而是通过引导程序来启动