4.1.1 提供一致的接口
在操作系统出现之前,程序员必须熟悉特定指令集以及每个设备的特性。显卡、磁盘驱动、打印机、键盘等,所有这些都有特定而且不同的指令集和命令集。不仅对每个设备的访问是不同的,而且由不同厂商生产的相同种类的设备也有着不同的指令集和新特性。这使得程序员经常必须使用不同的指令集来重写相同的功能。例如,如果一名开发人员已经编写了一个程序将文件整理到磁盘,那么该程序无法重用在另一家厂商的磁盘上,除非更新所有的设备id、指令集、设备模式等来适应新厂商的设备。除了唯一的指令集,每种连接到计算机的设备都拥有特定的地址、端口或中断。在操作系统出现之前,程序员必须知道设备的物理地址、端口或中断,然后才能够访问该设备。因此,程序中包含设备id、硬件地址、端口号和中断。实际上,程序员必须为程序所访问的每块硬件编写一个设备驱动。程序和软件的移植是不可能的。
操作系统的概念改变了这一切。操作系统为程序员提供了到类似设备的通用接口。操作系统为设备封装了内部结构,例如显卡、声卡、键盘、显示器、磁盘驱动器、打印机等。操作系统为程序员在开发人员的程序和连接到计算机的硬件资源之间提供了两个软件层,从而不用强迫程序员使用奇怪的设备特定指令。这些层被称作应用程序接口(Application Program Interface,API)和系统程序接口(System Program Interface,SPI)。直接处理硬件资源以及所有特性现在成为了操作系统的工作,这样程序员只需要使用简化的API和SPI,操作系统将处理所有的特定设备的转换。