跳至內容

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
參考

外部連結

[編輯]