CPU 指令環 ring0,ring1,ring2,ring3


Intel的CPU將特權級別分為4個級別:RING0,RING1,RING2,RING3。

Windows只使用其中的兩個級別RING0和RING3,RING0只給操作系統用,RING3誰都能用。如果普通應用程序企圖執行RING0指令,則Windows會顯示“非法指令”錯誤信息。

ring0是指CPU的運行級別,ring0是最高級別,ring1次之,ring2更次之……

拿Linux+x86來說, 操作系統(內核)的代碼運行在最高運行級別ring0上,可以使用特權指令,控制中斷、修改頁表、訪問設備等等。

應用程序的代碼運行在最低運行級別上ring3上,不能做受控操作。

如果要做,比如要訪問磁盤,寫文件,那就要通過執行系統調用(函數),執行系統調用的時候,CPU的運行級別會發生從ring3到ring0的切換,

並跳轉到系統調用對應的內核代碼位置執行,這樣內核就為你完成了設備訪問,完成之后再從ring0返回ring3。這個過程也稱作用戶態和內核態的切換。


RING設計的初衷是將系統權限與程序分離出來,使之能夠讓OS更好的管理當前系統資源,也使得系統更加穩定。

舉個RING權限的最簡單的例子:一個停止響應的應用程式,它運行在比RING0更低的指令環上,你不必大費周章的想着如何使系統回復運作,

這期間,只需要啟動任務管理器便能輕松終止它,因為它運行在比程式更低的RING0指令環中,擁有更高的權限,可以直接影響到RING0以上運行的程序。

當然有利就有弊,RING保證了系統穩定運行的同時,也產生了一些十分麻煩的問題。

比如一些OS虛擬化技術,在處理RING指令環時便遇到了麻煩,系統是運行在RING0指令環上的,但是虛擬的OS畢竟也是一個系統,也需要與系統相匹配的權限。

而RING0不允許出現多個OS同時運行在上面,最早的解決辦法便是使用虛擬機,把OS當成一個程序來運行。

 

原文地址

CPU 的 ring0,ring1,ring2,ring3


免責聲明!

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



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