Windows操作系統架構梳理

本文將從上往下,按Windows操作系統總體架構圖(如下),進行記錄。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nj4vl7a3-1590898197693)(C:\Users\Walker\AppData\Roaming\Typora\typora-user-images\image-20200530205518198.png)]

1. 子系統

① 爲了方便在Windows上,移植其它操作系統的程序而設計,主要功能是向上層應用提供API函數

② Windows應用程序開發者,在編譯、鏈接代碼時,需要先指明自己的應用程序屬於哪個子系統;

③ 最純正的Windows子系統爲Win32子系統,其餘子系統都是通過以Win32爲媒介實現,Win32提供的API主要分爲三類:

​ ※ USER函數:管理窗口、菜單、對話框和控件。接口存儲於USER32.dll文件;

​ ※ GDI函數:在物理設備上執行繪圖操作。接口存儲於GDI32.dll文件;

​ ※ KERNEL函數:管理非GUI資源,如進程、線程、文件和同步服務等。接口存儲於KERNEL32.dll文件。

④ 目前Windows中,上述三種API函數的實現,已經被移入了內核模式,以提高API得運行效率。

2. Native API ( ntdll.dll )

實現用戶模式到內核模式的穿越,進而調用系統服務,以此爲基礎運行相應的Win32 API

② 在Windows進行版本迭代時,Native API是主要的修改對象,以保證面向上層應用的Win32 API改動儘可能少;

③ Native API函數的命名,一般爲相應的Win32 API命名前,加上"Nt"。接口存儲於ntdll.dll文件。

3. 系統服務

當某一個Native API進入內核模式時,會將自身的參數以及系統服務號一同傳入。系統服務組件,負責以該服務號爲索引,在"系統服務描述表 ( System Service Descriptor Table )"中,查找API對應的服務函數地址

4. 內存管理器

負責管理虛擬內存,實現對虛擬內存的申請、回收等操作

② Windows規定,每個進程擁有4GB的虛擬內存。該內存分爲兩部分:"0 ~ 0x7FFFFFFF"爲用戶模式地址、"0x80000000 ~ 0xFFFFFFFF"爲內核模式地址;

對於不同進程,用戶模式虛擬地址映射而成的物理地址也不相同,以保證進程之間不會互相干預;

所有進程內核模式下,虛擬內存的映射方式完全一致,以保證內核數據對於每個進程都是同步的。

5. 進程和線程管理

負責創建和終止進程,線程的調度是由內核負責的。進程和線程管理程序,依賴其它執行程序組件,如對象管理程序、內存管理器等。

6. 配置管理器

負責記錄所有計算機軟件、硬件的配置信息,將數據保存在註冊表 ( Registry ) 中;

② 驅動程序根據註冊表中的信息進行加載,或提取相應的參數。

7. I/O管理器

① I/O Request Packages ( 簡稱IRP ),負責發起I/O請求,並且管理請求;

② I/O請求是用戶模式應用程序一系列操作的抽象,如對端口的讀寫、對鍵盤的訪問、對磁盤文件的操作等;

③ IRP中包含操作的一系列數據,如是讀還是寫,操作多少字節,在什麼環境下操作等;

④ IRP被傳遞到具體的驅動程序中,由驅動完成操作後,原路返回。

8. 對象管理器

① Windows操作系統提供的所有服務幾乎都是以對象的形式存在的;

對象管理器負責創建、管理、回收系統中對象的組件

9. 設備驅動程序:

針對某種應用場合,提供給Windows內核的“補丁”。其運行在內核模式下,爲上層應用操作特定的硬件設備提供支持,如訪問物理映射內存、設備。

10. 內核

① 內核是系統的心臟,運行於最高特權之上,被設計成可以並行運行在多處理器上;

② 內核在調度線程時,除了更高的中斷請求級別 ( IRQL ),不允許其它線程打斷

③ 內核爲執行體組件提供最基本的支持:

  • 提供對內核對象的支持;
  • 負責對線程的調度;
  • 提供對多處理器同步的支持;
  • 提供中斷處理函數的支持;
  • 提供對錯誤陷阱的支持;
  • 提供對其它硬件特殊功能的支持。

11. 硬件抽象層

隱藏了特定平臺的硬件接口細節,爲操作系統提供虛擬硬件平臺,使其具有硬件無關性,可在多種平臺上進行移植。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章