跳转到内容

Windows NT体系结构

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由InternetArchiveBot留言 | 贡献2021年2月9日 (二) 19:36 (补救15个来源,并将0个来源标记为失效。) #IABot (v2.0.8)编辑。这可能和当前版本存在着巨大的差异。

Windows NT作業系統家族的體系結構,包括核心模式與用戶模式兩層,每層中有多個模組。

Windows NT體系結構是指一系列微軟設計及製造,由Windows NT所衍生出的視窗作業系統架構。Windows NT採用用戶模式核心模式的分層設計並且是搶佔式可重入的。可運行在單處理器或對稱多處理器(SMP)上,並利用I/O請求包與異步I/O來處理所有的I/O請求。在Windows 2000(含)之前採用的Windows NT皆為32位元版本的,第一个基于IA-64的64位元Windows NT首先用於64位元的Windows XP,而第一个基于x86-64的64位Windows NT则为Windows Server 2003

用戶模式下的程式與子系統僅能存取其可存取的資源,核心模式下的程式則可以存取所有資源與外部裝置。Windows NT採用的核心是屬於混合核心。其體系結構包括簡單內核硬體抽象層(HAL)、驅動程式、服務(總稱為執行體), 這些均屬於核心模式。[1]

Windows NT的用戶模式子系統可以透過核心模式中的I/O Manager傳遞I/O請求給同樣在核心模式中合適的驅動程式。Windows NT的用戶模式包括了兩個子系統:環境子系統(在不同作業系統類型下執行應用程式);集成子系統(Integral subsystem)執行一些系統相關的函數。在Windows NT中,在核心模式的程式可以存取電腦所有的硬體和系統資源,且在核心模式的程式可以在用戶模式下執行的服務與應用程式存取到臨界區(critical areas)時終止他們,以避免存取到不該存取的記憶體空間。

執行體提供了大部分的系統服務功能。位於硬體抽象層與執行體之間的Windows NT的核心模式部分提供了多處理器同步、執行緒、中斷排程與分派、例外處理、例外分派的功能。核心還負責在啟動時初始化裝置驅動程式。核心模式驅動程式分為三層:高層驅動程式、中層驅動程式、低層驅動程式。Windows驅動程式模型(WDM)是存在於中層驅動程式,主要用於二進位檔與原始碼相容於Windows 98Windows 2000的驅動程式。低層驅動程式也可以是舊式Windows NT的設備驅動程式,或是PnP匯流排。

用戶模式

Windows NT作業系統的用戶模式部分包括兩個子系統:環境子系統與集成子系統。

環境子系統執行依據不同作業系統API而寫的程式,有三個環境子系統:Win32子系統、OS/2子系統、POSIX子系統。[2]

集成子系統包括安全子系統、工作站服務與伺服器服務。安全子系統處理安全令牌,基於資源許可授予或拒絕用戶帳戶訪問,處理登入請求與初始化登入驗證,以及管理Active Directory。工作站服務提供API給network redirector英语network redirector實作遠端網路存取的功能。[3]伺服器服務則提供與網路服務相關的API。[4]

核心态

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

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

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

执行体

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

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

对象管理器
对象管理器是一个执行体的子系统,所有其他的执行体子系统,特别是系统调用必须通过它来获得对Windows NT资源的访问,这使得对象管理器成为资源管理的基础设施。[8] 对象管理器用来避免在其他子系统中管理资源带来的冗余与不安全。[9] 在对象管理器视角,每个资源都是一个对象,不论是物理资源(如文件系统或外设),还是逻辑资源(如一个互斥锁)。
缓存控制器
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)
强制实行安全规则的子系统。[10] 通过访问控制表(ACLs)确定一个对象或资源可以被访问。访问控制表由访问控制条目(ACEs)组成。ACE包含了安全标识符(SID)与授予的操作列表,使得用户帐户、用户组账号、登录会话[11]具有对资源的允许、不允许、审核(audit)等权限.[12][13]
GDI
图形设备接口是负责画线、字体绘制、处理调色板等。在Windows NT 3.x系列操作系统,GDI属于用户态。从Windows NT 4.0,GDI移入了核心态,以提高图形性能。[14]


內核

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

核心态驱动

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

硬件抽象层(HAL)

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

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

内核源码参考

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

  • ReactOS[16] 类Windows的开源操作系统,与Windows在 API级别兼容
  • wine[17]在非Windows系统上运行Win32程序的开源中间层,逻辑上与Windows在 API 级别兼容
  • Windows Research Kernel[18]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)

注释与参考文献

Notes
  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]. 
  3. ^ Basic Architecture of a Network Redirector. Microsoft. [2016-11-18]. 
  4. ^ Windows NT Networking Architecture. Microsoft. [2016-11-18]. (原始内容存档于2017-03-07). 
  5. ^ 5.0 5.1 5.2 Roman, Steven. Windows Architecture. Win32 API Programming with Visual Basic. O'Reilly and Associates, Inc. 1999. ISBN 1-56592-631-5. 
  6. ^ MS Windows NT Kernel-mode User and GDI White Paper. Windows NT Workstation documentation. Microsoft TechNet. [2007-12-09]. (原始内容存档于2007-12-15). 
  7. ^ Chapter 28 - OS/2 Compatibility. Windows NT Workstation Resource Kit. Microsoft. [2009-01-18]. (原始内容存档于2009-02-10). 
  8. ^ Russinovich & Solomon 2005,第124-125頁.
  9. ^ Russinovich 1997,Introduction.
  10. ^ Active Directory Data Storage. Microsoft. [2021-02-09]. (原始内容存档于2020-02-14). 
  11. ^ Trustee definition. MSDN. 
  12. ^ Siyan 2000.
  13. ^ ACE definition. MSDN. 
  14. ^ 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). 
  15. ^ Windows NT Hardware Abstraction Layer (HAL)
  16. ^ 毛德操:《Windows 内核情景分析—采用开源代码ReactOS(上、下册)》,电子工业出版社, 2009-5 ISBN 9787121081149
  17. ^ wine官网的《Wine Developers Guide》
  18. ^ 潘爱民:《Windows内核原理与实现》,电子工业出版社,2013年5月第1版ISBN 9787121200564
References

外部链接