




已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
,虛擬內(nèi)存管理的硬件機(jī)制,Linux系統(tǒng)地址映射示例,內(nèi)存尋址操作系統(tǒng)設(shè)計(jì)的硬件基礎(chǔ)之一,操作系統(tǒng)橫跨軟件和硬件的橋梁內(nèi)存尋址操作系統(tǒng)設(shè)計(jì)的硬件基礎(chǔ)之一操作系統(tǒng)的設(shè)計(jì)者必須在硬件相關(guān)的代碼與硬件無關(guān)的代碼之間劃出清楚的界限,以便于一個(gè)操作系統(tǒng)很容易地移植到不同的平臺(tái)。在這眾多的平臺(tái)中,大家最熟悉的就是i386,即Intel80386體系結(jié)構(gòu)。因此,我們所介紹的內(nèi)存尋址也是以此為背景。,內(nèi)存尋址的不同時(shí)期,石器時(shí)期8位尋址,在微處理器的歷史上,第一款微處理器芯片4004是由Intel推出的,4位。在4004之后,intel推出了一款8位處理器叫8080,它有1個(gè)主累加器(寄存器A)和6個(gè)次累加器(寄存器B,C,D,E,H和L)那時(shí)沒有段的概念,訪問內(nèi)存都要通過絕對(duì)地址,因此程序中的地址必須進(jìn)行硬編碼(給出具體地址),而且也難以重定位,青銅時(shí)期“段”的引入,intel開發(fā)出的16位的處理器叫8086,標(biāo)志著IntelX86王朝的開始,同時(shí)引入了“段”概念。段描述了一塊有限的內(nèi)存區(qū)域,區(qū)域的起始位置存在專門的寄存器(段寄存器)中。8086處理器地址線擴(kuò)展到了20位,尋址空間到了1M也就是把1M大的空間分成數(shù)個(gè)64k的段來管理(化整為零了)。把16位的段地址左移動(dòng)4位后,再與16位的偏移量相加便可獲得一個(gè)20位的內(nèi)存地址,,白銀時(shí)期“保護(hù)模式”的引入,intel的80286處理器于1982年問世。地址總線位數(shù)增加到了24位。從此開始引進(jìn)了一個(gè)全新理念保護(hù)模式訪問內(nèi)存時(shí)不能直接從段寄存器中獲得段的起始地址了,而需要經(jīng)過額外轉(zhuǎn)換和檢查。80286處理器一些致命的缺陷注定不能長(zhǎng)久,它很快被天資卓越的兄弟80386代替了,黃金時(shí)期內(nèi)存尋址的飛躍,80386是一個(gè)32位的CPU,其尋址能力達(dá)到4GBIntel選擇了在段寄存器的基礎(chǔ)上構(gòu)筑保護(hù)模式,并且保留段寄存器16位在保護(hù)模式下,它的段范圍不再受限于64K,可以達(dá)到4G這真正解放了軟件工程師,他們不必再費(fèi)盡心思去壓縮程序規(guī)模,軟件功能也因此迅速提升從80386以后,Intel的CPU經(jīng)歷了80486、Pentium、PentiumII、PentiumIII等型號(hào),但基本上屬于同一種系統(tǒng)結(jié)構(gòu)的改進(jìn)與加強(qiáng),而無本質(zhì)的變化,所以我們把80386以后的處理器統(tǒng)稱為IA32(32BitIntelArchitecture)。,IA32寄存器簡(jiǎn)介,把16位的通用寄存器、標(biāo)志寄存器以及指令指針寄存器擴(kuò)充為32位的寄存器段寄存器仍然為16位。增加4個(gè)32位的控制寄存器增加4個(gè)系統(tǒng)地址寄存器增加8個(gè)調(diào)式寄存器增加2個(gè)測(cè)試寄存器,常用寄存器簡(jiǎn)介,通用寄存器8個(gè)通用寄存器是8086寄存器的超集,它們分別為:EAX,EBX,ECX,EDX,EBP,EBP,ESI及EDI段寄存器8086中有4個(gè)16位的段寄存器:CS、DS、SS、ES,分別用于存放可執(zhí)行代碼的代碼段、數(shù)據(jù)段、堆棧段和其他段的基地址。這些段寄存器中存放的不再是某個(gè)段的基地址,而是某個(gè)段的選擇符(Selector)段基地址存放在段描述符表(Descriptor)中,表的索引就是選擇符,常用寄存器簡(jiǎn)介,指令指針寄存器指令指針寄存器EIP中存放下一條將要執(zhí)行指令的偏移量(offset),這個(gè)偏移量是相對(duì)于目前正在運(yùn)行的代碼段寄存器CS而言的。偏移量加上當(dāng)前代碼段的基地址,就形成了下一條指令的地址。EIP中的低16位可以被單獨(dú)訪問,給它起名叫指令指針I(yè)P寄存器,用于16位尋址。標(biāo)志寄存器標(biāo)志寄存器EFLAGS存放有關(guān)處理器的控制標(biāo)志,很多標(biāo)志與16位FLAGS中的標(biāo)志含義一樣。,標(biāo)志寄存器簡(jiǎn)介,用于分頁(yè)機(jī)制的控制寄存器,物理地址、虛擬地址及線性地址,將主板上的物理內(nèi)存條所提供的內(nèi)存空間定義為物理內(nèi)存空間,其中每個(gè)內(nèi)存單元的實(shí)際地址就是物理地址將應(yīng)用程序員看到的內(nèi)存空間定義為虛擬地址空間(或地址空間),其中的地址就叫虛擬地址(或虛地址),一般用“段:偏移量”的形式來描述線性地址空間是指一段連續(xù)的,不分段的,范圍為0到4GB的地址空間,一個(gè)線性地址就是線性地址空間的一個(gè)絕對(duì)地址。,地址之間的轉(zhuǎn)換保護(hù)模式下的尋址,CPU,MMU,內(nèi)存,磁盤控制器,總線,CPU把虛地址送給MMU,MMU把物理地址送給存儲(chǔ)器,地址之間的轉(zhuǎn)換MMU機(jī)制,段機(jī)制,段是虛擬地址空間的基本單位,段機(jī)制必須把虛擬地址空間的一個(gè)地址轉(zhuǎn)換為線性地址空間的一個(gè)線性地址。用三個(gè)方面來描述段段的基地址(BaseAddress):在線性地址空間中段的起始地址。段的界限(Limit):在虛擬地址空間中,段內(nèi)可以使用的最大偏移量。段的保護(hù)屬性(Attribute):表示段的特性。例如,該段是否可被讀出或?qū)懭?,或者該段是否作為一個(gè)程序來執(zhí)行,以及段的特權(quán)級(jí)等等。,虛擬線性地址的轉(zhuǎn)換,虛擬地址空間,段描述符表段表,如圖所示的段描述符表(或叫段表)來描述轉(zhuǎn)換關(guān)系。段號(hào)描述的是虛擬地址空間段的編號(hào),基地址是線性地址空間段的起始地址。段描述符表中的每一個(gè)表項(xiàng)叫做段描述符,012,索引(段號(hào)),段描述符的一般格式,保護(hù)模式下的其他描述符表簡(jiǎn)介,全局描述符表GDT(GloabalDescriptorTable)中斷描述符表IDT(InterruptDescriptorTable)局部描述符表LDT(LocalDescriptorTable)為了加快對(duì)這些表的訪問,Intel設(shè)計(jì)了專門的寄存器,以存放這些表的基地址及表的長(zhǎng)度界限。這些寄存器只供操作系統(tǒng)使用。有關(guān)這些表的詳細(xì)內(nèi)容請(qǐng)參看有關(guān)保護(hù)模式的參考書。,保護(hù)模式下段寄存器中存放什么,存放索引或叫段號(hào),因此,這里的段寄存器也叫選擇符,即從描述符表中選擇某個(gè)段。選擇符(段寄存器)的結(jié)構(gòu):,RPL表示請(qǐng)求者的特權(quán)級(jí)(RequestorPrivilegeLevel),保護(hù)模式下的特權(quán)級(jí),保護(hù)模式提供了四個(gè)特權(quán)級(jí),用03四個(gè)數(shù)字表示很多操作系統(tǒng)(包括Linux,Windwos)只使用了其中的最低和最高兩個(gè),即0表示最高特權(quán)級(jí),對(duì)應(yīng)內(nèi)核態(tài);3表示最低特權(quán)級(jí),對(duì)應(yīng)用戶態(tài)。保護(hù)模式規(guī)定,高特權(quán)級(jí)可以訪問低特權(quán)級(jí),而低特權(quán)級(jí)不能隨便訪問高特權(quán)級(jí)。,地址轉(zhuǎn)換及保護(hù),Linux中的段,Linux是怎樣處理段機(jī)制?,?,分頁(yè)機(jī)制頁(yè),將線性地址空間劃分成若干大小相等的片,稱為頁(yè)(Page)物理地址空間分成與頁(yè)大小相等的若干存儲(chǔ)塊,稱為(物理)塊或頁(yè)面(PageFrame)頁(yè)的大小應(yīng)該為多少?由誰(shuí)確定?,分頁(yè)機(jī)制頁(yè)表,頁(yè)表是把線性地址映射到物理地址的一種數(shù)據(jù)結(jié)構(gòu)。頁(yè)表中應(yīng)當(dāng)包含如下內(nèi)容:物理頁(yè)面基地址:線性地址空間中的一個(gè)頁(yè)裝入內(nèi)存后所對(duì)應(yīng)的物理頁(yè)面的起始地址。頁(yè)的屬性:表示頁(yè)的特性。例如該頁(yè)是否在內(nèi)存,是否可被讀出或?qū)懭氲取m?yè)面的大小為4KB,物理頁(yè)面基地址需要多少位就可以?,分頁(yè)機(jī)制頁(yè)表項(xiàng)結(jié)構(gòu),物理頁(yè)面基地址:指的是頁(yè)所對(duì)應(yīng)的物理頁(yè)面在內(nèi)存的起始物理地址。相當(dāng)于物理塊號(hào)(為什么?)其最低12位全部為0,因此用高20位來描述32位的地址。屬性見書,物理頁(yè)面基地址屬性,31110,分頁(yè)機(jī)制兩級(jí)頁(yè)表,為什么要采用兩級(jí)頁(yè)表?,頁(yè)目錄,頁(yè)表,物理頁(yè)面,分頁(yè)機(jī)制線性地址結(jié)構(gòu),這個(gè)結(jié)構(gòu)的偽代碼描述如下typedefstructunsignedintdir:10;/*用作頁(yè)目錄中的下標(biāo),對(duì)應(yīng)的目錄項(xiàng)指向一個(gè)頁(yè)表*/unsignedintpage:10/*用作頁(yè)表的下標(biāo),對(duì)應(yīng)的頁(yè)表項(xiàng)指向一個(gè)物理頁(yè)面*/unsignedintoffset:12/*在4K字物理頁(yè)面內(nèi)的偏移量*/LinearAddr,3122120,分頁(yè)機(jī)制硬件保護(hù)機(jī)制,對(duì)于頁(yè)表,頁(yè)的保護(hù)是由屬性部分的U/S標(biāo)志和R/W標(biāo)志來控制的。當(dāng)U/S標(biāo)志為0時(shí),只有處于內(nèi)核態(tài)的操作系統(tǒng)才能對(duì)此頁(yè)或頁(yè)表進(jìn)行尋址。當(dāng)這個(gè)標(biāo)志為1時(shí),則不管在內(nèi)核態(tài)還是用戶態(tài),總能對(duì)此頁(yè)進(jìn)行尋址。此外,與段的三種存取權(quán)限(讀、寫、執(zhí)行)不同,頁(yè)的存取權(quán)限只有兩種(讀、寫)。如果頁(yè)目錄項(xiàng)或頁(yè)表項(xiàng)的讀寫標(biāo)志為0,說明相應(yīng)的頁(yè)表或頁(yè)是只讀的,否則是可讀寫的。,分頁(yè)機(jī)制線性地址到物理地址的轉(zhuǎn)換,分頁(yè)機(jī)制分頁(yè)示例,假如操作系統(tǒng)給一個(gè)正在運(yùn)行的進(jìn)程分配的線性地址空間范圍是0 x20000000到0 x2003ffff。這個(gè)空間由64頁(yè)組成。我們從分配給進(jìn)程的線性地址的最高10位(分頁(yè)硬件機(jī)制把它自動(dòng)解釋成頁(yè)目錄域)開始。這兩個(gè)地址都以2開頭,后面跟著0,因此高10位有相同的值,即十六進(jìn)制的0 x080或十進(jìn)制的128。因此,這兩個(gè)地址的頁(yè)目錄域都指向進(jìn)程頁(yè)目錄的第129項(xiàng)。相應(yīng)的目錄項(xiàng)中必須包含分配給進(jìn)程的頁(yè)表的物理地址,如圖2.13。如果給這個(gè)進(jìn)程沒有分配其它的線性地址,則頁(yè)目錄的其余1023項(xiàng)都為0,也就是這個(gè)進(jìn)程在頁(yè)目錄中只占一項(xiàng)。,分頁(yè)機(jī)制分頁(yè)示例,1023(0 x3ff)128(0 x80),1023(0 x3ff)64(0 x040)63(0 x03f),頁(yè)目錄,頁(yè)表,假設(shè)進(jìn)程需要讀線性地址0 x20021406中的內(nèi)容。這個(gè)地址由分頁(yè)機(jī)制如何進(jìn)行處理?,分頁(yè)機(jī)制頁(yè)面高速緩存,分頁(yè)機(jī)制Linux中的分頁(yè),Linux主要采用分頁(yè)機(jī)制來實(shí)現(xiàn)虛擬存儲(chǔ)器管理,因?yàn)?Linux的分段機(jī)制使得所有的進(jìn)程都使用相同的段寄存器值,這就使得內(nèi)存管理變得簡(jiǎn)單,也就是說,所有的進(jìn)程都使用同樣的線性地址空間(04G)。Linux設(shè)計(jì)目標(biāo)之一就是能夠把自己移植到絕大多數(shù)流行的處理器平臺(tái)。但是,許多RISC處理器支持的段功能非常有限。為了保持可移植性,Linux采用三級(jí)分頁(yè)模式而不是兩級(jí),分頁(yè)機(jī)制Linux中的分頁(yè),Linux中的C語(yǔ)言和匯編語(yǔ)言,GNU的C語(yǔ)言/docs/learnc/ATmain()greeting();,Linux系統(tǒng)地址映射示例,用Linux的實(shí)用程序objdump對(duì)其可執(zhí)行代碼進(jìn)行反匯編:%objdumpdhello08048568:8048568:pushl%ebp8048569:movl%esp,%ebp804856b:pushl$0 x8094048048570:call80484748048575:addl$0 x4,%esp8048578:leave8048579:ret804857a:movl%esi,%esi0804857c:804857c:pushl%ebp804857d:movl%esp,%ebp804857f:call80485688048584:leave8048585:ret8048586:nop80485
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院專家出診協(xié)議書
- 合伙外出旅游協(xié)議書
- 合同單位變更協(xié)議書
- 勞務(wù)合同增補(bǔ)協(xié)議書
- 商用廚房承包協(xié)議書
- 醫(yī)院法人免責(zé)協(xié)議書
- 加盟農(nóng)業(yè)艾草協(xié)議書
- 印刷廢品回收協(xié)議書
- 醫(yī)用氧氣租賃協(xié)議書
- 地產(chǎn)配套學(xué)習(xí)協(xié)議書
- 第二節(jié)-金屬切削機(jī)床部件
- 2024年車駕管查驗(yàn)業(yè)務(wù)知識(shí)考試題庫(kù)(供參考)
- 閻良西飛公司招聘考試試題
- 給小學(xué)生講橋梁課件
- 工器具管理臺(tái)帳
- (完整)中醫(yī)癥候積分量表
- 高效液相色譜質(zhì)譜聯(lián)用技術(shù)在藥物分析中的應(yīng)用
- 工行內(nèi)部控制手冊(cè)總體框架
- 2024年煤礦各類牌板制作標(biāo)準(zhǔn)及使用規(guī)定附煤礦井下牌板模版及標(biāo)準(zhǔn)
- 視頻會(huì)議系統(tǒng)投標(biāo)方案(技術(shù)標(biāo))
- 《企業(yè)運(yùn)營(yíng)管理》題庫(kù)集答案
評(píng)論
0/150
提交評(píng)論