简析Windows XP体系结构
Windows XP是一个把消费型操作系统(Windows 9x核心系列)和商业型操作系统(Windows NT核心系列)融合为统一系统代码的新型Windows操作系统,它的发布标志着微软在操作系统领域“两条腿走路”的研发和营销策略的结束。
毫不夸张地说,Windows XP是操作系统历史上的全才,既有华丽堂皇的外表,更有卓越不凡的性能。对于广大的电脑爱好者而言,除了关心Windows XP友好的界面、简易的操作和齐全的功能外,是否还有更进一步认识它的兴趣呢?怎样开始我们对Windows XP的深层次认识呢——它的体系结构就是最佳的着眼点。
操作系统作为一种大型软件,在它的发展过程中,出现过多种多样的体系结构,概括起来,大致可以分为以下四种类型:模块组合结构、分层结构、虚拟机结构和客户/服务器结构(又称微内核结构)。历史上的众多操作系统不外乎都采用了这些体系结构,例如我们熟知的DOS就是“模块组合结构”的代表。作为一个实际应用型的操作系统,Windows XP没有单纯地采用某一种体系结构,而是把分层结构操作系统和客户/服务器结构操作系统的特点融合到了一起。
所谓分层结构,指的是把操作系统的所有功能模块按照调用的次序分别划分为若干层,各层之间的模块只能单向依赖或单向调用。这样做的好处是:既把复杂的整体问题分解成了若干易于解决的相对独立的子模块;同时又使得各个子模块之间的结构关系很清晰明了,不容易隐藏潜在的逻辑错误,而且也便于在不同的硬件环境中移植。可以说,Windows XP的可靠性、稳定性和可移植性都跟它采用了分层的体系结构是有密切联系的。
当然,Windows XP采用的最主要的体系结构是客户/服务器结构,因为采用这种结构的操作系统将非常适于应用在网络环境下。作为面向网络的操作系统,Windows XP没有理由不采用客户/服务器结构来设计。该结构的内核只提供了操作系统最基本的功能,如基本调度操作和中断处理等。微内核结构的优点是可靠、灵活以及适宜于网络计算机环境,但也存在工作效率不高的缺陷。Windows XP在设计上没有一味地承袭微内核结构,而是把效率问题更多地考虑了进去,做了很多改进和优化,例如把文件服务、图形引擎等功能组件植入到微内核中,使得Windows XP在效率与稳定之间找到了一个最佳的平衡点。实际的测试也表明,Windows XP的高效性并没有导致其稳定性的降低。
下面,需要引入两个重要的概念:核心态(kernel mode)和用户态(user mode),它们各自代表程序不同的运行状态。计算机里运行的程序,不是处于核心态就是处于用户态。当程序处于用户态时,它为用户服务。例如,当你使用Office系列软件办公时,这些软件就在为你服务,所以其运行状态就处于用户态。当程序处于核心态时,既可为用户服务,又可为系统服务。例如,内存管理器和安全控制程序,它们并非是用户直接需要的,但却必不可少,因为它们的任务是维护系统不出问题,所以要运行在核心态。可见,系统服务是用户服务的前提,因为首先要保证计算机系统能正常地运行,才谈得上为用户提供可靠的服务。也就是说,如果你用的操作系统经常出现“蓝屏”或者死机的现象,那你还能很好地工作吗?因此,保证核心态的稳定可靠,是操作系统在设计上必须着重考虑的。
Windows XP通过硬件机制现实了核心态以及用户态,并为前者赋予了很高的特权,允许处于核心态的程序调用特权指令来封杀任何用户态的程序,而用户态的程序只能调用常规的指令。一般来说,只有那些至关重要的、对性能影响很大的代码和组件才运行在核心态。例如,内存管理器、高速缓存管理器、安全管理器、网络协议、进程管理以及文件系统等就运行在核心态。而用户的应用程序都只准运行在用户态,而且不允许直接访问操作系统的特权代码和数据,以免被恶意的应用程序侵扰。当用户的应用程序试图调用特权指令时,操作系统会借助硬件提供的保护机制剥夺这些程序的控制权并将它们强制关闭。有了这样的保护措施,Windows XP既可作为一般的工作平台,又可成为坚固稳定的服务器。
有了对核心态和用户态的认识,Windows XP体系结构的框架也应运而生,图1所示的就是以核心态和用户态为划分原则的Windows XP体系结构示意框图。
图1中的粗线将Windows XP分为用户态和核心态两部分。粗线上部的、处于用户态的方框分别代表的是四种基本类型的用户进程:系统支持进程、服务进程、应用程序、环境子系统。另外,子系统动态链接库也归类于用户态。
在介绍上述四种类型的用户进程之前,需要先来认识一下“进程”的概念,凡是研究操作系统,都不能不涉及这个概念。简而言之,“进程”就是程序的执行过程。程序通常是以文件形式静态地存放在磁盘上的,而当程序被执行时,会产生一个动态的执行过程,如何来描述这个动态的过程呢?于是就引入了“进程”的概念。所以,一个处于运行状态的程序都对应了一个相应的进程。例如,你在使用Microsoft Word时,系统就会创建一个映像名称为WINWORD.EXE的进程。为了能更细致地描述程序的执行过程,又引入了“线程”的概念,一个进程可以被细化为一个或多个线程。用线程来描述程序的执行过程,显得更深入、更精确。一般来说,从用户角度,线程是观察不到的。
1.系统支持进程(system support process)
属于“系统支持进程”类型的进程,虽然处于用户态,但它们却是由操作系统启动的。在Windows XP中,属于该类型的进程主要有:System Idle进程,用于统计CPU的空闲时间;System进程,是系统核心操作的载体;会话管理器(smss.exe),主要用于系统初始化工作;登录进程(winlogon.exe),用于处理用户的登录和注销请求,按下“Ctrl+Alt+Del”组合键时,可以激活该进程;本地安全身份验证服务器(lsass.exe),该进程用于接收来自登录进程的身份验证请求,然后调用适当的身份验证机制来完成实际的验证。
2.服务进程(service process)
属于“服务进程”类型的进程,其对应的程序实体应该是Win32模式的程序。在客户/服务器结构的Windows XP系统中,这些服务进程其实完成的是服务器的功能。例如,Services.exe、Spoolsv.exe、Svchost.exe、Winmgmt.exe等程序,在执行时都归类于服务进程。
3.应用程序(user application)
这个概念应该是最容易理解的,因为所有由用户启动的、被用户直接使用的程序都属于应用程序的范畴。Windows XP支持的应用程序的类型包括Win32模式、Windows3.1模式和MS-DOS模式。例如,上网用的IE浏览器、办公用的Office系列软件、听音乐用的Winamp以及用于进程查看的任务管理器(taskmgr.exe)等都属于应用程序。
4.环境子系统(environment subsystem)
简而言之,环境子系统的作用是向应用程序提供必要的运行环境。也就是说,应用程序的执行,实际上是通过调用环境子系统提供的功能函数实现的。在此前的Windows 2000操作系统中,提供了三种环境子系统:Win32、POSIX(UNIX类型的子系统)和OS/2(用于x86系统的);而在Windows XP中,去掉了后两者,只保留了Win32环境子系统。
Win32环境子系统的程序实体是csrss.exe文件,而且它必须始终处于运行状态,否则Windows XP就不能正常工作。同时,Win32子系统还包括以下重要组件:各种可供调用的函数;核心态设备驱动程序(Win32k.sys),用于控制窗口显示、屏幕输出以及收集来自鼠标、键盘的输入信息;图形设备接口(Graphics Device Interface,GDI),提供文本、图形输出的各种函数;子系统动态链接库(subsystem DLLs),它是服务进程、应用程序与核心态的系统组件之间交互的中介。其具体的作用是将文档形式的函数转换成Windows XP内部的系统调用,相当于一个再编译的过程。例如,Ntdll.dll、User32.dll、Gdi32.dll、Kernel32.dll等都是该链接库的成员。
以上是Windows XP体系中的用户态的概况。其中列举了不少具体的程序文件,它们都可以在Windows XP的系统目录下找到;如果它们处于运行状态,那么在任务管理器中还能观察到它们(图2)。
粗线以下的部分是Windows XP的核心态组件,它们都运行在统一的核心地址空间中。核心态组件包括以下五项:核心、硬件抽象层、执行体、设备驱动程序以及图形引擎。
1.核心(Kernel)
Windows XP的核心(程序实体是Ntoskrnl.exe)始终运行在核心态,其代码短小紧凑,可移植性很好,主要提供下列功能:线程安排和调度;异常情况处理和调度;中断处理和调度;多处理器同步;为执行体提供“内核对象”调用。
2.硬件抽象层(Hardware Abstraction Layer,HAL)
在多种硬件平台上的可移植性是Windows XP设计的一个至关重要的方面,除了核心以外,硬件抽象层(HAL)是完善可移植性的另一个关键部分。在实际的系统中,HAL表现为一个可加载的核心态模块hal.dll,它运行在最靠近硬件的地方,将核心、设备驱动程序以及执行体同硬件分隔开,从而使Windows XP能适应多种硬件平台。
3.执行体(Executive)
执行体是核心的上层,作用是为用户态的用户进程提供函数的调用,使用户进程的功能得以实现。从外部看,用户交给的任务都好像是在执行体中完成的。而实际上,执行体的功能又是建立在调用核心的“内核对象”的基础上的。这样就避免了用户进程直接调用核心的情况的出现,减少了不稳定因素的产生。
4.设备驱动程序(Device Drivers)
设备驱动程序是一系列可加载的、以SYS为扩展名的核心态模块,它们负责I/O系统和相关硬件之间的交互。但Windows XP的设备驱动程序又并非是直接控制硬件的,而是通过硬件抽象层(HAL)来间接实现的。
Windows XP对“即插即用”和“高级电源选项”有很强大的支持,它使用Windows驱动程序模型(Windows Driver Model,WDM)作为标准驱动程序模型。WDM是微软专门为NT核心的Windows研发的一种分层化的驱动程序模型,并在Windows 2000系统中首次应用。从WDM的角度看,Windows XP中的驱动程序可分三种:总线驱动程序,负责硬件设备与总线控制器的连接;功能驱动程序,用于硬件自身内部的驱动;过滤器驱动程序,用于为现有硬件设备添加新的功能。在Windows XP中,每一个硬件设备都至少有总线驱动程序和功能驱动程序,前者负责与总线的交互,后者控制内部的运转。这是Windows XP的设备驱动程序机制的一大重要特点。
5.图形引擎(Graphics Engine)
简言之,图形引擎的用处就是提供实现图形用户界面(Graphical User Interface,GUI)的基本函数。前面提到过,在Win32子系统中已经包含了图形设备接口(GDI),但其图形功能毕竟有限,不能满足高质量的图形应用的要求。为此,就采取了将图形系统移入到核心态来运行的策略,以提高图形处理能力。可以说,核心态的图形引擎是塑造出Windows XP华丽外表的艺术师。
到此,我们对Windows XP的体系结构应该有了一个概括性的认识。实际上,对于Windows XP这种庞大的操作系统而言,其体系结构细节的复杂程度是难以想象的。如果用程序语言来描述的话,岂止一本书能够涵盖。为大家简析Windows XP体系结构旨在于增长见识、了解一点操作技巧之外的知识。
大侠饶命,自己搜去啊把,网上很多的