跳转到内容

Windows NT体系结构

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Windows NT操作系统家族的体系结构,包括内核模式与用户模式两层,每层中有多个模块。

Windows NT体系结构是指一系列微软设计及制造,由Windows NT所派生出的视窗操作系统架构,采用用户模式内核模式的分层设计。它是一种是抢占式可重入的操作系统,可运行在单处理器或对称多处理器(SMP)上。并利用I/O请求包异步I/O来处理所有的I/O请求。微软从Windows XP开始提供64位的Windows版本,之前只有32位版本。

用户模式下的程序与子系统在它们可以访问的系统资源方面受到限制,而内核模式对系统资源和外部设备的访问不受限制,可以完全访问计算机的硬件和系统资源。Windows NT内核是属于混合内核;其体系结构包括简单内核硬件抽象层(HAL)、驱动程序、服务(总称为执行体),它们都存在于内核模式中。[1]

构成Windows NT用户模式的子系统可以透过I/O管理器传递I/O请求给内核模式中适当的驱动程序。Windows NT的用户模式由环境子系统(执行为不同类型操作系统编写的应用程序)和集成子系统(Integral subsystem,代表环境子系统执行特定系统的功能)组成。内核模式阻止用户模式的服务和应用程序访问它们不应访问的操作系统关键区域。

执行体与所有的用户模式子系统处理I/O、对象管理、安全和进程管理。位于硬件抽象层与执行体之间的内核提供了多处理器同步、线程、中断调度和分派、故障处理和例外分派的功能。内核还负责在启动时初始化设备驱动程序。内核模式驱动程序分为三个级别:高层驱动程序、中层驱动程序和低层驱动程序。Windows驱动程序模型(WDM)位于中层,主要设计为在Windows 98Windows 2000之间实现二进制档与源代码兼容。最底层的驱动程序要么是直接控制设备的旧版Windows NT设备驱动程序,要么是即插即用硬件总线。

用户模式

[编辑]

Windows NT操作系统的用户模式部分包括两个子系统:环境子系统与集成子系统。

环境子系统执行依据不同操作系统API而写的程序,有三个环境子系统:Win32子系统、OS/2子系统、POSIX子系统[2]

Win32环境子系统

[编辑]

Win32环境子系统可执行32位的Windows应用程序,并为其他环境子系统提供具备纯文字接口、关闭以及硬件错误(hard error)管理的主控台接口(console),以及支持让Windows NT执行MS-DOS与16位Windows(Win16)程序的Virtual DOS Machine英语Virtual DOS Machine(VDMs),其中有一个VDM拥有专属的地址空间,专门用来模拟在Intel 80486平台上运行的MS-DOS 5.0环境。Win32环境子系统行程(csrss.exe)还包含了窗口管理器以处理像是由键盘或鼠标触发的输入事件(event),并将事件消息(message)发送至等待输入回应的应用程序,应用程序则根据事件消息作出相应的动作,例如绘制或刷新其视窗。

OS/2环境子系统

[编辑]

OS/2环境子系统支持基于文字接口的16位OS/2应用程序,或虚拟出来的OS/2 1.x。但执行在x86平台上OS/2 2.x及之后的非32位或图形化OS/2应用程序则不被支持。[3]若要执行图形化的OS/2 1.x程序,则需要安装Windows NT Add-On Subsystem for Presentation Manager。[3] 最后一个具有OS/2子系统的是Windows 2000,从Windows XP开始则不再包含,但可透过在Windows XP上安装Microsoft Virtual PC 2004获取OS/2程序的执行环境。 [4][5]

POSIX环境子系统

[编辑]

POSIX环境子系统支持严格遵照POSIX.1标准及与ISO/IEC相关标准所写的程序。这一子系统已经被Interix英语Interix替代,属于Windows Services for UNIX的一部分。 [4]

集成子系统包括安全子系统、工作站服务与服务器服务。安全子系统处理安全令牌,基于资源许可授予或拒绝用户账户访问,处理登录请求与初始化登录验证,以及管理Active Directory。工作站服务提供API给network redirector英语network redirector实现远程网络访问的功能。[6]服务器服务则提供与网络服务相关的API。[7]

内核模式

[编辑]

Windows NT的内核模式能访问所有硬件资源,在保护内存区上执行代码。[8] 控制了调度、线程优先级、内存管理、硬件交互;禁止了用户态的程序与服务访问关键资源,用户态进程必须请求内核态执行这类操作。

x86硬件体系结构支持四种CPU优先级:0到3。仅有0与3这两种优先级被Windows操作系统使用。用户态程序运行在优先级3,内核态运行在优先级0(特权级别)。也分别称作“ring 3”与“ring 0”。这使得具有了只有2个优先级的RISC平台的可移植性。[9]但是打破了OS/2应用程序包含的I/O特权段的兼容性[10]

内核态的操作系统包含了由许多功能模块组成的执行体服务、内核驱动程序、一个(微)内核及一个硬件抽象层(HAL)。[8]

执行体

[编辑]

Windows执行体服务建立于低层内核态程序之上,包含在文件NTOSKRNL.EXE中。[8] 负责处理I/O、对象管理、安全、进程管理,划分为几个子系统, 包括缓存管理、配置管理、I/O管理、本地过程调用(LPC)、内存管理、对象管理、进程结构与安全引用监视(SRM)。这些子系统一起构成了执行体服务。系统服务,即系统调用也是在这一级别上实现,除了极少特例为了高性能而直接调用了内核层。

上下文中的术语“service”是指可调用的例程,或一整套可调用的例程。这不同于“服务进程”(service process)。服务进程是用户态下的程序,类似于类Unix系统守护进程

对象管理器
对象管理器是一个执行体的子系统,所有其他的执行体子系统,特别是系统调用必须通过它来获得对Windows NT资源的访问,这使得对象管理器成为资源管理的基础设施。[11] 对象管理器用来避免在其他子系统中管理资源带来的冗余与不安全。[12] 在对象管理器视角,每个资源都是一个对象,不论是物理资源(如文件系统或外设),还是逻辑资源(如一个互斥锁)。
缓存控制器
Windows Cache Manager与内存控制器、I/O控制器、I/O驱动一起为正常的文件I/O提供缓存。这种文件缓存是针对文件块,对本地文件与远程文件提供了一致的服务。实际上这是特殊的文件内存映射。
配置管理器
实现了Windows注册表所需的系统调用。
I/O管理器
允许用户态程序与设备的通信。I/O管理器把用户态程序的读写请求翻译给硬件。例如,I/O管理器接收文件系统I/O请求,翻译为对相关设备的调用,与低层设备驱动程序合作执行硬件读写操作。还包括了I/O操作的cache管理。
本地过程调用(LPC)
提供了一种进程间通信端口机制。是Microsoft RPC英语Microsoft RPC的基础。
内存管理
管理虚拟内存, 控制内存保护,以及物理内存与二级存储之间的分页调度, 以及物理内存的分配。还能分析PE格式可执行程序,以便映射入或卸载这些程序。
进程结构
处理进程线程的创建与终止,实现了作业概念(从Windows 2000开始)。
即插即用管理器
处理即插即用,支持在启动时的设备检测与安装,按需停止或启动一个设备。它的大部分实际上是在用户态的 “Plug and Play”服务中实现。
电源管理
处理电源事件(关机、睡眠stand-by、休眠等),通知受影响的驱动程序。
安全引用监视(SRM)
强制实行安全规则的子系统。[13] 通过访问控制表(ACLs)确定一个对象或资源可以被访问。访问控制表由访问控制条目(ACEs)组成。ACE包含了安全标识符(SID)与授予的操作列表,使得用户帐户、用户组账号、登录会话[14]具有对资源的允许、不允许、审核(audit)等权限.[15][16]
GDI
图形设备接口是负责画线、字体绘制、处理调色板等。在Windows NT 3.x系列操作系统,GDI属于用户态。从Windows NT 4.0,GDI移入了内核态,以提高图形性能。[17]

内核

[编辑]

内核(kernel)在HAL与执行体之间,实际上是“微内核”的理念下设计实现出来的。负责多处理器同步,线程与中断的调度与分派,自陷处理,异常分派,在启动时初始化设备驱动程序等。

内核模式驱动

[编辑]

Windows NT使用内核态的设备驱动程序与硬件交互。用户态下的程序看到的设备都是I/O管理器下的文件对象;而I/O管理器自身看到的设备是设备对象。内核态驱动程序分为3个层次: 最高层驱动程序,中层驱动程序,低层驱动程序。最高层驱动程序,如FATNTFS的文件系统驱动程序,依赖于中层驱动程序。中层驱动程序由功能驱动(function driver)组成。功能驱动依赖于总线驱动,即服务于总线控制器、适配器(adapter)、桥(bridge)的驱动。Windows Driver Model (WDM)存在于中层。低层驱动直接控制硬件,不依赖于任何其他驱动程序。

硬件抽象层(HAL)

[编辑]

硬件抽象是一套软件子程序(routine),模拟了特定平台有关细节,使得程序不必直接访问硬件资源。因而可以写独立于设备的、高性能代码,通过操作系统访问硬件。 例如,编译器屏蔽了CPU指令集的细节,应用程序作者无需考虑与CPU相关的指令。操作系统的硬件抽象使得程序只需调用操作系统级的操作,而屏蔽了硬件具体细节,使得程序具有了可移植性。

操作系统的硬件抽象层位于硬件与软件之间。对操作系统内核隐藏了硬件的大部分差异,使得内核态代码基本不需要改变即可运行于不同硬件配置的计算机上。硬件抽象大都是硬件驱动程序。被屏蔽的硬件信息包括I/O界面、中断设置、多处理器通信机制等。[18]

内核源码参考

[编辑]

可从下述渠道获得Windows内核的实现源码的参考:

  • ReactOS[19] 类Windows的开源操作系统,与Windows在 API级别兼容
  • wine[20]在非Windows系统上运行Win32程序的开源中间层,逻辑上与Windows在 API 级别兼容
  • Windows Research Kernel[21]Microsoft向高校和政府开放的用于研究的部分内核源码

参见

[编辑]

延伸阅读

[编辑]
  • Martignetti, E.; What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager (ISBN 978-1479114290)
  • Russinovich, Mark E.; Solomon, David A.; Ionescu, A.; Windows Internals, Part1: Covering Windows Server 2008 R2 and Windows 7 (ISBN 978-0735648739)
  • Russinovich, Mark E.; Solomon, David A.; Ionescu, A.; Windows Internals, Part2: Covering Windows Server 2008 R2 and Windows 7 (ISBN 978-0735665873)

注释与参考文献

[编辑]
引用
  1. ^ Finnel 2000,Chapter 1: Introduction to Microsoft Windows 2000, pp. 7–18.
  2. ^ Appendix - Running Nonnative Applications in Windows 2000 Professional. Microsoft Windows 2000 Professional Resource Kit. Microsoft. [2016-11-18]. (原始内容存档于2016-11-18). 
  3. ^ 3.0 3.1 Windows NT Workstation Resource Kit Chapter 28 - OS/2 Compatibility. Microsoft. [2014-01-09]. (原始内容存档于2016-03-03) (英语). 
  4. ^ 4.0 4.1 POSIX and OS/2 are not supported in Windows XP or in Windows Server 2003. Microsoft. [2014-01-09]. (原始内容存档于2013-03-28) (英语). 
  5. ^ Reiter, Brian. The Sad History of the Microsoft POSIX Subsystem. August 24, 2010 [2014-01-09]. (原始内容存档于2013-05-22) (英语). 
  6. ^ Basic Architecture of a Network Redirector. Microsoft. [2016-11-18]. (原始内容存档于2016-11-18). 
  7. ^ Windows NT Networking Architecture. Microsoft. [2016-11-18]. (原始内容存档于2017-03-07). 
  8. ^ 8.0 8.1 8.2 Roman, Steven. Windows Architecture. Win32 API Programming with Visual Basic. O'Reilly and Associates, Inc. 1999 [2014-01-09]. ISBN 1-56592-631-5. (原始内容存档于2017-08-26). 
  9. ^ MS Windows NT Kernel-mode User and GDI White Paper. Windows NT Workstation documentation. Microsoft TechNet. [2007-12-09]. (原始内容存档于2007-12-15). 
  10. ^ Chapter 28 - OS/2 Compatibility. Windows NT Workstation Resource Kit. Microsoft. [2009-01-18]. (原始内容存档于2009-02-10). 
  11. ^ Russinovich & Solomon 2005,第124-125页.
  12. ^ Russinovich 1997,Introduction.
  13. ^ Active Directory Data Storage. Microsoft. [2021-02-09]. (原始内容存档于2020-02-14). 
  14. ^ Trustee definition. MSDN. [2014-01-09]. (原始内容存档于2006-06-22). 
  15. ^ Siyan 2000.
  16. ^ ACE definition. MSDN. [2014-01-09]. (原始内容存档于2021-02-12). 
  17. ^ The Windows NT 4.0 Kernel mode change. MS Windows NT Kernel-mode User and GDI White Paper. Microsoft. [2009-01-19]. (原始内容存档于2009-01-13). 
  18. ^ Windows NT Hardware Abstraction Layer (HAL). [2014-01-09]. (原始内容存档于2014-01-09). 
  19. ^ 毛德操:《Windows 内核情景分析—采用开源代码ReactOS(上、下册)》,电子工业出版社, 2009-5 ISBN 9787121081149
  20. ^ wine官网的《Wine Developers Guide》
  21. ^ 潘爱民:《Windows内核原理与实现》,电子工业出版社,2013年5月第1版ISBN 9787121200564
参考

外部链接

[编辑]