操作系統——用戶態和內核態


處理器的4種狀態

大多數計算機系統處理器狀態有4種,分別支持0~3級共4個特權級別,其中0級權限最高,3級權限最低

  1. 0級(Ring0/R0)為內核級,處理I/O操作,執行中斷處理等關鍵操作
  2. 1級(Ring1/R1)為系統調用級,可以執行文件系統調用,獲得特定的和受保護的程序服務
  3. 2級(Ring2/R2)為共享庫級,可被多個運行進程共享,允許調用庫函數,讀取但不修改內部數據
  4. 3級(Ring3/R3)為應用程序級,所受到的保護最少

幾乎所有的通用操作系統只使用了0級和3級,即簡單區分內核態和用戶態

內核態

即為上面所說的0級(Ring0/R0),本質上來說負責最基本的硬件管理,如處理I/O操作請求,執行中斷處理(沒錯中斷屬於硬件管理),文件管理

用戶態

即為上面所說的3級(Ring3/R3),本質上來說負責人機交互,即運行一些你一眼就會用或者上網查一查就會用的軟件

內核態和用戶態的互相轉換

中斷!

一般程序在運行過程中,產生了中斷,例如該騰訊會議需要調用本機的麥克風和攝像頭,由用戶態轉向內核態,由內核態組織調用攝像頭和麥克風,在騰訊會議請求調用得到處理后,內核態就會改變關鍵字段,轉換為用戶態

用戶態轉向內核態的所有情況都是:中斷,而內核態轉向用戶態就是在內核態需要處理的中斷處理完了就轉換為用戶態

那么中斷有哪些呢

中斷的類型

外中斷

即我們一般所說的中斷,指的是來自CPU外部的中斷請求,如I/O操作處理,磁盤讀寫等等

內中斷

即我們所說的異常,一般有三種:陷入(trap)、錯誤(fault)、終止(abortion)

  • 陷入(trap)和錯誤(fault)

    陷入(trap):由陷入指令引發,是應用程序故意引發的

    錯誤(fault):由錯誤條件引起的,可能被內核程序修復。內核程序修復故障后會把 CPU使用權還給應用程序,讓它繼續執行下去。如:缺頁故障

    錯誤(fault)和陷入(trap)最重要的一點區別是他們發生時所保存的EIP值的不同:錯誤(fault)保存的EIP指向觸發異常的那條指令;而陷入(trap)保存的EIP指向觸發異常的那條指令的下一條指令

  • 終止(abortion),指程序遇到了不可修復的錯誤,例如整數除零

Linux操作系統的root用戶和內核態的區別

root用戶只是一個超級用戶,只不過是一個權力大一些的用戶。

天行有常,不為堯存,不為桀亡——《荀子》

這句話我認為可以很好地類比Linux下普通用戶、root用戶和內核態的關系。

普通用戶為平民,root用戶為皇帝。平民說我要把國庫一把火燒了,這肯定是不行的;但是皇帝說我要一把火把國庫燒了,這誰也不敢攔(sudo rm -rf /* 🐶)。但是這么皇帝這么做有沒有什么結果呢,那當然會引起很多很多問題,此時就是天行有常了,內核態就是那個世間天理規律,一直都存在,人人都可以利用世間天理規律,平民和皇帝都可以;當然違背了天理規律,總會受到天理規律的懲罰

參考資料

[中斷(interrupt)、異常(exception)、陷入(trap)]:https://blog.csdn.net/bailyzheng/article/details/8018820)
[同步中斷與異步中斷的區別]:https://www.cnblogs.com/zxc2man/p/11822263.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM