核心態與使用者態是作業系統的兩種執行級別,intel cpu提供ring0-ring3四種級別的執行模式。ring0級別最高,ring3最低。
當乙個任務(程序)執行系統呼叫而陷入核心**中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心**中執行。當程序處於核心態時,執行的核心**會使用當前程序的核心棧。每個程序都有自己的核心棧。當程序在執行使用者自己的**時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者**中執行。
在核心態下cpu可執行任何指令,在使用者態下cpu只能執行非特權指令。當cpu處於核心態,可以隨意進入使用者態;而當cpu處於使用者態時,使用者從使用者態切換到核心態只有在系統呼叫和中斷兩種情況下發生,一般程式一開始都是執行於使用者態,當程式需要使用系統資源時,就必須通過呼叫軟中斷進入核心態。
linux使用了ring3級別執行使用者態,ring0作為核心態,沒有使用ring1和ring2。ring3狀態不能訪問ring0的位址空間,包括**和資料。linux程序的4gb位址空間,3g-4g部分大家是共享的,是核心態的位址空間,這裡存放在整個核心的**和所有的核心模組,以及核心所維護的資料。使用者執行乙個程式,該程式所建立的程序開始是執行在使用者態的,如果要執行檔案操作,網路資料傳送等操作,必須通過write,send等系統呼叫,這些系統呼叫會呼叫核心中的**來完成操作,這時,必須切換到ring0,然後進入3gb-4gb中的核心位址空間去執行這些**完成操作,完成後,切換回ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作核心位址空間,具有一定的安全保護作用。
核心態和使用者態的區別
核心態與使用者態是作業系統的兩種執行級別,intelcpu提供ring0 ring3三種級別的執行模式。ring0級別最高,ring3最低。當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態...
使用者態和核心態的區別
在cpu的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如 清記憶體 設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會...
使用者態和核心態的區別
在cpu的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如 清記憶體 設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會...