




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章內(nèi)存尋址內(nèi)存尋址的演變段機(jī)制分頁(yè)機(jī)制Linux中的匯編語(yǔ)言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)的代碼與硬件無(wú)關(guān)的代碼之間劃出清楚的界限,以便于一個(gè)操作系統(tǒng)很容易地移植到不同的平臺(tái)。在這眾多的平臺(tái)中,大家最熟悉的就是i386,即Intel80386體系結(jié)構(gòu)。因此,我們所介紹的內(nèi)存尋址也是以此為背景。
內(nèi)存尋址的不同時(shí)期石器時(shí)期-8位青銅時(shí)期-16位白銀時(shí)期-24位黃金時(shí)期-32位石器時(shí)期-8位尋址在微處理器的歷史上,第一款微處理器芯片4004是由Intel推出的,4位。在4004之后,intel推出了一款8位處理器叫8080,它有1個(gè)主累加器(寄存器A)和6個(gè)次累加器(寄存器B,C,D,E,H和L)那時(shí)沒(méi)有段的概念,訪問(wèn)內(nèi)存都要通過(guò)絕對(duì)地址,因此程序中的地址必須進(jìn)行硬編碼(給出具體地址),而且也難以重定位青銅時(shí)期-“段”的引入intel開(kāi)發(fā)出的16位的處理器叫8086,標(biāo)志著IntelX86王朝的開(kāi)始,同時(shí)引入了“段”概念。段描述了一塊有限的內(nèi)存區(qū)域,區(qū)域的起始位置存在專(zhuān)門(mén)的寄存器(段寄存器)中。8086處理器地址線擴(kuò)展到了20位,尋址空間到了1M也就是把1M大的空間分成數(shù)個(gè)64k的段來(lái)管理(化整為零了)。把16位的段地址左移動(dòng)4位后,再與16位的偏移量相加便可獲得一個(gè)20位的內(nèi)存地址,白銀時(shí)期-“保護(hù)模式”的引入intel的80286處理器于1982年問(wèn)世。地址總線位數(shù)增加到了24位。從此開(kāi)始引進(jìn)了一個(gè)全新理念—保護(hù)模式
訪問(wèn)內(nèi)存時(shí)不能直接從段寄存器中獲得段的起始地址了,而需要經(jīng)過(guò)額外轉(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),而無(wú)本質(zhì)的變化,所以我們把80386以后的處理器統(tǒng)稱(chēng)為IA32(32BitIntelArchitecture)。IA32寄存器簡(jiǎn)介
·
把16位的通用寄存器、標(biāo)志寄存器以及指令指針寄存器擴(kuò)充為32位的寄存器·段寄存器仍然為16位?!ぴ黾?個(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ú)訪問(wèn),給它起名叫指令指針I(yè)P寄存器,用于16位尋址。標(biāo)志寄存器標(biāo)志寄存器EFLAGS存放有關(guān)處理器的控制標(biāo)志,很多標(biāo)志與16位FLAGS中的標(biāo)志含義一樣。
用于分頁(yè)機(jī)制的控制寄存器物理地址、虛擬地址及線性地址
將主板上的物理內(nèi)存條所提供的內(nèi)存空間定義為物理內(nèi)存空間,其中每個(gè)內(nèi)存單元的實(shí)際地址就是物理地址將應(yīng)用程序員看到的內(nèi)存空間定義為虛擬地址空間(或地址空間),其中的地址就叫虛擬地址(或虛地址),一般用“段:偏移量”的形式來(lái)描述
線性地址空間是指一段連續(xù)的,不分段的,范圍為0到4GB的地址空間,一個(gè)線性地址就是線性地址空間的一個(gè)絕對(duì)地址。
地址之間的轉(zhuǎn)換-保護(hù)模式下的尋址CPUMMU內(nèi)存磁盤(pán)控制器總線CPU把虛地址送給MMU
MMU把物理地址送給存儲(chǔ)器地址之間的轉(zhuǎn)換-MMU機(jī)制虛擬地址段機(jī)制段是虛擬地址空間的基本單位,段機(jī)制必須把虛擬地址空間的一個(gè)地址轉(zhuǎn)換為線性地址空間的一個(gè)線性地址。用三個(gè)方面來(lái)描述段
段的基地址(BaseAddress):在線性地址空間中段的起始地址。
段的界限(Limit):在虛擬地址空間中,段內(nèi)可以使用的最大偏移量。
段的保護(hù)屬性(Attribute):表示段的特性。例如,該段是否可被讀出或?qū)懭?,或者該段是否作為一個(gè)程序來(lái)執(zhí)行,以及段的特權(quán)級(jí)等等。
虛擬-線性地址的轉(zhuǎn)換虛擬地址空間段描述符表-段表
如圖所示的段描述符表(或叫段表)來(lái)描述轉(zhuǎn)換關(guān)系。段號(hào)描述的是虛擬地址空間段的編號(hào),基地址是線性地址空間段的起始地址。段描述符表中的每一個(gè)表項(xiàng)叫做段描述符012索引(段號(hào))
基地址
界限
屬性
Baseb
Limitb
Attributeb
Basea
Limita
Attributea
Basec
LimitcAttributec保護(hù)模式下的其他描述符表簡(jiǎn)介
全局描述符表GDT(GloabalDescriptorTable)中斷描述符表IDT(InterruptDescriptorTable)局部描述符表LDT(LocalDescriptorTable)為了加快對(duì)這些表的訪問(wèn),Intel設(shè)計(jì)了專(zhuān)門(mén)的寄存器,以存放這些表的基地址及表的長(zhǎng)度界限。這些寄存器只供操作系統(tǒng)使用。有關(guān)這些表的詳細(xì)內(nèi)容請(qǐng)參看有關(guān)保護(hù)模式的參考書(shū)。保護(hù)模式下段寄存器中存放什么
存放索引或叫段號(hào),因此,這里的段寄存器也叫選擇符,即從描述符表中選擇某個(gè)段。選擇符(段寄存器)的結(jié)構(gòu):
RPL表示請(qǐng)求者的特權(quán)級(jí)(RequestorPrivilegeLevel)保護(hù)模式下的特權(quán)級(jí)保護(hù)模式提供了四個(gè)特權(quán)級(jí),用0~3四個(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)用戶(hù)態(tài)。保護(hù)模式規(guī)定,高特權(quán)級(jí)可以訪問(wèn)低特權(quán)級(jí),而低特權(quán)級(jí)不能隨便訪問(wèn)高特權(quán)級(jí)。地址轉(zhuǎn)換及保護(hù)
Linux中的段Linux是怎樣處理段機(jī)制??分頁(yè)機(jī)制-頁(yè)將線性地址空間劃分成若干大小相等的片,稱(chēng)為頁(yè)(Page)
物理地址空間分成與頁(yè)大小相等的若干存儲(chǔ)塊,稱(chēng)為(物理)塊或頁(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位來(lái)描述32位的地址。
屬性見(jiàn)書(shū)
物理頁(yè)面基地址屬性31110分頁(yè)機(jī)制-兩級(jí)頁(yè)表為什么要采用兩級(jí)頁(yè)表?…………………………頁(yè)目錄頁(yè)表物理頁(yè)面分頁(yè)機(jī)制-線性地址結(jié)構(gòu)這個(gè)結(jié)構(gòu)的偽代碼描述如下
typedefstruct{unsignedintdir: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
頁(yè)目錄頁(yè)頁(yè)內(nèi)偏移量3122120分頁(yè)機(jī)制-硬件保護(hù)機(jī)制對(duì)于頁(yè)表,頁(yè)的保護(hù)是由屬性部分的U/S標(biāo)志和R/W標(biāo)志來(lái)控制的。當(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)還是用戶(hù)態(tài),總能對(duì)此頁(yè)進(jìn)行尋址。此外,與段的三種存取權(quán)限(讀、寫(xiě)、執(zhí)行)不同,頁(yè)的存取權(quán)限只有兩種(讀、寫(xiě))。如果頁(yè)目錄項(xiàng)或頁(yè)表項(xiàng)的讀寫(xiě)標(biāo)志為0,說(shuō)明相應(yīng)的頁(yè)表或頁(yè)是只讀的,否則是可讀寫(xiě)的。
分頁(yè)機(jī)制-線性地址到物理地址的轉(zhuǎn)換
分頁(yè)機(jī)制-分頁(yè)示例假如操作系統(tǒng)給一個(gè)正在運(yùn)行的進(jìn)程分配的線性地址空間范圍是0x20000000到0x2003ffff。這個(gè)空間由64頁(yè)組成。
我們從分配給進(jìn)程的線性地址的最高10位(分頁(yè)硬件機(jī)制把它自動(dòng)解釋成頁(yè)目錄域)開(kāi)始。這兩個(gè)地址都以2開(kāi)頭,后面跟著0,因此高10位有相同的值,即十六進(jìn)制的0x080或十進(jìn)制的128。因此,這兩個(gè)地址的頁(yè)目錄域都指向進(jìn)程頁(yè)目錄的第129項(xiàng)。相應(yīng)的目錄項(xiàng)中必須包含分配給進(jìn)程的頁(yè)表的物理地址,如圖2.13。如果給這個(gè)進(jìn)程沒(méi)有分配其它的線性地址,則頁(yè)目錄的其余1023項(xiàng)都為0,也就是這個(gè)進(jìn)程在頁(yè)目錄中只占一項(xiàng)。
分頁(yè)機(jī)制-分頁(yè)示例1023(0x3ff)128(0x80)
1023(0x3ff)64(0x040)
63(0x03f)
頁(yè)目錄頁(yè)表假設(shè)進(jìn)程需要讀線性地址0x20021406中的內(nèi)容。這個(gè)地址由分頁(yè)機(jī)制如何進(jìn)行處理?分頁(yè)機(jī)制-頁(yè)面高速緩存
分頁(yè)機(jī)制-Linux中的分頁(yè)Linux主要采用分頁(yè)機(jī)制來(lái)實(shí)現(xiàn)虛擬存儲(chǔ)器管理,因?yàn)?Linux的分段機(jī)制使得所有的進(jìn)程都使用相同的段寄存器值,這就使得內(nèi)存管理變得簡(jiǎn)單,也就是說(shuō),所有的進(jìn)程都使用同樣的線性地址空間(0~4G)。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/AT&T的匯編:參見(jiàn)書(shū)
Linux系統(tǒng)地址映射示例Linux采用分頁(yè)存儲(chǔ)管理。虛擬地址空間劃分成固定大小的“頁(yè)”,由MMU在運(yùn)行時(shí)將虛擬地址映射(變換)成某個(gè)物理頁(yè)面中的地址IA32的MMU對(duì)程序中的虛擬地址先進(jìn)行段式映射(虛擬地址轉(zhuǎn)換為線性地址),然后才能進(jìn)行頁(yè)式映射(線性地址轉(zhuǎn)換為物理地址)Linux巧妙地使段式映射實(shí)際上不起什么作用Linux系統(tǒng)地址映射示例
假定我們有一個(gè)簡(jiǎn)單的C程序Hello.c#include<stdio.h>greeting(){ printf(“Hello,world!\n”);}main(){greeting();}Linux系統(tǒng)地址映射示例用Linux的實(shí)用程序objdump對(duì)其可執(zhí)行代碼進(jìn)行反匯編:%objdump–dhello08048568<greeting>:8048568:pushl%ebp
8048569:movl%esp,%ebp
804856b:pushl$0x8094048048570:call8048474<_init+0x84>8048575:addl$0x4,%esp
8048578:leave8048579:ret804857a:movl%esi,%e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉(cāng)庫(kù)機(jī)械租賃合同范本
- 凍肉投放合同范本
- 加工制作合同范本門(mén)窗
- 產(chǎn)品推廣居間合同范本
- 加盟合同范本奶茶
- 健身收購(gòu)合同范本
- 出租黃色圍擋合同范例
- 中國(guó)國(guó)家展覽中心合同范例
- 住宅租賃房屋合同范例
- 2024年溫州鹿城農(nóng)商銀行招聘筆試真題
- 應(yīng)收帳款質(zhì)押擔(dān)保合同
- 2025年度建筑垃圾運(yùn)輸與再生資源回收一體化合同樣本
- 2025年臨床醫(yī)師定期考核必考復(fù)習(xí)題庫(kù)及答案(900題)
- JTG5120-2021公路橋涵養(yǎng)護(hù)規(guī)范
- 2024年廣東省公務(wù)員考試《行測(cè)》真題及答案解析
- 河南省信陽(yáng)市固始縣2023-2024學(xué)年四年級(jí)下學(xué)期期末數(shù)學(xué)試題
- 王淑玲《做最好的自己》讀書(shū)分享
- 主要工業(yè)產(chǎn)品統(tǒng)計(jì)指南
- 新蘇教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案(含反思)
- 實(shí)習(xí)鑒定表1頁(yè)
- 鉚工基礎(chǔ)知識(shí)培訓(xùn)ppt課件
評(píng)論
0/150
提交評(píng)論