電子科大操作系統(tǒng)實驗二 地址映射_第1頁
電子科大操作系統(tǒng)實驗二 地址映射_第2頁
電子科大操作系統(tǒng)實驗二 地址映射_第3頁
電子科大操作系統(tǒng)實驗二 地址映射_第4頁
電子科大操作系統(tǒng)實驗二 地址映射_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第第 頁實驗二地址映射一、實驗學時:4指導教師:丁旭陽二、實驗地點:主樓A2-412實驗時間:三、實驗目的:通過實驗,掌握分頁機制的實驗原理,了解頁表的內(nèi)容和機制。掌握計算機的尋址過程,掌握頁式地址地址轉(zhuǎn)換過程,掌握計算機各種寄存器的用法。四、實驗原理:1.關于計算機中的地址物理地址:物理地址最好理解,我們可以簡單的把內(nèi)存比作一個大的數(shù)組(為了分析方便),每個數(shù)組都有其下標,這個下標標識了內(nèi)存中的地址,這個實實在在的在內(nèi)存中的地址,我們稱之為物理地址。但是在用于內(nèi)存芯片級的單元尋址,與處理器和CPU連接的地址總線相對應,相信并不是一個所謂的數(shù)組,但是做出這樣的比擬,有利于更好的理解。邏輯地址:

2、與物理地址比較相對的是邏輯地址,實際上這個概念,我覺得可以這樣理解,這個地址就是在程序中我們把它放到的位置;而這個位置通常是由編譯器給出的。另外的一種理解是:邏輯地址指的是機器語言指令中,用來指定一個操作數(shù)或者是一條指令的地址。Intel段式管理中:,“一個邏輯地址,是由一個段標識符加上一個指定段內(nèi)相對地址的偏移量,表示為段標識符:段內(nèi)偏移量?!北热缥覀冊诔绦蛑卸x一個變量intg=3;相應的匯編代碼應該是movg,3;那么這個g應該放在哪兒呢?實際上我們可以看到,這個g的地址總在在編譯,鏈接之后就會一個確定的地址;而這個確定的地址我們叫做邏輯地址。虛擬地址:VirtualAddress,簡稱

3、VA,由于Windows程序時運行在386保護模式下,這樣程序訪問存儲器所使用的邏輯地址稱為虛擬地址。實際上因為我們現(xiàn)代程序中地址都是虛擬的,所以這里的虛擬地址和線性地址是等價了的。線性地址:線性地址(LinearAddress)也叫虛擬地址(virtualaddress)是邏輯地址到物理地址變換之間的中間層。在分段部件中邏輯地址是段中的偏移地址,然后加上基地址就是線性地址。2.復雜的地址轉(zhuǎn)換現(xiàn)在回到問題的本質(zhì),現(xiàn)在一個程序要運行,必須加載到事實在在的內(nèi)存中去,CPU需要將一個虛擬內(nèi)存空間中的地址轉(zhuǎn)換為物理地址,也就是:將一個邏輯地址轉(zhuǎn)換為物理地址。需要進行兩步:首先將給定一個邏輯地址,CPU

4、要利用其段式內(nèi)存管理單元,先將為個邏輯地址轉(zhuǎn)換成一個線程地址,再利用其頁式內(nèi)存管理單元,轉(zhuǎn)換為最終物理地址。這樣的兩次轉(zhuǎn)換真真切切在我們的CPU中,當然也在很多的教輔材料中,不想花太多的時間描述,因為里面涉及到的內(nèi)容太復雜了,很多問題我都沒有清晰的答案:從開機啟動的內(nèi)存,cache初始化到bootloader,GDT/LDT等等,而且這還沒有考慮到操作系統(tǒng)之間的差異,因為linux,windows對待地址轉(zhuǎn)換問題是有些不同的。這個圖很清晰的描述了邏輯地址到物理地址的轉(zhuǎn)換過程:即邏輯地址二二”線性地址二二”物理地址3.段頁式管理的實現(xiàn)原理1)虛地址的構成一個進程中所包含的具有獨立邏輯功能的程序或

5、數(shù)據(jù)仍被劃分為段,并有各自的段號s。這反映相繼承了段式管理的特征。其次,對于段s中的程序或數(shù)據(jù),則按照一定的大小將其劃分為不同的頁。和頁式系統(tǒng)一樣,最后不足一頁的部分仍占一頁。這反映了段頁式管理中的頁式特征。從而,段頁式管理時的進程的虛擬地址空間中的虛擬地址由三部分組成:即段號s,頁號P和頁內(nèi)相對地址d。虛擬空間的最小單位是頁而不是段,從而內(nèi)存可用區(qū)也就被劃分成為著干個大小相等的頁面,且每段所擁有的程序和數(shù)據(jù)在內(nèi)存中可以分開存放。分段的大小也不再受內(nèi)存可用區(qū)的限制。2)段表和頁表為了實現(xiàn)段頁式管理,系統(tǒng)必須為每個作業(yè)或進程建立一張段表以管理內(nèi)存分配與釋放、缺段處理、存儲保護相地址變換等。另外,

6、由于一個段又被劃分成了若干頁,每個段又必須建立一張頁表以把段中的虛頁變換成內(nèi)存中的實際頁面。顯然,與頁式管理時相同,頁表中也要有相應的實現(xiàn)缺頁中斷處理和頁面保護等功能的表項。另外,由于在段頁式管理中,頁表不再是屬于進程而是屬于某個段,因此,段表中應有專項指出該段所對應頁表的頁表始址和頁表長度。3)動態(tài)地址變換過程在一般使用段頁式存儲管理方式的計算機系統(tǒng)中,都在內(nèi)存中辟出一塊固定的區(qū)域存放進程的段表和頁表。因此,在段頁式管理系統(tǒng)中,要對內(nèi)存中指令或數(shù)據(jù)進行一次存取的話,至少需要訪問三次以上的內(nèi)存:第一次是由段表地址寄存器得段表始址后訪問段表,由此取出對應段的頁表在內(nèi)存中的地址。第二次則是訪問頁表

7、得到所要訪問的物理地址。第三次才能訪問真正需要訪問的物理單元。顯然,這將使CPU的執(zhí)行指令速度大大降低。為了提高地址轉(zhuǎn)換速度,設置快速聯(lián)想寄存器就顯得比段式管理或頁式管理時更加需要。在快速聯(lián)想寄存器中,存放當前最常用的段號S、頁號p和對應的內(nèi)存頁面與其它控制用欄目。當要訪問內(nèi)存空間某一單元時,可在通過段表、頁表進行內(nèi)存地址查找的同時,根據(jù)快速聯(lián)想寄存器查找其段號和頁號。如果所要訪問的段或頁在快速聯(lián)想寄存器中,則系統(tǒng)不再訪問內(nèi)存中的段表、頁表而直接把快速聯(lián)想寄存器中的值與頁內(nèi)相對地址d拼接起來得到內(nèi)存地址。五、實驗內(nèi)容:本實驗運行一個設置了全局變量的循環(huán)程序,通過查看段寄存器,LDT表,GDT表

8、等信息,經(jīng)過一系列段、頁地址轉(zhuǎn)換,找到程序中該全局變量的物理地址,實現(xiàn)控制程序運行的目的。通過手工查看系統(tǒng)內(nèi)存,并修改特定物理內(nèi)存的值,實現(xiàn)控制程序運行的目的六、實驗步驟:.安裝bochs和linux系統(tǒng)使用實驗室提供的實驗文件進行bochs虛擬機的安裝,同時將系統(tǒng)文件拷貝至安裝文件夾下,并新建一個批處理文件,寫入以下內(nèi)容:cdC:ProgramFiles(x86)Bochs-2.1.1bochsdbg.exe-q-fbochsrc-hd.bxrc,方便以后使用。運行這個批處理文件,進入調(diào)試狀態(tài)。.編寫實驗程序按照實驗要求編寫Linux下的C語言程序,具體代碼如下:#includeintj=0

9、 x123456;intmain()printf(theaddressofjis0 x%xn,&j);while(j);printf(programterminatedbormally!n);return0;在mnt文件夾下新建test.c文件,使用“vitest.c”命令對test.c文件進行編輯,輸入上面的代碼,按下esc鍵,并輸入“:wq”保存文件。接著在該目錄下使用gcc命令進行C語言程序的編譯,輸入“。-otttest.c”命令生成可執(zhí)行文件壯,輸入ls命令查看當前目錄下文件,并輸入“./杜”命令執(zhí)行程序。3.修改地址值為了讓linux-0.11中運行的test跳出循環(huán),需要找到邏輯

10、地址ds:0 x3004對應的物理地址,將其內(nèi)容(變量i)改為0。1)首先要得到段表LDT,取得ds對應的段描述符,才能得到ds的基址,從而得到ds:0 x3004對應的線性地址,進而從線性地址計算出物理地址。段描述符放在LDT中,ldt的描述符放在GDT中,GDT的地址與LDT在GDT中的項的索引分別保存在gdtr和ldtr中:s部分是一個段選擇子,dl和dh是bochs自動算得的段描述符。ldtr為0 x0068=0000000001101000b,可知索引為1101b即13,TI位為0,即GDT中的第13項為LDT的段描述符,每個段描述符64bit=8byte:得到的LDT段描述符(與s

11、reg指令得到的ldtr中的dl、dh相同),從而我們可以得到LDT的基址為0 x00f9a2d0。2)ds段選擇子為0 x0017=0000000000010111b,可知索引為10b即2,TI位為1,即LDT中的第2項為ds的段描述符,每個段描述符64bit=8byte:得到的ds段描述符,從而我們可以得到ds的基址為0 x10000000。故ds:0 x3004對應的線性地址為0 x10000000+0 x3004=0 x10003004。3)由線性地址計算出物理地址線性地址0 x10003004=00010000000000000011000000000100b,可知頁目錄號為1000

12、000b即64,頁表為11b即3,頁內(nèi)偏移為100b即4。頁目錄表的基址存放于CR3中:獲取頁目錄項:可知頁表基地址為0 x00fa9000。獲取頁表項:可知物理頁基地址為0 x00fa7000。可以看到內(nèi)容是test.c中的變量i的值,將它設置為0,完成后重新運行程序,查看運行情況。七、實驗結(jié)果:1.C語言程序?qū)嵗a1inescharsFl2enalN&smouse蹴BochsforWindows-1inescharsFl2enalN&smouse蹴BochsforWindows-Di印值y”口&2004gnraTiondleex86)J132jnodulfbochsoLitwimclud

13、eTntJ-exlZ3456;Intmahi()rprintfCihedddresEofjis-GxXxSnjSJ);philieCj)Jprintf(programiter-minatedbormo1ly):t-etorii9jUlOe0101HochsUlOe0101HochsfilUSjbitaQmaster:Generic1Z34ftTfl-ZHard-Disk(59rtEytEs)2.代碼執(zhí)行情況,可以看到進入了死循環(huán),使用CTRL+C退出該循環(huán)。February08,2口口4Ireadingcnnfiguration,fromC:Prnsrairi.riles(k86)BDchs2

14、a1,lbochsrc-hd,bxrc.(:ProgramFilesCz86)Boc.hs-3BLlbDGhsrG-hdrbsrc:unknownparameterforparportligmIinstallingWin32nuduleastheBochsGJIusinglogfilebachsout.txthJoDtingfromFloppyaE.Loadingsystem,一.足然,星可使CPU臼磯行搭等HB-controllerresetfailed:.足然,星可使CPU臼磯行搭等HB-controllerresetfailed:0Pari:itinntab1enk.46092/66fi

15、G0fblocks15235/26600fru亡inndEs3466biuffEr-s=35耳力bytesbufferspaceFreeniEnn:1Z5BZ912bytesOk.LzusFxrootJUcd速聯(lián)想寄存器就顯得二匕段式官田中.存放當前最常用的段號3、/usrluillcdE/rnnt|a.out/untliiL/mnitcdmuttest.cffcc-dttest.ca/trtheaddressofjis:9x3904當要訪問內(nèi)存空間某一單元時.3.查看各寄存器中的值,并進行修改KrCSlfllXlbdJc:Oxlbpbp:0K3ftfof8|esi:Ok】!edi:0 x0e

16、sp:0 x3fffef8eflag白:。溫說eip:0K6&cs:5=0 xf,dl=Ox&dh=&K10cOftiOO,vali4=ilh=OxlOcOf3(KH.H.th=010rDf300hdh=0 xl00f300rdh=cxi(konoavalidolvelid3vaid=lvalid=lvalld=lldr:s0 x6S.dl-Oxe2dOC06E.dh_O?i82fa,valid-1tr-5=(h&0.dl=0 xe2e8OQS,vaJid=lgdtr:base=OKjchS.lLmit=0K7ffidir:basc-0N34bS.limit=OsTfrdrO:OjtOdrll

17、OxOdr2:OiOtr6:QjcOtr7:0?cOcrO:0 x800000lbcrllOxO“2:0第04bo9。cr3:0jc0cr4moinhibit_nask;Cdone卬,2*0 x5cb8+l3*8bochs:0 xe2d00068Ox(K)OO82fflOsOO(K)3fff(hlOcOfSW0 x00faa027OxOOOOOCOO0 x00fa90670 x000000000 x001234560 x000030340 x000 x000000000 x000030340w00005d20:xp/2wOxfae2dO+16hoehsl:OxOOfaeSeO:3口/2w0 x

18、40*4bochs:OkOOOOOIOO:xbochs:6町/2wOxfaaOOO+3*4bochs:OxOOfaaOOc;卬/2wDxfa9000+4boehs:Cx00fa9004:“tpm自m0 xfa90040 x04xp/2w0 xfa9004bochs:0 x00fa9004:計算并修改存儲j的地址,然后修改其值,修改為0之后重新執(zhí)行程序,可以看到程序成功執(zhí)行并且也成功退出了循環(huán)。t)LZJIICOZpnIst)billdeuetcimagemnttnnpusrwp/111cdhintvices/nntinIsdualdeu:.;esajontttestuCtt30000Dztuntingcc-osstestacCzMnt1111000D0znntinnoneznntInoff(doesn?t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論