阅读《程序是怎样跑起来的》第7章,我对于程序在不同操作系统的运行原理和过程有了认识。正如书中所言,不同的操作系统和硬件影响程序的运行环境。首先是操作系统例如Windows、Linux等,因为部分应用所使用的操作系统不同,版本不同,因此会影响应用的运行,例如书中举例的2007 Mrcosoft Office System只能在Windows系统下运行。而硬件方面则主要是CPU的版本,因为不同的CPU版本所能“读懂”的机器语言也不相同,程序员所编写的代码文件是“源代码”,而源代码在被编译过后才是本地代码,本地代码才能被转变为机器语言来运行,因此不同的CPU对应的机器语言不同,程序中的本地代码也并非全部适用。因此不同的操作系统和硬件影响程序的运行环境。
但是Windows系统可以克服除CPU以外的所有硬件差异,因为在Windows系统环境下的应用运行时,并非直接将输入输出直接传递给硬件,而是将这些指令传递给Windows系统,再通过系统来驱动应用。这也正是解决了不同机型的应用传递给操作系统指令的途径(API)不同的问题,因为Windows和Linux系统提供了能够使任何应用程序都能使用的函数组合,而在Unix系统上则是通过FreeBSD的ports机制来解决应用的本地代码不在硬件的情况,通过直接连接到相关站点直接下载代码。并且可以根据源代码来适配机型编译本机CPU能够读懂的本地代码。
当然也可以通过虚拟机的方式来下载对应应用能够运行的系统环境。或者是JAVA虚拟机这种将源代码编译为字节代码文件,并在不同的系统下利用对应的JAVA虚拟机将字节代码转变为能够使用本机的机器语言,如此虽好但是因为步骤繁琐会导致运行速度变慢。