Windows操作系統結構

一、層次結構

        Windows從總體上分爲內核模式(Kernel Model)和用戶模式(User Model)。談到操作系統的內核模式和用戶模式,一般會和CPU的特權層聯繫起來。CPU有多個特權層,例如,Intel的386CPU就有4個特權層,從第0層到第3層。其中第0層的特權最高,也就是可以執行任意代碼,第3層特權最低,只能執行有限代碼。

        Windows將內核模式運行在CPU的第0層,將用戶模式運行在CPU的第3層。內核模式下運行的都是核心代碼,這些代碼是安全的,且不會受到惡意的攻擊。而運行在用戶模式下的應用程序是最不安全且容易受到攻擊的,所以應用程序權限是受到限制的。如果應用程序進行一些諸如直接訪問物理內存的動作,需要向,需要內核模式下組件提出請求。

        Windows操作系統每層有若干組件組成,其作爲一個整體,它的運行高度依賴於上層組件對下層組件的調用。每層組件都有固定的接口供上層調用,高層如果要進行更改權限操作需要向底層提出請求。結構如圖所示:



        Windows操作系統被劃分爲用戶模式和內核模式兩個部分。用戶模式下,應用程序調用其對應的子系統中的API。這些子系統除了win32,還有POSIX、OS/2等,它們爲了兼容16位應用程序或其他系統應用程序而設計,都是通過調用win32子系統來實現的,但很少被用到。Win32子系統將API函數轉化爲Native API。系統版本的變化只是Native API的改變,並沒有修改Win32,即沒有改變win32 API函數的名稱和參數,實現了對應用程序的兼容。在Native API中的函數調用被轉化爲系統服務函數調用並進入內核模式,並進一步向下傳遞實現相應功能。

二、從應用程序到驅動程序

        根據上面所述Windows操作性的分層特性可知,應用程序對硬件操作的請求是從上而下一層層被交給硬件的。Windows的設計者爲簡化對不同設備的操作,將所有的設備都當作普通文件看待,用操作文件的方法來操作設備。這一點與Linux有很大相似之處。

        常用操作有Creatfile(),CloseHandle(),Readfile(),Writefile(),DeviceIoControl()等。以Creatfile()爲例描述硬件操作過程。


        應用程序調用Createfile() API後,Createfile()會在Native API中調用NtCreatefile()。NtCreatefile()會進入內核模式調用系統服務函數,該函數通過I/O管理器創建I/O請求包(I/O request package,IRP)並傳遞給驅動程序。IRP爲Windows驅動中重要數據結構。驅動程序根據IRP判斷操作類型並調用相應的派遣函數針對硬件抽象層進行操作。由於硬件抽象層由Windows操作系統實現且屏蔽了底層硬件的細節,驅動開發者無需關心硬件細節而只需清除如何與硬件抽象層交互即可。

(本文是將相關材料整理後寫出的,來源:張帆. Windows驅動開發技術詳解[M]. 北京:電子工業出版社,2008)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章