Windows NT体系结构

Windows NT體系結構是指一系列微軟設計及製造，由Windows NT所衍生出的視窗作業系統架構，採用用戶模式與核心模式的分層設計。它是一种是搶佔式和可重入的操作系统，可運行在單處理器或對稱多處理器（SMP）上。並利用I/O請求包和異步I/O來處理所有的I/O請求。微软从Windows XP开始提供64位的Windows版本，之前只有32位版本。 用戶模式下的程式與子系統在它们可以访问的系统资源方面受到限制，而核心模式对系统资源和外部设备的访问不受限制，可以完全访问计算机的硬件和系统资源。Windows NT内核是屬於混合核心；其體系結構包括簡單內核、硬體抽象層（HAL）、驅動程式、服務（總稱為執行體），它们都存在于内核模式中。 构成Windows NT用戶模式的子系统可以透過I/O管理器傳遞I/O請求給核心模式中适当的驅動程式。Windows NT的用戶模式由環境子系統（執行為不同類型作業系統編寫的應用程式）和集成子系統（Integral subsystem，代表環境子系統執行特定系統的功能）组成。内核模式阻止用户模式的服务和应用程序访问它们不应访问的操作系统关键区域。 執行體與所有的用戶模式子系統處理I/O、对象管理、安全和进程管理。位於硬體抽象層與執行體之間的核心提供了多處理器同步、线程、中断调度和分派、故障處理和例外分派的功能。内核還負責在啟動時初始化设备驱动程序。内核模式驱动程序分為三個級別：高層驅動程式、中層驅動程式和低層驅動程式。Windows驅動程式模型（WDM）位於中層，主要設計為在Windows 98與Windows 2000之間實現二進位檔與原始碼相容。最底层的驱动程序要么是直接控制设备的旧版Windows NT设备驱动程序，要么是即插即用硬件总线。 Windows NT作業系統的用戶模式部分包括兩個子系統：環境子系統與集成子系統。 環境子系統執行依據不同作業系統API而寫的程式，有三個環境子系統：Win32子系統、OS/2子系統、POSIX子系統。 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環境子系統支援基於文字介面的16位元OS/2應用程式，或虛擬出來的OS/2 1.x。但執行在x86平台上OS/2 2.x及之後的非32位元或圖形化OS/2應用程式則不被支援。若要執行圖形化的OS/2 1.x程式，則需要安裝Windows NT Add-On Subsystem for Presentation Manager。 最後一個具有OS/2子系統的是Windows 2000，從Windows XP開始則不再包含，但可透過在Windows XP上安裝Microsoft Virtual PC 2004取得OS/2程式的執行環境。 POSIX環境子系統支持嚴格遵照POSIX.1標準及與ISO/IEC相關標準所寫的程式。這一子系統已經被Interix（英语：Interix）替代，屬於Windows Services for UNIX的一部分。 集成子系統包括安全子系統、工作站服務與伺服器服務。安全子系統處理安全令牌，基於資源許可授予或拒絕用戶帳戶訪問，處理登入請求與初始化登入驗證，以及管理Active Directory。工作站服務提供API給network redirector（英语：network redirector）實作遠端網路存取的功能。伺服器服務則提供與網路服務相關的API。 Windows NT的核心模式能访问所有硬件资源，在保护内存区上执行代码。 控制了调度、线程优先级、内存管理、硬件交互；禁止了用户态的程序与服务访问关键资源，用户态进程必须请求核心态执行这类操作。 x86硬件体系结构支持四种CPU优先级：0到3。仅有0与3这两种优先级被Windows操作系统使用。用户态程序运行在优先级3，核心态运行在优先级0（特权级别）。也分别称作「ring 3」与「ring 0」。这使得具有了只有2个优先级的RISC平台的可移植性。但是打破了OS/2应用程序包含的I/O特权段的兼容性 核心态的操作系统包含了由许多功能模块组成的执行体服务、内核驱动程序、一个（微）内核及一个硬件抽象层（HAL）。 Windows执行体服务建立于低层核心态程序之上，包含在文件NTOSKRNL.EXE中。 负责处理I/O、对象管理、安全、进程管理，划分为几个子系统, 包括缓存管理、配置管理、I/O管理、本地过程调用（LPC）、内存管理、对象管理、进程结构与安全引用监视（SRM）。这些子系统一起构成了执行体服务。系统服务，即系统调用也是在这一级别上实现，除了极少特例为了高性能而直接调用了内核层。 上下文中的术语「service」是指可调用的例程，或一整套可调用的例程。这不同于「服务进程」（service process）。服务进程是用户态下的程序，类似于类Unix系统的守护进程。 对象管理器 对象管理器是一个执行体的子系统，所有其他的执行体子系统，特别是系统调用必须通过它来获得对Windows NT资源的访问，这使得对象管理器成为资源管理的基础设施。 对象管理器用来避免在其他子系统中管理资源带来的冗余与不安全。 在对象管理器视角，每个资源都是一个对象，不论是物理资源（如文件系统或外设），还是逻辑资源（如一个互斥锁）。 缓存控制器 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） 强制实行安全规则的子系统。 通过访问控制表（ACLs）确定一个对象或资源可以被访问。访问控制表由访问控制条目(ACEs)组成。ACE包含了安全标识符（SID）与授予的操作列表，使得用户帐户、用户组账号、登录会话具有对资源的允许、不允许、审核（audit）等权限. GDI 图形设备接口是负责画线、字体绘制、处理调色板等。在Windows NT 3.x系列操作系统，GDI属于用户态。从Windows NT 4.0，GDI移入了核心态，以提高图形性能。 内核（kernel）在HAL与执行体之间，实际上是“微内核”的理念下设计实现出来的。负责多处理器同步，线程与中断的调度与分派，自陷处理，异常分派，在启动时初始化设备驱动程序等。 Windows NT使用核心态的设备驱动程序与硬件交互。用户态下的程序看到的设备都是I/O管理器下的文件对象；而I/O管理器自身看到的设备是设备对象。核心态驱动程序分为3个层次： 最高层驱动程序，中层驱动程序，低层驱动程序。最高层驱动程序，如FAT或NTFS的文件系统驱动程序，依赖于中层驱动程序。中层驱动程序由功能驱动（function driver）组成。功能驱动依赖于总线驱动，即服务于总线控制器、适配器（adapter）、桥（bridge）的驱动。Windows Driver Model (WDM)存在于中层。低层驱动直接控制硬件，不依赖于任何其他驱动程序。 硬件抽象是一套软件子程序（routine），模拟了特定平台有关细节，使得程序不必直接访问硬件资源。因而可以写独立于设备的、高性能代码，通过操作系统访问硬件。 例如，编译器屏蔽了CPU指令集的细节，应用程序作者无需考虑与CPU相关的指令。操作系统的硬件抽象使得程序只需调用操作系统级的操作，而屏蔽了硬件具体细节，使得程序具有了可移植性。 操作系统的硬件抽象层位于硬件与软件之间。对操作系统内核隐藏了硬件的大部分差异，使得核心态代码基本不需要改变即可运行于不同硬件配置的计算机上。硬件抽象大都是硬件驱动程序。被屏蔽的硬件信息包括I/O界面、中断设置、多处理器通信机制等。 可从下述渠道获得Windows内核的实现源码的参考： ReactOS： 类Windows的开源操作系统，与Windows在 API级别兼容 wine：在非Windows系统上运行Win32程序的开源中间层，逻辑上与Windows在 API 级别兼容 Windows Research Kernel：Microsoft向高校和政府开放的用于研究的部分内核源码 微软主题 Windows NT Windows系统库 MinWin（英语：MinWin） Linux內核 Unix體系（英语：Unix architecture） 作業系統內核比較（英语：Comparison of operating system kernels） 用户模式驱动程序框架 核心模式驱动程序框架 ReactOS 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) 引用 Finnel 2000，Chapter 1: Introduction to Microsoft Windows 2000, pp. 7–18. Appendix - Running Nonnative Applications in Windows 2000 Professional. Microsoft Windows 2000 Professional Resource Kit. Microsoft. [2016-11-18]. （原始内容存档于2016-11-18）.  Windows NT Workstation Resource Kit Chapter 28 - OS/2 Compatibility. Microsoft. [2014-01-09]. （原始内容存档于2016-03-03） （英语）.  POSIX and OS/2 are not supported in Windows XP or in Windows Server 2003. Microsoft. [2014-01-09]. （原始内容存档于2013-03-28） （英语）.  Reiter, Brian. The Sad History of the Microsoft POSIX Subsystem. August 24, 2010 [2014-01-09]. （原始内容存档于2013-05-22） （英语）.  Basic Architecture of a Network Redirector. Microsoft. [2016-11-18]. （原始内容存档于2016-11-18）.  Windows NT Networking Architecture. Microsoft. [2016-11-18]. （原始内容存档于2017-03-07）.  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）.  MS Windows NT Kernel-mode User and GDI White Paper. Windows NT Workstation documentation. Microsoft TechNet. [2007-12-09]. （原始内容存档于2007-12-15）.  Chapter 28 - OS/2 Compatibility. Windows NT Workstation Resource Kit. Microsoft. [2009-01-18]. （原始内容存档于2009-02-10）.  Russinovich & Solomon 2005，第124-125頁. Russinovich 1997，Introduction. Active Directory Data Storage. Microsoft. [2021-02-09]. （原始内容存档于2020-02-14）.  Trustee definition. MSDN. [2014-01-09]. （原始内容存档于2006-06-22）.  Siyan 2000. ACE definition. MSDN. [2014-01-09]. （原始内容存档于2021-02-12）.  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）.  Windows NT Hardware Abstraction Layer (HAL). [2014-01-09]. （原始内容存档于2014-01-09）.  毛德操：《Windows 内核情景分析—采用开源代码ReactOS(上、下册)》,电子工业出版社, 2009-5 ISBN 9787121081149 wine官网的《Wine Developers Guide》 潘爱民:《Windows内核原理与实现》,电子工业出版社,2013年5月第1版ISBN 9787121200564 参考 Finnel, Lynn. MCSE Exam 70-215, Microsoft Windows 2000 Server. Microsoft Press. 2000. ISBN 1-57231-903-8.  Russinovich, Mark. Inside NT's Object Manager. Windows IT Pro. October 1997 [2014-01-09]. （原始内容存档于2013-05-17）.  Active Directory Data Storage. Microsoft. [2005-05-09]. （原始内容存档于2020-02-14）.  Solomon, David; Russinovich, Mark E. Inside Microsoft Windows 2000 Third Edition. Microsoft Press. 2000 [2014-01-09]. ISBN 0-7356-1021-5. （原始内容存档于2005-03-23）.  引文使用过时参数coauthors (帮助) 引文格式1维护：冗余文本 (link) Russinovich, Mark; Solomon, David. Microsoft Windows Internals 4th edition. Microsoft Press. 2005. ISBN 0-7356-1917-4.  引文格式1维护：冗余文本 (link) Schreiber, Sven B. Undocumented Windows 2000 Secrets. Addison-Wesley Longman. 2001. ISBN 978-0201721874.  Siyan, Kanajit S. Windows 2000 Professional Reference. New Riders. 2000. ISBN 0-7357-0952-1.  Microsoft's official Windows 2000 site （页面存档备份，存于互联网档案馆） Windows 2000 Plug and Play architecture （页面存档备份，存于互联网档案馆） Memory management in the Windows XP kernel （页面存档备份，存于互联网档案馆）