從操作系統(tǒng)基礎(chǔ)1我們已經(jīng)知道:操作系統(tǒng)作為用戶與計(jì)算機(jī)硬件直接的接口,是配置在計(jì)算機(jī)硬件上的第一層軟件,所以操作系統(tǒng)的運(yùn)行必須要依賴一些基本的硬件迫筑,或者說(shuō)需要一些基本硬件的支持匙奴。主要包括以下幾種:CPU(Central Processing Unit)中央處理器详炬、內(nèi)存裙品、中斷忍宋、時(shí)鐘
CPU中央處理器
中央處理器(CPU帝火,Central Processing Unit)是一塊超大規(guī)模的集成電路溜徙,是一臺(tái)計(jì)算機(jī)的運(yùn)算核心(Core)和控制核心(Control Unit)。它的功能主要是解釋計(jì)算機(jī)指令以及處理計(jì)算機(jī)軟件中的數(shù)據(jù)犀填。中央處理器主要包括運(yùn)算器(算術(shù)邏輯運(yùn)算單元蠢壹,ALU,Arithmetic Logic Unit)和高速緩沖存儲(chǔ)器(Cache)及實(shí)現(xiàn)它們之間聯(lián)系的數(shù)據(jù)(Data)九巡、控制及狀態(tài)的總線(Bus)
主要制造商:Intel图贸、AMD
CPU架構(gòu)分類(lèi):
ARM架構(gòu):
ARM架構(gòu):精簡(jiǎn)指令集機(jī)器RISC(Advanced RISC Machine,更早稱作:Acorn RISC Machine)冕广,是一個(gè)32位精簡(jiǎn)指令集(RISC)處理器架構(gòu)疏日,廣泛地使用在許多嵌入式系統(tǒng)設(shè)計(jì)。
英國(guó)ARM公司本身并不靠自有的設(shè)計(jì)來(lái)制造或出售CPU撒汉,而是將處理器架構(gòu)設(shè)計(jì)授權(quán)給其他制造商沟优。
X86架構(gòu):X86架構(gòu)是CPU執(zhí)行的計(jì)算機(jī)語(yǔ)言指令集,基于Intel 8086且向后兼容的中央處理器指令集架構(gòu)睬辐,包括Intel 8086挠阁、80186宾肺、80286、80386以及80486侵俗,由于以“86”作為結(jié)尾锨用,因此其架構(gòu)被稱為“x86”。應(yīng)用領(lǐng)域:個(gè)人計(jì)算機(jī)隘谣、服務(wù)器等增拥。
X86架構(gòu)又可分為如下類(lèi)別
IA:Intel(英特爾)處理器的服務(wù)器稱之為IA(Intel Architecture)架構(gòu)服務(wù)器
IA-32:英特爾32位體系架構(gòu),X86從16位到32位是在原有的架構(gòu)基礎(chǔ)上進(jìn)行修改(Intel稱之為IA-32)
x86-32:現(xiàn)如今Intel把x86-32稱為IA-32
x86-64
AMD64:x86架構(gòu)的64位拓展洪橘,向后兼容于16位及32位的x86架構(gòu)跪者。x64于1999年由AMD設(shè)計(jì),AMD首次公開(kāi)64位集以擴(kuò)展給x86熄求,稱為“AMD64”渣玲,AMD64和Intel64基本上一致。
Intel64:EM64T(Extended Memory 64 Technology)擴(kuò)展64bit內(nèi)存技術(shù)弟晚,本質(zhì)上和AMD64一樣都是IA-32的增強(qiáng)版本忘衍。
IA-64:64位的英特爾架構(gòu),英特爾安騰架構(gòu)(Intel Itanium architecture)卿城,使用在Itanium處理器家族上的64位指令集架構(gòu)枚钓,由英特爾公司與惠普公司共同開(kāi)發(fā)。IA是Intel Architecture(英特爾架構(gòu))的縮寫(xiě)瑟押,64指64位系統(tǒng)搀捷。使用這種架構(gòu)的CPU,包括Itanium和Itanium 2多望。此架構(gòu)與x86及x86-64并不相容嫩舟,操作系統(tǒng)與軟件需使用IA-64專用版本。
Intel怀偷、AMD的CPU占領(lǐng)了大部分的PC市場(chǎng)家厌,而ARM處理器則大量存在于手機(jī)和各種嵌入式設(shè)備中。
MIPS架構(gòu)
MIPS是世界上很流行的一種RISC處理器椎工。MIPS的意思是“無(wú)內(nèi)部互鎖流水級(jí)的微處理器”(Microprocessor without interlocked piped stages)饭于,其機(jī)制是盡量利用軟件辦法避免流水線中的數(shù)據(jù)相關(guān)問(wèn)題。它最早是在80年代初期由斯坦福(Stanford)大學(xué)Hennessy教授領(lǐng)導(dǎo)的研究小組研制出來(lái)的维蒙。MIPS公司的R系列就是在此基礎(chǔ)上開(kāi)發(fā)的RISC工業(yè)產(chǎn)品的微處理器掰吕。這些系列產(chǎn)品為很多計(jì)算機(jī)公司采用構(gòu)成各種工作站和計(jì)算機(jī)系統(tǒng)。
應(yīng)用領(lǐng)域:工作站等計(jì)算機(jī)平臺(tái)木西,目前國(guó)內(nèi)龍芯主要使用MIPS架構(gòu)機(jī)器畴栖。
PowerPC架構(gòu)
PowerPC 是一種精簡(jiǎn)指令集(RISC)架構(gòu)的中央處理器(CPU),其基本的設(shè)計(jì)源自IBM(國(guó)際商用機(jī)器公司)的IBM PowerPC 601 微處理器POWER(Performance Optimized With Enhanced RISC八千;《IBM Connect 電子報(bào)》2007年8月號(hào)譯為“增強(qiáng)RISC性能優(yōu)化”)架構(gòu)吗讶。二十世紀(jì)九十年代,IBM(國(guó)際商用機(jī)器公司)恋捆、Apple(蘋(píng)果公司)和Motorola(摩托羅拉)公司開(kāi)發(fā)PowerPC芯片成功照皆,并制造出基于PowerPC的多處理器計(jì)算機(jī)。PowerPC架構(gòu)的特點(diǎn)是可伸縮性好沸停、方便靈活膜毁。
PowerPC 處理器有廣泛的實(shí)現(xiàn)范圍,包括從諸如 Power4 那樣的高端服務(wù)器 CPU 到嵌入式 CPU 市場(chǎng)(任天堂 Gamecube 使用了 PowerPC)愤钾。PowerPC 處理器有非常強(qiáng)的嵌入式表現(xiàn)瘟滨,因?yàn)樗哂袃?yōu)異的性能、較低的能量損耗以及較低的散熱量能颁。除了像串行和以太網(wǎng)控制器那樣的集成 I/O杂瘸,該嵌入式處理器與“臺(tái)式機(jī)”CPU 存在非常顯著的區(qū)別。
2.CPU模式(mode)
CPU mode
CPU模式指的是CPU的工作狀態(tài)伙菊,以及對(duì)資源和指令權(quán)限的描述败玉。
內(nèi)核模式(Kernel Mode):也可以稱為核心態(tài)或者管理者模式,程序可以訪問(wèn)系統(tǒng)的所有資源镜硕,CPU全部指令可以無(wú)限制執(zhí)行运翼,也可以任意的對(duì)運(yùn)行模式進(jìn)行切換。
用戶模式(User Mode):也稱為用戶態(tài)兴枯,應(yīng)用程序不能訪問(wèn)一些受操作系統(tǒng)保護(hù)的資源血淌。在用戶模式,應(yīng)用程序不能直接切換處理器模式财剖。如果要進(jìn)行模式切換悠夯,則必須產(chǎn)生中斷才可以。產(chǎn)生中斷后就進(jìn)入了特權(quán)模式
兩種模式的切換:當(dāng)發(fā)生以下情況時(shí)用戶模式向內(nèi)核模式切換
用戶模式向內(nèi)核模式切換
當(dāng)執(zhí)行中斷返回時(shí)內(nèi)核模式向用戶模式切換
內(nèi)核模式向用戶模式切換
Intel?CPU的工作模式: 前面已經(jīng)說(shuō)了CPU的兩種模式內(nèi)核模式和用戶模式峰伙,這是對(duì)一般通用CPU來(lái)說(shuō)的疗疟,如ARM系列的處理器就劃分這兩種大的模式。絕大部分PC的CPU都是Intel公司的CPU瞳氓,Intel的CPU經(jīng)過(guò)多年的發(fā)展策彤,已經(jīng)發(fā)展成了現(xiàn)在的三種運(yùn)行模式,分別是:實(shí)模式匣摘、保護(hù)模式店诗,虛擬實(shí)模式。
實(shí)模式
Intel的8086到80186處理器都只有一種運(yùn)行模式音榜,這就是實(shí)模式庞瘸。在這個(gè)模式下擅憔,CPU用20根地址線進(jìn)行內(nèi)存尋址镇眷,所以在這個(gè)模式下CPU只能訪問(wèn)從00000h~FFFFFh的地址范圍的內(nèi)存,即1M大小的內(nèi)存。同時(shí)使用16根數(shù)據(jù)線凰萨,使用16位內(nèi)部寄存器運(yùn)行16位指令十艾。由于使用的是16根數(shù)據(jù)線野瘦,為了能夠支持使用20位的地址來(lái)訪問(wèn)1M的內(nèi)存句喜,于是就對(duì)內(nèi)存的使用引入了分段機(jī)制。
為了支持分段機(jī)制贯被,CPU設(shè)置了四個(gè)16位的段寄存器:CS眼五、DS、SS彤灶、ES看幼,分別是代碼段,數(shù)據(jù)段幌陕,堆棧段和其他段诵姜,對(duì)應(yīng)于地址總線中的高16位。尋址時(shí)苞轿,將段寄存器中的值向左移四位再加上段內(nèi)偏移量就得到了物理地址茅诱。這樣就實(shí)現(xiàn)了16位內(nèi)存地址到20位物理地址的轉(zhuǎn)換,這種方式叫做“映射”搬卒。由于其偏移量只能用16位來(lái)表示瑟俭,所以其支持的段的大小只有64K字節(jié)
在實(shí)模式下,系統(tǒng)一次只能運(yùn)行一個(gè)程序契邀,其他程序都處于休眠狀態(tài)摆寄。在這個(gè)模式下,任何一個(gè)程序都可以訪問(wèn)內(nèi)存的任何地方坯门,并沒(méi)有一種保護(hù)機(jī)制來(lái)防止一個(gè)程序被另一個(gè)程序重寫(xiě)微饥,即便是對(duì)于在內(nèi)存中的操作系統(tǒng)也是如此。所以如果有幾個(gè)程序存在內(nèi)存中古戴,很可能會(huì)因?yàn)槠渲械囊粋€(gè)程序修改了另一個(gè)程序的數(shù)據(jù)而導(dǎo)致系統(tǒng)崩潰欠橘。
為了能夠和前面的CPU兼容,80286及以后x86系列兼容處理器仍然是開(kāi)機(jī)啟動(dòng)時(shí)工作在實(shí)模式下,這時(shí)的CPU和8086沒(méi)有任何區(qū)別现恼,只是運(yùn)行速度比8086更快而已肃续。然后通過(guò)操作系統(tǒng)設(shè)置之后就可以進(jìn)入一個(gè)更加先進(jìn)的模式——保護(hù)模式。
保護(hù)模式
要發(fā)揮80386及x86系列處理器的全部?jī)?yōu)勢(shì)就要在保護(hù)模式下叉袍。那么保護(hù)模式和實(shí)模式到底有什么區(qū)別呢始锚?首先是在保護(hù)模式下采用的是32根地址線和數(shù)據(jù)線,運(yùn)行32位指令喳逛,可尋址高達(dá)4G字節(jié)的物理地址空間瞧捌。實(shí)模式下只能尋址1M字節(jié)的物理地址空間。保護(hù)模式采用了虛擬內(nèi)存,并采用分段和分頁(yè)技術(shù)相結(jié)合的方式姐呐,其支持的最大的段的大小也從實(shí)模式的64K增長(zhǎng)到4G殿怜。同時(shí)保護(hù)模式的地址轉(zhuǎn)換方式也發(fā)生了變化。此時(shí)段寄存器里存的不再是基址皮钠,而是段選擇子(后續(xù)文章再詳細(xì)說(shuō)明)稳捆。通過(guò)段選擇子來(lái)選出段的描述符赠法,描述符用來(lái)描述一個(gè)段麦轰,包含了段基址,段界限砖织,段屬性等段的信息款侵。得到了段基址之后,再加上偏移量就得到了線性地址侧纯,與實(shí)模式最大的區(qū)別是保護(hù)模式的基址不要偏移新锈。得到線性地址之后,如果禁止分頁(yè)線性地址就被解釋為物理地址眶熬;如果允許分頁(yè)線性地址就通過(guò)頁(yè)表映射到物理地址妹笆。
保護(hù)模式和實(shí)模式的最大區(qū)別是在保護(hù)模式下運(yùn)行的軟件程序受到了保護(hù)。這種保護(hù)作用首先體現(xiàn)在進(jìn)程間的保護(hù)娜氏。在保護(hù)模式下每個(gè)進(jìn)程都有自己的地址空間拳缠,然后把地址空間分頁(yè),得到許多的頁(yè)面贸弥,再把這些頁(yè)面映射到物理內(nèi)存窟坐。由于不同進(jìn)程的頁(yè)表被映射到不同的物理內(nèi)存,這就實(shí)現(xiàn)了進(jìn)程間的相互隔離绵疲,防止一個(gè)程序被另一個(gè)程序重寫(xiě)哲鸳,導(dǎo)致系統(tǒng)崩潰。同時(shí)進(jìn)程間的隔離使得一個(gè)進(jìn)程的崩潰也不會(huì)影響到其他進(jìn)程的執(zhí)行盔憨。
保護(hù)模式支持多任務(wù)運(yùn)行徙菠,但這需要多任務(wù)操作系統(tǒng)來(lái)完成。操作系統(tǒng)讓每個(gè)進(jìn)程都得到部分的CPU時(shí)間郁岩,讓它們輪流使用CPU婿奔,看起來(lái)就好像是多個(gè)任務(wù)在運(yùn)行,實(shí)際上在很小的時(shí)間片段內(nèi)還是只有一個(gè)程序運(yùn)行驯用,但在多核CPU中可以實(shí)現(xiàn)真正的并行運(yùn)行脸秽。通過(guò)操作系統(tǒng)的設(shè)置,CPU可以從實(shí)模式進(jìn)入保護(hù)模式蝴乔,但是不能夠倒退從保護(hù)模式進(jìn)入實(shí)模式记餐。
虛擬實(shí)模式(虛擬8086模式)
在當(dāng)初設(shè)計(jì)Intel 80386CPU的時(shí)候,需要解決的一個(gè)難題是如何讓運(yùn)行在16位實(shí)模式下的程序能夠在80386的保護(hù)模式中運(yùn)行薇正。為此Intel的設(shè)計(jì)人員在80386中加入了虛擬8086模式片酝。在虛擬8086模式中囚衔,CPU把內(nèi)存分成許多大小為1M的部分,每個(gè)部分分配給一個(gè)任務(wù)雕沿。大部分16位實(shí)模式下的程序能夠不經(jīng)任何修改的運(yùn)行在保護(hù)模式下练湿,每個(gè)程序都有屬于他們的1M內(nèi)存。微軟在用虛擬8086模式來(lái)運(yùn)行他們的DOS程序审轮。運(yùn)行Windows操作系統(tǒng)中的DOS提示窗口時(shí)肥哎,就建立了一個(gè)虛擬8086模式的會(huì)話。和真正的MS-DOS不一樣疾渣,MS-DOS一次只能運(yùn)行一個(gè)任務(wù)篡诽,其他任務(wù)都在睡眠,而在Windows中榴捡,每個(gè)任務(wù)都可以得到一個(gè)CPU的時(shí)間片段杈女,所以許多任務(wù)都可以同時(shí)保持活躍,這是因?yàn)楸Wo(hù)模式支持多任務(wù)吊圾。一個(gè)虛擬8086會(huì)話窗口完全模擬了一個(gè)8086環(huán)境达椰,每一個(gè)虛擬機(jī)器都有其自己的1M字節(jié)地址空間、實(shí)際硬件BIOS程序的映像项乒、所有各寄存器的仿真以及其他能在實(shí)模式中找到的特性啰劲,除了速度更快以外。
特權(quán)級(jí)
總共有4個(gè)特權(quán)級(jí)別板丽,從高到低分別是0呈枉、1、2埃碱、3猖辫,數(shù)字越小表示的特權(quán)級(jí)別越大。如下圖所示:最內(nèi)Ring0特權(quán)級(jí)別最高砚殿,最外Ring3特權(quán)級(jí)別最低啃憎。
較為核心的代碼和數(shù)據(jù)將被放在特權(quán)級(jí)較高的層級(jí)中。CPU用這樣的機(jī)制來(lái)避免低特權(quán)級(jí)的任務(wù)在不被允許的情況下訪問(wèn)位于高特權(quán)級(jí)的段中似炎。如果CPU檢測(cè)到一個(gè)訪問(wèn)請(qǐng)求是不合法的辛萍,將會(huì)產(chǎn)生常規(guī)保護(hù)錯(cuò)誤。有時(shí)候也將高特權(quán)級(jí)稱為內(nèi)層羡藐,低特權(quán)級(jí)稱為外層贩毕。
特權(quán)級(jí)
CPL、DPL和RPL
(1)?CPL?(當(dāng)前特權(quán)級(jí))
CPL(Current Privilege Level)是當(dāng)前執(zhí)行的程序或任務(wù)的特權(quán)級(jí)仆嗦。通常情況下辉阶,CPL代表代碼所在的段的特權(quán)級(jí)。當(dāng)程序轉(zhuǎn)移到不同特權(quán)級(jí)的代碼段時(shí),處理器將改變CPL谆甜。只有0和3兩個(gè)值垃僚,分別表示用戶態(tài)和內(nèi)核態(tài)。
(2)?RPL?(請(qǐng)求特權(quán)級(jí))
RPL(Requested Privilege Level)是對(duì)于段選擇子而言的规辱,每個(gè)段選擇子有自己的RPL谆棺,它說(shuō)明的是進(jìn)程對(duì)段訪問(wèn)的請(qǐng)求權(quán)限,有點(diǎn)像函數(shù)參數(shù)罕袋。而且RPL對(duì)每個(gè)段來(lái)說(shuō)不是固定的改淑,兩次訪問(wèn)同一段時(shí)的RPL可以不同。RPL可能會(huì)削弱CPL的作用炫贤,例如當(dāng)前CPL=0的進(jìn)程要訪問(wèn)一個(gè)數(shù)據(jù)段溅固,它把段選擇符中的RPL設(shè)為3,這樣雖然它對(duì)該段仍然只有特權(quán)為3的訪問(wèn)權(quán)限兰珍。
(3)?DPL?(描述特權(quán)級(jí))
DPL(Descriptor Privilege Level)?存儲(chǔ)在段描述符中,規(guī)定訪問(wèn)該段的權(quán)限級(jí)別询吴。每個(gè)段的DPL固定掠河。當(dāng)當(dāng)前代碼段試圖訪問(wèn)一個(gè)段,DPL將會(huì)和CPL以及段選擇子的RPL相比較猛计,根據(jù)段類(lèi)型的不同唠摹,DPL將會(huì)區(qū)別對(duì)待。
操作系統(tǒng)往往用RPL來(lái)避免低特權(quán)級(jí)應(yīng)用程序訪問(wèn)高特權(quán)級(jí)段內(nèi)的數(shù)據(jù)奉瘤,即便提出訪問(wèn)請(qǐng)求的段有足夠的特權(quán)級(jí)勾拉,如果RPL不夠也是不行的,當(dāng)RPL的值比CPL大的時(shí)候盗温,RPL將起決定性作用藕赞。也就是說(shuō),RPL相當(dāng)于附加的一個(gè)權(quán)限控制卖局,只有當(dāng)RPL>DPL的時(shí)候斧蜕,才起到實(shí)際的限制作用。
硬件與操作系統(tǒng)對(duì)CPU的觀察
硬件按“模式”來(lái)區(qū)分CPU的狀態(tài)
操作系統(tǒng)按“進(jìn)程”來(lái)區(qū)分CPU的狀態(tài)