x86-2-保護模式(protect mode)
引入保護模式的原因:
作業系統負責電腦上的所有軟體和硬體的管理,它可以百分百操作電腦的所有內容。但是,作業系統上編寫的用戶程式卻應當有所限制,比如只允許用戶程式訪問屬於自己程式的內容,不然整個生態就很惡劣了,想像下你手機上的的微信被惡意軟體給修改了,給你的所有好友群發黃色廣告,你難受嗎。
但是在之前8086CPU的工作模式也就是實模式的工作模式下,程式對軟硬體的訪問非常自由,沒有任何限制,我們隨隨便便就可以修改記憶體上的數據,即使這個記憶體的範圍不在我們程式的數據段里。這就和我們前面所想違背了。
因為在多用戶、多任務時代,記憶體會有多個用戶(應用)程式在同時使用,為了使它們彼此隔離,防止因某個程式的編寫錯誤或者崩潰而影響到作業系統和其他用戶程式,所以就有了保護模式。
也就是說保護模式就是為了防止某個程式影響作業系統和其它用戶程式,每一個都相對獨立。(作業系統也可以當作一個大型的程式)。
保護模式要保護什麼內容:
實質上就是保護CPU中的某些資源不能被隨意訪問,包括硬體資源和作業系統的軟體資源,比如說:記憶體、GDT、IDT等類型的系統級數據結構圖以及OS 內核程式碼和數據等等。
保護模式根據什麼來進行保護:
保護模式根據特權級來進行保護。
特權級:
在保護模式下,每個段都有一個特權級。intel的CPU特權級採用了0,1,2,3四種特權級,許可權從高到低,也就是0級許可權最高,3級最低。一般來說作業系統的特權級為0,用戶程式的特權級最低為3。其中Windows只採用了0和3,也就是經常俗稱的0環和3環。
特權級為0的程式擁有最高的許可權,可以和實模式一樣全方位操作電腦。其它特權級就許可權依次往下。
擁有高特權級的程式碼可以對低特權級的數據進行訪問,反之不行。
保護模式如何進行隔離和保護:
保護模式實施了種種訪問限制,x86的段式管理(segmentation)和頁式管理(paging)是實施保護措施的手段和途徑。
segmentation機制和paging機制實行不同的記憶體管理模式和訪問控制,對資源的訪問先經過segementation階段,然後如果還開啟了paging就再經過paging機制。也就是說paging機制是一個可選項。
因為實模式太不安全,所以引入了保護模式,保護模式通過段式管理和頁式管理根據段的特權級來進行保護和隔離。

