系统架构
我们已经介绍过一些术语,概念和工具,现在开始进一步探索windows的设计目标和结构。本章讲述系统整体架构,包括其中的关键组件,每个组件之间如何交互以及它们的运行环境。为了提供一个了解windows内部机制的框架,我们首先回顾下windows系统的需求和设计目标。
需求和设计目标
在1989年,下面的需求,导致了windows NT的规范
提供一个32位的,抢先式,可重入的,虚拟内存操作系统
可以在多种硬件架构和平台上运行
在多处理系统上运行良好
适合分布式计算平台,无论是客户端还是服务器
运行大多数的16位msdos或者windows3.1程序
满足posix1003.1的政府需求
满足政府和工业界的安全标准
支持unicode以适应全球市场
满足这些需求,需要进行数千个决定。为了指导这些决定,windows NT设计小组在项目一开始采用下面的设计目标。
扩展性 代码必须易于修改,以满足市场需求
移植性 系统必须在多硬件结构上运行,并且容易移植到新的平台上。
可靠性和健壮性 防止内部问题和外部问题。应用程序不能损坏操作系统或者其他应用程序。
兼容性 接口和api需要和老版本的windows以及msdos保持一致。和其他系统合作正常,如unix os/和netware
性能 在设计目标的范围内,系统要尽可能的快。
当我们探索windows内部结构和操作时,你会看到这些需求如何成功的组成了系统。在开始之前,我们先看一下windows的整体设计模型,并且和其他操作系统进行对比。
操作系统模型
在大多数多用户操作系统上,应用程序和操作系统是分开的。操作系统的代码运行在特权层级上(本书称为内核模式),可以访问系统数据和硬件。应用程序代码运行在非特权模式下(本书称为用户模式),API接口数量有限,对系统数据的操作受限,不能直接访问硬件。当用户态程序调用系统服务时,处理器执行一个特殊指令,转化到内核模式。当系统服务完成时,操作系统切换回用户模式,调用者继续执行。
windows和多数unix系统相似,是一个整块的操作系统,操作系统的大部分代码和驱动程序共享一个内核模式地址空间。这意味着某个操作系统组件或者驱动程序可能会损坏其他组件的数据。windows也提供了一些内核保护机制,比如说 patchguard 和 内核模式代码签名(第三章有详细描述),可以减轻这个问题。
操作系统的所有组件不会被有问题的应用程序代码损坏,因为应用程序不能直接访问系统的代码和数据。这也是windows的客户端和服务器都以健壮性和稳定性出名的原因。与此同时,从系统核心服务来看(说内存管理,io,网络和打印),,windows还能够保持快速和灵活,
内核模式组件也采用了基本的面向对象设计原则。组件之间很少直接获取数据,而是通过接口和参数来完成。
虽然windows广泛使用对象,但它并非严格意义上的面向对象系统。windows的大部分系统代码使用c来完成的。c语言并不支持支持oo的概念,比如说动态绑定,多态和继承。windows的实现借鉴了oo的概念,但是并不依赖于特定的语言。