CPU 核心態和使用者態的區別

2021-10-01 22:57:44 字數 1763 閱讀 6780

cpu的兩種工作狀態:核心態和使用者態(或者稱管態和目態)

核心態

系統中既有作業系統的程式,也由普通使用者的程式。為了安全和穩定性作業系統的程式不能隨便訪問,這就是核心態

核心態可以使用所有的硬體資源

使用者態

不能直接使用系統資源,也不能改變cpu的工作狀態,並且只能訪問這個使用者程式自己的儲存空間

使用者態和核心態

特權級

linux使用了ring3級別執行使用者態,ring0標識核心態

ring0作為核心態,沒有使用ring1和ring2。

ring3狀態不能訪問ring0的位址 空間,包括**和資料。

linux程序的4gb位址空間,3g-4g部分大家是共享的,是核心態的位址空間,這裡存放在整個核心的**和所有的核心模組, 以及核心所維護的資料。使用者執行乙個程式,該程式所建立的程序開始是執行在使用者態的,如果要執行檔案操作,網路資料傳送等操作,必須通過 write,send等系統呼叫,這些系統呼叫會呼叫核心中的**來完成操作,這時,必須切換到ring0,然後進入3gb-4gb中的核心位址空間去執 行這些**完成操作,完成後,切換回ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作核心位址空間,具有一定的安全保護作用。

使用者態和核心態的轉換

系統呼叫

這 是使用者態程序主動要求切換到核心態的一種方式,使用者態程序通過系統呼叫申請使 用作業系統提供的服務程式完成工作,比如linux中fork()實際上就是執行了乙個建立新程序的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用者 特別開放的乙個中斷來實現,例如linux的int 80h中斷。

異常

當cpu在執行執行在使用者態下的程式時,發生了某些事先不可知的異常,這時會觸發由當前執行程序切換到處理此異常的核心相關程式中,也就轉到了核心態,比如缺頁異常。

外圍裝置的中斷

當 外圍裝置完成使用者請求的操作後,會向cpu發出相應的中斷訊號,這時cpu會 暫停執行下一條即將要執行的指令轉而去執行與中斷訊號對應的處理程式,如果先前執行的指令是使用者態下的程式,那麼這個轉換的過程自然也就發生了由使用者態到 核心態的切換。比如硬碟讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後續操作等。

這3種方式是系統在執行時由使用者態轉到核心態的最主要方式,其中系統呼叫可以認為是使用者程序主動發起的,異常和外圍裝置中斷則是被動的。

具體的切換操作

從 觸發方式上看,可以認為存在前述3種不同的型別,但是從最終實際完成由使用者態 到核心態的切換操作上來說,涉及的關鍵步驟是完全一致的,沒有任何區別,都相當於執行了乙個中斷響應的過程,因為系統呼叫實際上最終是中斷機制實現的,而 異常和中斷的處理機制基本上也是一致的,關於它們的具體區別這裡不再贅述。關於中斷處理機制的細節和步驟這裡也不做過多分析,涉及到由使用者態切換到核心態 的步驟主要包括:

從當前程序的描述符中提取其核心棧的ss0及esp0資訊。

使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個過程也完成了由使用者棧到核心棧的切換過程,同時儲存了被暫停執行的程式的下一條指令。

將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。

CPU使用者態 核心態和空閒態

執行top命令時,出現一堆結果不知道什麼意思,於是一通查詢,大概搞明白了輸出結果的含義,其中比較重要的幾個引數是 us user state 使用者態資訊 sy system state核心態資訊 id 空閒狀態 關於使用者態和核心態是個啥,用一張圖一目了然 cpu處理任務表面上看似是並行工作,實際...

cpu核心態與使用者態

核心態 kernel mode 執行作業系統程式,操作硬體 使用者態 user mode 執行使用者程式 特權指令 只能由作業系統使用 使用者程式不能使用的指令。舉例 啟動i o 記憶體清零 修改程式狀態字 設定時鐘 允許 禁止終端 停機 非特權指令 使用者程式可以使用的指令。舉例 控制轉移 算數運...

核心態和使用者態的區別

核心態與使用者態是作業系統的兩種執行級別,intelcpu提供ring0 ring3三種級別的執行模式。ring0級別最高,ring3最低。當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態...