Windows系统架构
操作系統模型
大多數操作系統中,都會把應用程序和內核代碼分離運行在不同的模式下。內核模式訪問系統數據和硬件,應用程序運行在沒有特權的模式下(用戶模式),只能使用有限的API,且不能直接訪問硬件。當用戶模式調用系統服務時,CPU執行一個特殊的指令以切換到內核模式,當系統服務調用完成時,操作系統切換回用戶模式。
Windows與大多數UNIX系統類似,驅動程序代碼共享內核模式的內存空間,意味著任何系統組件或驅動程序都可能訪問其他系統組件的數據。但是,Windows實現了一套內核保護機制,比如PatchGuard和內核模式代碼簽名。
內核模式的組件雖然共享系統資源,但也不會互相訪問,而是通過傳參數的方式來訪問或修改數據結構。大多數系統代碼用C寫的是為了保證可移植性,C語言不是面向對象的語言結構,比如動態類型綁定,多態函數,類型繼承等。但是,基于C的實現借鑒了面向對象的概念,但并不依賴面向對象。
系統架構
下圖是簡化版的Windows系統架構實現:
首先注意那條橫線將用戶模式和內核模式分開兩部分了。橫線之上是用戶模式的進程,下面是內核模式的系統服務。
這4種用戶模式下的進程分別是:
Fixed系統支持進程,比如登陸進程和Session管理器,它們都不是Windows服務(不是通過SCM即服務控制管理器啟動的)。
服務進程,比如任務調度器和打印機服務,這些服務一般都需要用戶登陸才可以運行。很多服務應用程序,比如sql server和exchange server都以服務的方式運行。
用戶程序,可以是Windows32位或64位,Windows3.1 16位,MS-DOS 16位,或者POSIX 32位或64位,注意16位程序只能運行在32位系統上。
環境子系統服務器進程,實現了部分支持操作系統的環境,也可以說是展現給用戶或者開發者的個性化界面。Windows NT最初發布時帶有Windows,POSIX,OS/2三個子系統,Windows 2000是最后帶有POSIX和OS/2的子系統,旗艦版和企業版的Windows也支持一個加強版的POSIX子系統,叫做SUA(基于UNIX的應用)。
注意:服務進程和用戶程序之下的“子系統DLL”。在Windows下,用戶程序不直接調用本地Windows服務,而是通過子系統DLL來調用。子系統DLL的角色是將文檔化的函數翻譯成該用的非文檔化的系統服務(未公開的)。
內核模式的幾個組件包括:
Windows執行實體,包括基礎系統服務,比如內存管理器,進程和線程管理器,安全管理,I/O管理,網絡,進程間通信。
Windows內核,包括底層系統函數,比如線程調度,中斷,異常分發,多核同步。也提供了一些routine和實現高層結構的基礎對象。
設備驅動,包括硬件設備驅動(翻譯用戶I/O到硬件I/O),軟件驅動(例如文件和網絡驅動)。
硬件抽象層,獨立于內核的一層代碼,將設備驅動與平臺的差異性分離開。
窗口和圖形系統,實現了GUI函數,處理用戶接口和繪圖。
下表中是Windoows系統核心組件的文件名:
| 文件名 | 組件 |
| Ntoskrnl.exe | 執行體和內核 |
| Ntkrnlpa.exe(32位才有) | 支持PAE |
| Hal.dll | 硬件抽象層 |
| Win32k.sys | 子系統的內核模式部分 |
| Ntdll.dll | 內部函數 |
| Kernal32.dll,Advapi32.dll,User32.dll,Gdi32.dll | 核心子系統的組件 |
總結
以上是生活随笔為你收集整理的Windows系统架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: file命令详解
- 下一篇: 小米路由器mini刷openwrt系统