服务器 频道

到底改进了什么?Win7/2008 R2核心剖析

  在谈及Windows的内核的时候,我们首先介绍一下Windows NT的架构。Windows 9x系列采用的是单内核的设计,而Windows NT则是微内核的设计,它们是很不相同的。如Windows 2000、Windows XP/Windows Server 2003、Windows Vista/Windows Server 2008一直到现在的Windows 7/Windows Server 2008 R2,都是基于、沿用了Windows NT的架构设计。

  在199x年,微软与IBM合作开发OS/2决裂,之后,微软来自原DEC的人马开始专心制作盖茨梦想中的操作系统,新的操作系统部分基于OS/2 3.0,同时还带有DEC VMS的因素,这个操作系统被命名为Windows NT,NT就是New Technology新技术的意思。


Microsoft Windows NT 3.1,1993年,一直到现在,发展了16年

  为此什么称之为NT呢?Windows NT采用了全新的设计思想,这牵涉到操作系统内核上的理念。在80年代前,主流的操作系统,要么是属于原始的没有内核的产品,要么属于单内核产品,到了80年代,学术界开始流行一种微内核的风潮,出现了如Mach(1985年)这样的经典微内核操作系统。典型的单内核系统则有各种Unix和类Unix。

  在一个分层设计的操作系统中,为其他组件提供最基本的系统功能的部件就叫做内核。单内核就是单个大的进程映像中集成了操作系统中所有基础功能,而微内核就是在内核中仅集成了经过挑选的、基本的功能,其它的操作系统功能构建在其上——用户应用程序再构建其上。微内核的设计可以让系统变得更模块化,带来可移植性和新功能开发上的好处,此外操作系统层次更明晰,维护也会更加方便。

  在用到新的微内核设计的同时,Windows NT就需要采用流行的双模式(Dual Mode)设计,整个系统分成两部分运行在两种特权等级下。两种特权等级分别是用户模式(User Mode)和监察者模式(Monitor Mode)或者系统模式(System Mode ),后者通常叫做核心模式(Kernel Mode)。操作系统的大部分都运行在核心模式,而用户程序则运行在用户模式,受到操作系统的监视、控制。


微内核架构:Windows NT架构图,适合3.1~3.51版本

  不过,Windows NT的架构和传统的、纯粹的微内核架构还是有些不同。如Minix/Amoeba这样的纯微内核设计的内核非常之小,只包含了系统最基本的功能,并且只有它们运行于核心模式,其他系统部分都以服务的形式运行在用户模式。而Windows NT当中,除了内核运行于核心模式之外,还有一部分重要的系统功能也运行于核心模式,这部分不包含在内核当中却运行于核心模式的功能部分就叫做Executive(执行体),包含了对象管理器、安全监视器、进程管理器、虚拟内存管理器以及LPC机制,此外,文件系统、IO管理器以及大部分的驱动程序也都包含了在内。令驱动程序运行在执行体是导致了Windows NT不稳定的一个重要因素之一,由于运行在核心模式,驱动程序可以运行特权指令,设计不当可以很容易地导致问题乃至造成系统崩溃。并且驱动程序并不是由操作系统提供,而是由第三方厂商提供,因此其安全性和稳定性难以得到完全的保障。一些微内核架构系统的驱动程序运行在用户模式。


Windows NT内核, 适合3.1~3.51版本 

  作为一个以GUI为根本的操作系统,图形性能是基础。在通常情况下,微内核的性能比单内核性能要低,因为单内核通过系统调用而微内核通过消息传递。虽然Windows NT发布的时候采用了特别的方式改进了图形性能,如优化的消息传递协议LPC(Local Procedure Call,本地过程调用,用来和RPC对应),并且还从中特别创造了Quick LPC,通过事件对(Event Pair)这个特别的结构来加速CSR subsystem(Win32子系统)的图形操作。然而微软感到还未足够,到了1996年发布的Windows NT 4.0,微软将图形相关的部分从用户层放入了内核层:


Windows NT 4.0架构图,带颜色的部分在之前的版本中原本属于CSR subsystem的一部分;Windows NT 4.0之前,驱动程序也有一部分在用户层

  在Windows NT系统中,所有的图形界面操作都和Win32子系统(上图是CSR subsystem)相关,系统通过调用Win32子系统的GDI(Graphics Device Interface,图形设备接口)API,然后GDI部件调用显卡驱动来实现图形操作,后一种调用比前一个调用频繁的多,因为一个简单的GDI命令需要和显卡驱动进行频繁的交流来完成。在Windows NT 4.0之前,GDI和搭配的USER、WIndows管理器都在CSR subsytem进程中,也就是在用户层,因此图形操作会需要频繁地在用户态和核心态之间切换,引起很多的系统开销。而在Windows NT 4.0中,只有数量相对较少的GDI API调用会导致用户态和核心态之间切换,因此图形性能得到了很明显的改进。如PowerPoint的性能就提升了15%-20%。在“便宜”的高端工作站上,Windows NT 4.0开始和Unix竞争。Windows NT 4.0的内核的大架构一直沿用到现在。

*Windows Vista在LPC机制当中还引入了一个新的ALPC(Advanced Local Procedure Call)。

0
相关文章