日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户模式与内核模式(2)

發布時間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户模式与内核模式(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用戶模式與內核模式

從Intel80386開始,出于安全性和穩定性的考慮,該系列的CPU可以運行于ring0~ring3從高到低四個不同的權限級,對數據也提供相應的四個保護級別。運行于較低級別的代碼不能隨意調用高級別的代碼和訪問較高級別的數據,而且也只有運行在ring0層的代碼可以直接對物理硬件進行訪問。由于WindowsNT是一個支持多平臺的操作系統,為了與其他平臺兼容,它只利用了CPU的兩個運行級別。一個被稱為內核模式,對應80x86的ring0層,是操作系統的核心部分,設備驅動程序就是運行在該模式下;另一個被稱為用戶模式,對應80x86的ring3層,操作系統的用戶接口部分(就是我們通常所說的win32 API)以及所有的用戶應用程序都運行在該級別。操作系統對運行在內核模式下的代碼是不設防的,所以不管是建設還是破壞內核模式下的編程都是值得去研究的。

如下圖所示為Windows操作系統驅動程序模型:

??????? Windows驅動程序既可以運行在用戶態也可以運行在核心模態。

?

??????? 用戶態與核心太驅動程序的區別

??????????? ? 用戶態的驅動程序運行在非特權處理機模式(nonprivileged processor mode)上,其他一些被保護的子系統代碼也運行在該模式上。用戶態的驅動程序不能獲得系統數據的存取權,除非調用Win32 API或者系統服務。

??????????? ? 核心態驅動程序作為操作系統的一個組成部分被執行——支持一個或多個受保護的子系統的操作系統底層組件。

??? 用戶態和核心態驅動程序有不同的結構,不同的入口點和不同的系統接口。一個設備是需要一個用戶態驅動程序還是需要一個核心態驅動程序依賴于該設備的類型和操作系統對它提供的支持。

一些設備驅動程序可以完全地或部分地運行在用戶態。用戶態驅動程序沒有堆棧空間的限制,可以訪問Win32 API,并且容易調試。


大多設備驅動程序運行在核心態。核心態驅動程序可以完成某些受保護的操作,并且可以訪問用戶態驅動程序不能訪問的系統結構體(system sturcture)。然而,訪問權限的提高當然也要付出相應的代價——調試的艱難,系統隨時面臨毀壞的危險。當代碼運行在有特權的核心態環境中時,操作系統對代碼所請求的數據的完整性和有效性的檢查將大大減少。


為了方便,應該用高級語言(high-level language)來編寫驅動程序,通常,C適合用來編寫核心態驅動程序,C或C++則適合用于編寫用戶態驅動程序。

用戶模式與內核模式是如何交互的呢

??? 當用戶模式程序需要讀取設備數據時,它就調用Win32 API函數,如ReadFile。Win32子系統模塊(如KERNEL32.DLL)通過調用平臺相關的系統服務接口實現該API,而平臺相關的系統服務將調用內核模式支持例程。在ReadFile調用中,調用首先到達系統DLL(NTDLL.DLL)中的一個入口點,NtReadFile函數。然后這個用戶模式的NtReadFile函數接著調用系統服務接口,最后由系統服務接口調用內核模式中的服務例程,該例程同樣名為NtReadFile。
系統中還有許多與NtReadFile相似的服務例程,它們同樣運行在內核模式中,為應用程序請求提供服務,并以某種方式與設備交互。它們首先檢查傳遞給它們的參數以保護系統安全或防止用戶模式程序非法存取數據,然后創建一個稱為“I/O請求包(IRP)”的數據結構,并把這個數據結構送到某個驅動程序的入口點。在剛才的ReadFile調用中,NtReadFile將創建一個主功能代碼為IRP_MJ_READ(DDK頭文件中的一個常量)的IRP。實際的處理細節可能會有不同,但對于NtReadFile例程,可能的結果是,用戶模式調用者得到一個返回值,表明該IRP代表的操作還沒有完成。用戶模式程序也許會繼續其它工作然后等待操作完成,或者立即進入等待狀態。不論哪種方式,設備驅動程序對該IRP的處理都與應用程序無關。

驅動程序完成一個I/O操作后,通過調用一個特殊的內核模式服務例程來完成該IRP。完成操作是處理IRP的最后動作,它使等待的應用程序恢復運行。

總結

以上是生活随笔為你收集整理的用户模式与内核模式(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。