对于开头的名字,不用我解释了,这是在看的书名,也是该书作者致敬了演员的自我修养一书的作者.
对于书中分析的计算机的结构,采用的南北桥分离的单机结构进行分析.南北桥前,各设备与CPU通信都通过一根Bus,后来对高速数据传输的需求的显现,有了北桥芯片管理高速设备,而低速外设则统一由南桥芯片管理.
‘计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决’.这句话几乎概括了计算机系统软件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的.
不仅是计算机系统软件整个体系是这样,体系内的每个组件比如操作系统本身,很多应用程序,软件系统甚至很多硬件结构都是按照这种层次的结构组织和设计的.
系统软件体系结构中,各种软件的位置如图
而每一层之间都要相互通信,既然要通信就必须有一个通信的协议,我们一般将其成为接口(Interface),接口的下面那一层是接口的提供者,由它定义接口;接口的上面那层是接口的使用者,它使用该接口来实现所需要的功能.
在层次结构中,接口是被精心设计过的,尽量保持稳定不变,那么理论上层次之间只要遵循这个接口,任何一个层都可以被修改或替换.
除了硬件和应用程序,其他所谓的接口层,都是对它下面的那层的包装和拓展.正是这些中间层的存在,使得应用程序和硬件之间保持相对的独立.
如之前为386架构设计的Dos程序依旧可以跑在后来的系统中,就得益于这样分层的设计结构以及操作系统的向后兼容性.
最近的虚拟机技术更是在操作系统与硬件之间又增加了一层虚拟曾,使得一个计算机上可以同时运行多个操作系统,这也是层次结构带来的好处.尽可能少的改变甚至不改变其他层的情况下,新增加一个层次就可以提供前所未有的功能.
我们的软件体系中,位于最上层的是应用程序,比如我们平时用的浏览器,多媒体播放器等.从整个层次结构上看,开发工具与应用程序是属于同一个层次的,因为它们都使用了一个接口,那就是操作系统的应用程序编程接口(Application Programming Interface).
应用程序接口(API)的提供者是运行库,什么样的运行库提供什么样的API,比如linux下的Glibc库提供POSIX的API,Windows的运行库提供Windows API,最常见的32位Windows提供的API又被称为Win32.
运行库使用操作系统提供的系统调用接口(System call Interface),系统调用接口在实现中往往以软件中断(Software Interrupt)的方式提供提供,比如Linux使用0x80号中断作为系统调用接口,windows使用0x2E号中断作为系统调用接口(从win xp Sp2开始,windows开始采用一种新的调用方式).
操作系统内核层对于硬件层来说是硬件接口的使用者,而硬件是接口的定义者,硬件的接口定义决定了操作系统内核,具体来说就是驱动程序如何操作硬件,如何与硬件进行通信.这种接口往往叫做硬件规格(Hardware Specification),硬件的生产厂商负责提供硬件规格,操作系统和驱动程序的开发者通过阅读硬件规格文档所规定的各种硬件编程接口标准来编写操作系统和驱动程序.