CPU模式学习总结
CPU 模式
大部分CPU 至少都有兩種CPU 模式。CPU 模式也稱為特權(quán)級(jí),它會(huì)根據(jù)CPU 的工作模式限制可以執(zhí)行的
操作。CPU 模式中,全部指令可以無(wú)限制執(zhí)行的模式稱為內(nèi)核模式(Kernel Mode)或管理者模式
(Supervisor Mode),操作系統(tǒng)等系統(tǒng)軟件需要在內(nèi)核模式下工作。反之,可執(zhí)行的指令被限制的模式
稱為用戶模式(User Mode),應(yīng)用軟件通常在用戶模式下工作。用戶模式中被限制的操作包括CPU 控制
寄存器的訪問(wèn)、改變CPU 狀態(tài)的指令等。如果應(yīng)用程序擅自更改CPU 的狀態(tài),最壞會(huì)導(dǎo)致操作系統(tǒng)崩潰
。因此,需要根據(jù)CPU 模式管理各種軟件的權(quán)限。
大多情況下,CPU 的控制寄存器內(nèi)都有可以設(shè)置CPU 模式的區(qū)域。在從高權(quán)限的內(nèi)核模式轉(zhuǎn)換到低權(quán)限
的用戶模式時(shí),可以通過(guò)操作控制寄存器來(lái)實(shí)現(xiàn)。反之,如果要從低權(quán)限的用戶模式轉(zhuǎn)換到高權(quán)限的內(nèi)
核模式,需要使用專用的指令。
========
CPU三種工作模式
??一直以來(lái),都搞不清楚這幾個(gè)概念。在網(wǎng)上搜了一下,把它曬上,不會(huì)再忘記!?
? ? ? 從80386開始,cpu有三種工作方式:實(shí)模式,保護(hù)模式和虛擬8086模式。只有在剛剛啟動(dòng)的時(shí)候
是real-mode,等到linux操作系統(tǒng)運(yùn)行 起來(lái)以后就運(yùn)行在保護(hù)模式。實(shí)模式只能訪問(wèn)地址在1M以下的內(nèi)
存稱為常規(guī)內(nèi)存,我們把地址在1M 以上的內(nèi)存稱為擴(kuò)展內(nèi)存。在保護(hù)模式下,全部32條地址線有效,可
尋址高達(dá)4G字節(jié)的物理地址空間; 擴(kuò)充的存儲(chǔ)器分段管理機(jī)制和可選的存儲(chǔ)器分頁(yè)管理機(jī)制,不僅為存
儲(chǔ)器共享和保護(hù)提供了硬件支持,而且為實(shí)現(xiàn)虛擬存儲(chǔ)器提供了硬件支持; 支持多任務(wù),能夠快速地進(jìn)
行任務(wù)切換和保護(hù)任務(wù)環(huán)境; 4個(gè)特權(quán)級(jí)和完善的特權(quán)檢查機(jī)制,既能實(shí)現(xiàn)資源共享又能保證代碼和數(shù)據(jù)
的安全和保密及任務(wù)的隔離; 支持虛擬8086方式,便于執(zhí)行8086程序。
? ? ? 虛擬8086模式是運(yùn)行在保護(hù)模式中的實(shí)模式,為了在32位保護(hù)模式下執(zhí)行純16位程序。它不是一
個(gè)真正的CPU模式,還屬于保護(hù)模式。?
? ? ? 保護(hù)模式同實(shí)模式的根本區(qū)別是進(jìn)程內(nèi)存受保護(hù)與否??蓪ぶ房臻g的區(qū)別只是這一原因的果。實(shí)
模式將整個(gè)物理內(nèi)存看成分段的區(qū)域,程序代碼和數(shù)據(jù)位于不同 區(qū)域,系統(tǒng)程序和用戶程序沒有區(qū)別對(duì)
待,而且每一個(gè)指針都是指向"實(shí)在"的物理地址。這樣一來(lái),用戶程序的一個(gè)指針如果指向了系統(tǒng)程序
區(qū)域或其他用戶程序 區(qū)域,并改變了值,那么對(duì)于這個(gè)被修改的系統(tǒng)程序或用戶程序,其后果就很可能
是災(zāi)難性的。為了克服這種低劣的內(nèi)存管理方式,處理器廠商開發(fā)出保護(hù)模式。這 樣,物理內(nèi)存地址不
能直接被程序訪問(wèn),程序內(nèi)部的地址(虛擬地址)要由操作系統(tǒng)轉(zhuǎn)化為物理地址去訪問(wèn),程序?qū)Υ艘粺o(wú)
所知。
? ? ? 至此,進(jìn)程(這時(shí)我們可以稱程序 為進(jìn)程了)有了嚴(yán)格的邊界,任何其他進(jìn)程根本沒有辦法訪問(wèn)
不屬于自己的物理內(nèi)存區(qū)域,甚至在自己的虛擬地址范圍內(nèi)也不是可以任意訪問(wèn)的,因?yàn)橛幸恍┨摂M區(qū)?
域已經(jīng)被放進(jìn)一些公共系統(tǒng)運(yùn)行庫(kù)。這些區(qū)域也不能隨便修改,若修改就會(huì)有: SIGSEGV(linux 段錯(cuò)誤
);非法內(nèi)存訪問(wèn)對(duì)話框(windows 對(duì)話框)。
? ? ? CPU啟動(dòng)環(huán)境為16位實(shí)模式,之后可以切換到保護(hù)模式。但從保護(hù)模式無(wú)法切換回實(shí)模式?
? ? ??
? ? ?事實(shí)上,現(xiàn)在的64位奔騰4處理器,擁有三種基本模式和一種擴(kuò)展模式,?
? ? ?基本模式:?
? ? ? ? ? ? ? ? ?保護(hù)模式:純32位保護(hù)執(zhí)行環(huán)境。
? ? ? ? ? ? ? ? ?實(shí)模式:純16位無(wú)保護(hù)執(zhí)行環(huán)境。?
? ? ? ? ? ? ? ? ?系統(tǒng)管理模式:當(dāng)SMI引腳為有效進(jìn)入系統(tǒng)管理模式,首先保存當(dāng)前的CPU上下文。它
有獨(dú)立的地址空間,用來(lái)執(zhí)行電源管理或系統(tǒng)安全方面的指令。?
? ? ?擴(kuò)展模式:
? ? ? ? ? ? ? ? ?IA-32e模 式: 64位操作系統(tǒng)運(yùn)行在該模式。該模式有兩種子模式:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1)兼容模式:該模式下,64位操作系統(tǒng)運(yùn)行在32位兼容環(huán)境,
能正常運(yùn)行16,32位應(yīng)用程序就像基本的保護(hù)模式一樣,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 訪問(wèn)32位地址空間,但不能 運(yùn)行純16位
實(shí)模式程序(就是不能運(yùn)行虛擬86模式程序了)。?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)64位模式:在該模式下,處理器完全執(zhí)行64位指令,使用64
位地址空間和64操作數(shù),運(yùn)行16,32位程序必須切換到兼容模式。
? ? ? ? ? ? ? ? ?IA-32e子模式的切換完全基于代碼段寄存器。這樣一來(lái),運(yùn)行在IA-32e模式中(64位
)的OS完全可以無(wú)縫的運(yùn)行所有16,32,64為應(yīng)用程序,
? ? ? ? ? ? ? ? ?通過(guò)設(shè)置32位后的CS。
========
總結(jié)
- 上一篇: C++ string源码
- 下一篇: UEStudio使用入门