2.1 现代操作系统的基本结构
操作系统本身属于软件的范畴,但是它需要紧密地跟硬件打交道,它为上层应用软件或应用系统提供了一层抽象,专门负责硬件资源的管理和分配。应用软件不需要直接跟硬件打交道,它们利用操作系统提供的功能来实现各种应用任务,如果它们要访问硬件,则必须通过操作系统提供的抽象接口来完成。图2.1显示了现代操作系统的一般性框架结构。
图2.1 现代操作系统的基本结构
图2.1中的模型可能会有一些变化形式,比如,有些专用机器的系统并没有提供内核扩展性能,所有的硬件驱动模块都链接在系统内核中。但通用机器的系统倾向于提供可动态加载的驱动程序或专门的扩展接口,Windows和Linux就是这类系统的典型代表。另外,在系统服务层之上,应用软件通过一层接口来调用系统提供的服务,而应用程序之间则保持相对隔离,它们相互间的通信需要通过系统来完成。操作系统提供了一些基本的IPC(Inter-Process Communication,进程间通信)原语来支持上层应用程序之间的交互操作。系统内核负责管理这些应用程序,把有限的计算资源分配给它们,使它们的任务得以完成。例如,计算机的处理器(即CPU)、内存和外存(如硬盘)由系统内核统一管理和分配,因而多个应用软件可以同时运行在一个系统中,它们既可能毫不相关,也可能相互依赖,操作系统会协调它们的运行过程。
硬件设备,像键盘、显示器、磁盘、打印机和网络等,则通过各自的驱动程序,以一致的方式交由操作系统来处理。系统内核接受应用程序的请求,与硬件设备进行通信;另一方面,硬件设备向计算机发送信号,驱动程序收到信号后,与系统内核一起把信号传递给恰当的应用程序。对于通用的操作系统,为众多外部设备提供支持是系统执行环境的一个重要方面。为了灵活、方便起见,驱动程序往往是可替换或可升级的,它们构成了系统执行环境的一个重要组成部分,在代码量方面甚至超过了系统内核本身。
在现代计算机系统中,仅仅简单地支持外部设备往往还不够,设备的即插即用(plug-and-play)和电源管理越显重要。这一方面要求系统总线能够检测到设备的插入和拔除,另一方面也要求操作系统能够动态地加载或移除驱动程序,同时保持系统状态的完整性。电源管理不仅会影响到操作系统自身的状态管理,也需要获得驱动程序和硬件设备的支持,所以,电源管理自然成了设备驱动程序接口的一部分。