CPU保护模式DPL、CPL简易理解
現代INTEL CPU都有保護模式,實模式這兩種CPU運行模式。當CPU加電,CPU初始化時就運行在是模式下,然后現代操作系統會從實模式跳轉到保護模式!
為什么需要保護模式?
在最開始編程的匯編時代,程序員的工作就是讀懂處理器指令,然后用這些指令來寫程序完成工作!一個程序員要寫一個程序,這個程序包括了驅動CPU,驅動內存,驅動磁盤等所有的代碼,否則就是一顆裸CPU無法運行!后來每一個程序員都覺得這些驅動過程幾乎一樣,所以就開始構寫操作系統,然操作系統來干這些事情!操作系統(這里指的是最原始的操作系統,其功能只完成一個,比如完成計算器功能)寫完之后,后一代的程序員要寫程序,還是要讀懂CPU指令,只是不需要再從頭到會驅動所有硬件了!操作系統后來走向商業化,一些程序員寫的操作系統拿出來賣,然后其他程序員在操作系統的基礎之上來寫程序!這個時候就遇到一個問題!因為操作系統的編寫所使用的工具(CPU指令)和那些程序員所使用的工具(CPU指令)都是一樣的!而且水平也幾乎差不多,所以這個時候的程序員就有能力直接修改操作系統的某個指令(操做系統加載在內存中,那個時候程序員可以通過指令直接修改內存里任何位置的任何數據,從而導致修改了原始操作系統本身),來完成自己所需要的任務(想一想現在的程序員有幾個有能力通過匯編直接去修改windows內核呢)!起初,這些修改非常合理。隨著計算機的操作系統的發展,原始操作系統功能逐漸增加,所程序員水平的下降,程序員隨意修改操作系統指令,就會導致操作系統的崩潰,這種崩潰就如滾雪球一般越來越多,越來越普遍,所以必須要啟用一種機制讓非系統程序員不能隨意更改操作系統的指令!這個機制就是保護模式
保護模式是如何起到保護作用的呢?
你想想,如果你是INTEL CPU設計師,出現這個問題時,你要如何來設計讓其他程序員不能在內存中隨意修改你的代碼這種保護機制?
我能想到最簡單的方式就是,不允許其他程序員訪問操作系統內核的內存:將操作系統加載到內存地位,每當用戶一個指令需要訪問內存時,就判斷當前訪問的地址是否在操作系統的內存范圍內,如果是就報錯,否則讀取內存!如果你也是這樣想,那么恭喜你,可以去INTEL當CPU構架師,當上總經理,出任CEO,打敗高富帥,迎娶白富美,走上人生的巔峰。你的操作系統內存范圍在INTEL中有個專有名詞叫做 段 ?。?!在CPU級別的編程中,程序是由 段 構成。你的一整條內存,被切割成不同的 段 。每一個段有自己的屬性和權限!INTEL 80286 CPU對于程序段的權限有四個等級 0、1、2、3!數字越大,權限越?。ㄕ堉貜妥x一千遍,再繼續閱讀下文)!通常你的操作系統就是權限最高的等級0。普通程序段處于等級3。INTEL 代碼段有個DPL屬性,可以讓你來定義你的程序段的等級
現在你要計算2的20次方是多少,你在你的操作系統下,就需要自己的寫這個算法的實現,別人用你的系統時也需要去實現這個功能!重構的思想在你腦袋里胡鵬亂撞。你為什么不把這種算法公開給其他程序員使用呢?為什么要浪費精力去重新寫算法呢?但是你的操作系統代碼不允許任何人訪問,這又是一個問題!為了解決這個問題INTEL 給代碼段增加了一個屬性:代碼是否一致
代碼一致:允許代碼段等級相同和代碼段等級較低的代碼訪問
代碼非一致:只有代碼段等級相同可以訪問
所以就只需要將你的冪計算的數學實現代碼段設置為代碼一致,就可以讓權限較低的代碼段訪問了!
等級怎么跳轉?
每個代碼段都一個DPL,CPU當前所要執行的指令cs:ip的DPL是多少呢?當然就是指令所在段的DLP!假設cs:ip的指令屬于代碼段1,而即將要執行的指令是jmp 代碼段2:偏移。那這個時候CPU怎么運行?代碼段2有一個DPL,代碼段1也有一個DPL,這個時候CPU當然要比較目前的代碼段1!實際上每次代碼段跳轉之后,就會將代碼段的DPL記錄在CS寄存器的低2位,這個2位被稱為CPL。也就是說CPL實際上就是DPL(代碼段被加載后DPL的另一個名字,如果代碼段沒有被加載,說一個段的CPL沒有任何意義)。但是這里有一個例外:如果要跳轉的代碼段是一致代碼段,跳轉過后CPL不會修改為一致代碼段的CPL,而是保持上一個段的CPL
CPL和DPL如何比較?
說到比較,就得有一個比較對象和比較規則,比較目的,不同對象之間的比較意義不是很大——手機比大象小、猩猩比美女黑。。
比較對象:代碼段的權限。各自對對應的代碼段的權限
比較目的:權限大小。比較各自代碼段對應的權限大小。
比較規則:因為代碼段有很多種(代碼段的種類通常是由代碼段的屬性定義)!所以對于不同的代碼段,DPL有不同的意義!也就代表了不同的比較規則。皇帝的DPL和太監的DPL肯定代表不同的意義。下面來看一下各種代碼段的DPL定義
數據段、調用門、TTS的DPL:最低權限——CPL的權限比DPL的權利更大!縣長最低需要的權利值(省長或省長以上的官才能夠提出意見)
一致代碼段、非一致代碼段(通過調用門訪問):最高權限——CPL的權利比DPL的權利?。。憔褪强偨y也必須沒有權利干涉我州的事情)
非一致代碼段(不通過調用門訪問):同級權限——(我是省長,你也必須是省長)!
什么又是RPL?
網上說RPL是程序員一個意圖,就是程序在編寫時,程序員一廂情愿的希望某個代碼段是哪個等級!但是實際在運行過程中,CPU還是要看代碼段本身的CPL等級!如果RPL等級更低,就用更低的權限跳轉到目標段,如果更高,就用CPL的權限跳轉到目標段!我不太理解這樣做有什么意義,希望有人知道的,能指點我,謝謝!
總結
以上是生活随笔為你收集整理的CPU保护模式DPL、CPL简易理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事务:Transaction详解
- 下一篇: excel表格如何做数据对比图(EXCE