Windows內核原理與實現讀書筆記(1)Windows系統結構

Windows內核結構

上圖是windows內核的組成結構

如圖Windows內核分三層,與硬件直接打交道的是硬件抽象層HAL,這一層把所有與硬件相關代碼邏輯隔離到一個專門模塊中,從而是上層儘可能獨立於硬件平臺。HAL是一個獨立動態鏈接庫,windows帶了多個如Hal.dll,halacpi.dl等,這是根據高級配置和電源接口高級可編程中斷控制器之類的區別,只有一個會被選中選中之後拷貝改名爲hal.dll,hal纔是真正的硬件抽象層,例如自旋鎖和中斷是在hal實現。內核只需簡單實用其導出函數。

HAL之上是內核層,有時候成爲微內核,這是大內核中的小內核,是ntoskrnl.exe的下層部分,上傳是執行體,接近HAL層,這層是包含了基本的操作系統原語和功能,如進程線程,線程調度,中斷和異常處理,同步對象和各種機制,還負責同步處理器直接行爲。windows內核實現了搶佔式線程調度機制,就是線程按優先順序,分配到處理器上,每個線程有基本優先級,也有動態優先級,高優先級線程可搶斷低優先級線程,windows內核按面向對象思想,管理兩種對象,分發器對象(dispatcher object)和控制對象,分發器對象實現各種同步功能,這些對象狀態會影響線程電鍍。分發器對象包括event,mutant,Semaphore,process,thread,queue,gate,timer。控制設備對象被用於控制內核操作,不影響線程調度,包括異步過程調用APC,延遲過程調用DPC,中斷對象等。

在內核層之上是執行體層,這一層是提供上層應用程序或內核驅動程序直接調用的功能和語義,Windows內核的執行體包含一個對象管理器,用於一致地管理執行體中的對象。執行體層和內核層位於同一個二進制模塊中,即內核基本模塊,其名稱爲ntoskrnl.exe。執行體是ntoskrnl上層,包含進程線程管理器,內存管理器,安全引用監視器,IO管理器,緩存管理器。配置管理器。即插即用管理器。電源管理器。

 

既然在同一個模塊,內核層和執行體層分工是,內核層實現操作系統基本機制,而所有策略決定則留給執行體。執行體中的對象絕大多數封裝了一個或者多個內核對象,並通過某種方式比如對象句柄,暴露給應用程序。這種設計體現了機制與策略分離的思想。

Windows內核爲用戶模式代碼提供一組系統服務,供應用程序使用內核中的功能。應用程序通常並不直接調用這些系統服務,而是通過一組系統DLL,最終通過ntdll.dll切換到內核模式下的執行體API函數中,以調用內核中的系統服務,ntdll.dll是鏈接用戶模式代碼和內核模式系統服務的橋樑,對於內核提供的每個系統服務,該DLL都提供一個相對應的存根函數,這些存根函數的名稱以NT作爲前綴,比如NtCreatProcess等,此外ntdll.dll還提供了很多系統的支持函數,比如映像加載器函數(以Ldr)爲前綴,WIndows子系統進程通信函數(以Csr爲前綴),調試函數(以Dbg爲前綴),系統事件函數(以Etw爲前綴),以一般的運行支持函數(以Rtl爲前綴)和字符串支持函數。

執行體API函數若果先前模式時用戶模式要做參數檢查,指針還要做內存校驗。比如probeforwrite(long)。

每個線程都維護着一個狀態值,說明它以前的處理器模式是用戶模式還是內核模式。

即插即用管理器

這類模型驅動程序稱爲WDM,一用三種類型,總線驅動,功能驅動,過濾驅動程序。

windows原生文件系統NTFS(NT File System),驅動是ntfs.sys。另一個是FAT,windows支持兩種形式的過濾驅動程序:一種直接插入到設備棧中,能夠看到每一個經過設備棧文件的I/O請求,另一種基於Windows提供的過濾管理器驅動程序(FltMgr)的I/O過濾框架,稱爲文件系統小過濾驅動程序,並不出現在文件系統設備棧,通過回調方式響應FltMgr的事件。

分區是存儲設備上連續存儲區域,卷是值扇區邏輯集合,卷內部扇區可能是來自一個分區,或者多個分區,文件系統是卷內部的邏輯結構。

所以從應用程序-->存儲設備應該是,文件系統,卷管理部分,分區管理,磁盤驅動。

磁盤設備是典型的即插即用,最下層總線驅動程序,最上層分區管理器驅動程序,負責通知即插即用管理器當前磁盤有哪些分區,因而系統中的磁盤管理器可以接收到有個分區創建和刪除。

網絡

有Windows套接字,Winsock,WinInet(高層網絡API,包括FTP,HTTP).

命名管道(named pipe)和油槽(mailslot)。用於不同進程間通信,支持不同機器上進程通信,前者連接方式,後者非連接方式通信,可以廣播。

NetBIOS是早期網絡API,支持有連接,無連接通信。

RPC是網絡通信標誌,分佈式系統基礎組件,RPC建立在其他網絡API上,比如命名管道Winsock。Windows的RPC支持異步通信。

這些網絡API提供了用戶模式的dll,通過dll發出網絡請求,將接收到的請求給驅動,通常要麼通過系統服務如油槽管道等給,要麼是I/O管理器對象給驅動。

winsock是windows最重要的網絡API,用戶模式包含了一個dll,即ws2_32.dll,還定義了一個可擴展的框架,允許第三方插入傳輸服務提供者和名字空間服務提供者。以支持更多的傳輸服務和名稱解析或地址映射能力。Winsock默認支持TCP/IP,IPX/SPX,AppleTalk和ATM協議,提供的傳輸服務和名字空間服務通過內核驅動afd.sys實現網絡通信。

在內核模式網絡API驅動通過傳輸驅動程序接口(TDI),與協議驅動通信。TDI實際上預定了一組I/O請求,如名字解析,建立連接等。網絡API驅動程序是TDI客戶,傳輸協議驅動實現了TDI接口,稱爲TDI傳輸器。TDI用戶和TDI傳輸器之間鬆耦合,多對一。

Windows中,網絡協議與網絡適配器驅動是分開的,協議驅動程序獨立於任何一個網絡適配器,真正發送和接收數據是通過網絡適配器進行。協議驅動通過統一結構與適配器去哦多功能進行通信就是NDIS(Network Driver Interface Specification)

符合NDIS的網絡適配器驅動稱爲NDIS驅動,或NDIS小端口驅動。Windows提供了NDIS庫即ndis.sys,作爲協議驅動和NDIS驅動程序橋樑,隨系統發行。

NDIS客戶即TDI傳輸器利用NDIS提供的功能,對將要發送給NDIS驅動程序格式化,併發給NDIS驅動,而NDIS驅動程序則利用NDIS庫,接收請求和送回應答。NDIS驅動被封標準設備驅動程序,通過NDIS庫與NDIS客戶通信,I/O管理器不介入。

Windows子系統

Win32k.sys包含2部分,窗口管理和圖形設備接口,窗口管理負責收集分發消息,控制窗口顯示和管理屏幕輸出。圖形設備接口部分包含各種形狀繪製及文本輸出功能。

 

 

 

 

 

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