程序的运行环境 = 操作系统 + 具体硬件
硬件核心考虑参数为CPU,不同的CPU指令集不同,能解释的机器语言种类也不同,其只能解释自身的机器语言,也就是常说的cpu指令集
常见的有: x86、MIPS、SPARC、PowerPC
本地代码: 通过将源代码进行编译后生成的机器语言的程序成为本地代码(机器直接运行的代码)
源代码: 通过文本编辑工具书写的各类语言代码(高级代码,人更容易理解编写)
windows应用程序的本地代码,通常是exe文件及dll文件等形式,CPU负责解析并运行从源代码编译而来的本地代码
由于内存、IO等不同的硬件设备地址构成不同,因此在早期操作系统不够完善时,所开发的应用软件存在直接操作计算机硬件的部分,导致了不同硬件的计算机需要针对改硬件进行应用软件适配,造成了资源浪费。随着操作系统的晚上,这种情况得到改善,应用并不直接操作计算机硬件,而是通过操作系统提供的API接口进行实现相关功能,与计算机硬件的操作全部交予操作系统进行处理,在适配上针对不同的硬件,只需要进行操作系统的适配,只要操作系统能正常运行,同样的软件就可以运行,大大提高了利用效率。
由于应用软件都是使用特定的CPU的本地代码完成,因此操作系统当前还不能克服CPU的差异。
不同的操作系统API不同:
由于不同的操作系统所提供的API路径调用方式等不同,因此应用软件必须根据不同操作系统来做开发,将程序移植到其它操作系统时,需要重写应用中利用到API的部分,(像键盘输入,鼠标输入,显示器。文件等外围输入输出设备都是通过操作系统API提供的)
相同操作系统下:
API调用方式一致,因而针对某特定类型操作系统开发的应用,在任何安装改操作系统的硬件上都可以运行
通过源代码分发实现克服CPU差异:
通过结合当前运行的硬件环境来编译应用的源代码,生成本地代码,实现克服CPU差异
通过虚拟机克服CPU差异:
例如使用java虚拟机,将java源代码编译成字节码后进行分发,在不同的操作系统上安装相适应的java虚拟机,在程序运行时,java虚拟机在将字节码解释成本地代码进行运行,实现了一次编译到处运行,但也存在在影响运行速度的缺点(因为运行时需要去将字节码解释成本地机器码)
BIOS: 基本输入输出系统,存储在ROM中,是预先内置在计算机主机内部的程序,可以控制键盘、磁盘显卡和启动引导程序的功能
引导程序: 存储在启动驱动器起始区域的程序,操作系统的启动器一般是硬盘或者CD-ROM或者软盘。
电脑开机后,BIOS会确认硬件是否正常,没有问题就启动引导程序,引导程序的功能就是将存在硬盘上的OS加载到内存中运行,虽然启动应用是OS的功能,但是OS不能自己启动自己,需要靠引导程序进行启动。