當前位置:
首頁 > 知識 > 內核態(Kernel Mode)與用戶態(User Mode)

內核態(Kernel Mode)與用戶態(User Mode)

內核態: CPU可以訪問內存所有數據, 包括外圍設備, 例如硬碟, 網卡. CPU也可以將自己從一個程序切換到另一個程序

用戶態:只能受限的訪問內存, 且不允許訪問外圍設備. 佔用CPU的能力被剝奪, CPU資源可以被其他程序獲取

為什麼要有用戶態和內核態

由於需要限制不同的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 並發送到網路, CPU劃分出兩個許可權等級 -- 用戶態內核態

用戶態與內核態的切換

所有用戶程序都是運行在用戶態的, 但是有時候程序確實需要做一些內核態的事情, 例如從硬碟讀取數據, 或者從鍵盤獲取輸入等. 而唯一可以做這些事情的就是操作系統, 所以此時程序就需要向操作系統請求以程序的名義來執行這些操作.

這時需要一個這樣的機制: 用戶態程序切換到內核態, 但是不能控制在內核態中執行的指令

這種機制叫系統調用, 在CPU中的實現稱之為陷阱指令(Trap Instruction)

他們的工作流程如下:

  1. 用戶態程序將一些數據值放在寄存器中, 或者使用參數創建一個堆棧(stack frame), 以此表明需要操作系統提供的服務.
  2. 用戶態程序執行陷阱指令
  3. CPU切換到內核態, 並跳到位於內存指定位置的指令, 這些指令是操作系統的一部分, 他們具有內存保護, 不可被用戶態程序訪問
  4. 這些指令稱之為陷阱(trap)或者系統調用處理器(system call handler). 他們會讀取程序放入內存的數據參數, 並執行程序請求的服務
  5. 系統調用完成後, 操作系統會重置CPU為用戶態並返回系統調用的結果

內核態(Kernel Mode)與用戶態(User Mode)

打開今日頭條,查看更多精彩圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

python如何進行內存管理
JS常用方法匯總

TAG:程序員小新人學習 |