运行环境等于操作系统加硬件,也就是说操作系统和硬件决定了程序的运行环境。同一类型的硬件可以选择安装多种操作系统。若从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数,由此我们可以知道CPU的种类有很多且只能解释其自身固有的机器语言,而且CPU负责解析并运行从源代码编译来的本地代码。那么什么是源代码什么?又是本地代码呢?源代码就是在任何环境下都能显示和编辑都能显示和编辑的文本文件,本地代码就是通过对源代码进行编译得到的代码也是机器语言的程序。像Windows的应用软件包CD-ROM中收录的就是本地代码。我们知道计算机的硬件,包括CPU用于存储程序指令和数据的内存,以及通过I/O连接的键盘、显示器、硬盘、打印机等外围设备,但计算机是如何控制这些外围设备的呢?这和计算机的机型有着很大的关系。在刚开始用的是Windows的前身是MS-DOS应用,但应该运用功能尚不完全且要提高程序的运行速度,因此之后Windows操作系统的问世克服了这些硬件构成的差异,下图是MS-DOS应用与Windows应用如何完成对硬件的控制的过程图:
有图我们就可以知道MS- DOS应用大多都是不经过操作系统,而直接控制硬件Windows应用则是基本上都有Windows来完成对硬件的控制的。但由于市面上的Windows应用软件都是用特定的CPU的本地代码来完成的,因此即便是Windows无法吸收CPU类型的差异。
前文我们已知CPU的类型不同所对应的机器语言也不同,同样的道理,操作系统的类型不同应用程序向操作系统传递指令的途径也不同,也就是API不同。
对于CPU类型的不同而导致同样的本地代码无法重复利用,我们可以利用FreeBSD系统中的Ports机制结合当前运行的硬件环境来编译应用的源代码,进而得到本地代码系统。而且若目标应用的源代码,Ports在硬件上就会自动使用FTP连接到相关站点来下载代码如图所示:
因此,可以说Ports能够克服包含CPU在内的所有硬件差异的系统。
我们也可以利用虚拟机软件来运行,其他操作系统的应用,例如Macintosh的Virtual PC for MAC虽然运行速度有点慢,但确实能正常运行。除此之外,我们还可以利用Java虚拟机提供运行环境,这种方法不依赖于特定硬件及操作系统,但加Java虚拟机提供的环境编译后生成的并不是特定cpu使用的本地代码,而是名为字节代码的程序。因此Java虚拟机也会出现无法进行完整互换的问题以及,以及我们使用只适用于某些特定硬件的功能时就会出现在其他Java虚拟机上无法运行或者功能使用受限等情况,还有就是运行速度的问题。
补充:BIOS存储在ROM中是预先内置在计算机主机内部的程序,他除了键盘磁盘显卡,等基本控制程序外,还有启动"引导程序"的功能。引导程序是存储在启动驱动器起始区域的小程序,其功能是把在硬盘等记录的OS加载到内存中运行。
标签:操作系统,Windows,程序,环境,硬件,源代码,CPU,运行 From: https://www.cnblogs.com/G-y-l-123/p/18024273