實驗二-虛擬存儲器_第1頁
實驗二-虛擬存儲器_第2頁
實驗二-虛擬存儲器_第3頁
實驗二-虛擬存儲器_第4頁
實驗二-虛擬存儲器_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗二虛擬存儲器一、實驗內(nèi)容模擬分頁式虛擬存儲管理中硬件的地址轉(zhuǎn)換和缺頁中斷,以及選擇頁面調(diào)度算法處理缺頁中斷。二、實驗目的在計算機系統(tǒng)中,為了提高主存利用率,往往把輔助存儲器〔如磁盤〕作為主存儲器的擴充,使多道運行的作業(yè)的全部邏輯地址空間總和可以超出主存的絕對地址空間。通過這次實習理解在分頁式存儲管理中怎樣實現(xiàn)虛擬存儲器。深入了解分頁式存儲管理如何實現(xiàn)地址轉(zhuǎn)換,進一步認識分頁式虛擬存儲管理中如何處理缺頁中斷。三、實驗題目題目一:模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷1.概要設計分頁式存儲管理中地址轉(zhuǎn)換過程很簡單,假定主存塊的大小為2n字節(jié),主存大小為2m'字節(jié)和邏輯地址m位,那么進行地址轉(zhuǎn)換時,首先從邏輯地址中的高m-n位中取得頁號,然后根據(jù)頁號查頁表,得到塊號,并將塊號放入物理地址的高m'-n位,最后從邏輯地址中取得低n位放入物理地址的低n位就得到了物理地址,過程如圖1所示。頁頁號頁內(nèi)地址塊號塊內(nèi)地址頁號…塊號………物理地址邏輯地址m'nn-10mnn-10圖1頁式存儲管理系統(tǒng)地址轉(zhuǎn)換示意圖地址轉(zhuǎn)換是由硬件完成的,實驗中使用軟件程序模擬地址轉(zhuǎn)換過程,模擬地址轉(zhuǎn)換的流程圖如圖2.7所示〔實驗中假定主存64KB,每個主存塊1024字節(jié),即n=10,m'=16,物理地址中塊號6位、塊內(nèi)地址10位;作業(yè)最大64KB,即m=16,邏輯地址中頁號6位、頁內(nèi)地址10位〕。在分頁式虛擬存儲管理方式中,作業(yè)信息作為副本放在磁盤上,作業(yè)執(zhí)行時僅把作業(yè)信息的局部頁面裝入主存儲器,作業(yè)執(zhí)行時假設訪問的頁面在主存中,那么按上述方式進行地址轉(zhuǎn)換,假設訪問的頁面不在主存中,那么產(chǎn)生一個“缺頁中斷〞,由操作系統(tǒng)把當前所需的頁面裝入主存儲器后,再次執(zhí)行時才可以按上述方法進行地址轉(zhuǎn)換。頁式虛擬存儲管理方式中頁表除頁號和該頁對應的主存塊號外,至少還要包括存在標志〔該頁是否在主存〕,磁盤位置〔該頁的副本在磁盤上的位置〕和修改標志〔該頁是否修改正〕。缺頁處理過程簡單闡述如下:①根據(jù)當前執(zhí)行指令中邏輯地址中的頁號查頁表,判斷該頁是否在主存儲器中,假設該頁標志為“0〞,形成缺頁中斷。中斷裝置通過交換PSW讓操作系統(tǒng)的中斷處理程序占用處理器;②操作系統(tǒng)處理缺頁中斷的方法就是查主存分配表,找一個空閑主存塊;假設無空閑塊,查頁表,選擇一個已在主存的頁面,把它暫時調(diào)出主存。假設在執(zhí)行過程中該頁被修改正,那么需將該頁信息寫回磁盤,否那么不必寫回;③找出該頁的磁盤位置,啟動磁盤讀出該頁信息,把磁盤上讀出的信息裝入第2步找到的主存塊,修改頁表中該頁的標志為“1〞;④由于產(chǎn)生缺頁中斷的那條指令沒有執(zhí)行完,所以頁面裝入后應重新執(zhí)行被中斷的指令。當重新執(zhí)行該指令時,由于要訪問的頁面已在主存中,所以可正常執(zhí)行。關于第②步的查找裝入新頁面的主存塊的處理方式,不同系統(tǒng)采用的策略可能有所不同,這里采用局部置換算法,就是每個作業(yè)分得一定的主存塊,只能在分得的主存塊內(nèi)查找空閑塊,假設無空閑主存塊,那么從該作業(yè)中選擇一個頁面淘汰出主存。2、主要數(shù)據(jù)結構設計⑴、structinfo//頁表{boolflag;標志//用來表示對應頁是否已經(jīng)裝入主存,標志位=1,那么表示頁已經(jīng)在主存,標志位=0,那么表示該頁尚未裝入主存。longblock;主存塊號//用來表示已經(jīng)裝入主存的頁所站的塊號longdisk;磁盤位置即磁盤塊號//用來指出作業(yè)副本的每一頁被存放在磁盤上的位置}pagelist[SizeOfPage];//定義結構體用來存儲頁表信息〔2〕.作業(yè)執(zhí)行時,指令中的邏輯地址指出了參加運算的操作數(shù)存放的頁號和單元號,硬件的地址轉(zhuǎn)換機構按頁號查頁表,假設該頁對應標志為“1〞,那么表示該頁已在主存,根據(jù)關系式:絕對地址=塊號×塊長+單元號計算出欲訪問的主存單元地址。假設訪問的頁對應標志為“0〞,那么表示該頁不在主存,這時硬件發(fā)“缺頁中斷〞信號,由操作系統(tǒng)按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令?!?〕.設計一個“地址轉(zhuǎn)換〞函數(shù)work_ex()來模擬硬件的地址轉(zhuǎn)換工作。當訪問的頁在主存時,那么形成絕對地址。當訪問的頁不在主存時,那么輸出“*該頁頁號〞,表示產(chǎn)生了一次缺頁中斷?!?〕.假定主存的每塊長度為128字節(jié);現(xiàn)有一個共七頁的作業(yè),在函數(shù)init_ex()中對頁表初始化,將第0頁到第3頁中的內(nèi)容裝入主存中,其余三頁未裝入主存;該作業(yè)的頁表如表2:表2主存中頁表格式015011118012219013311021400225002360121如果作業(yè)依次為執(zhí)行的指令序列,作業(yè)執(zhí)行指令序列表,如表3:表3作業(yè)執(zhí)行指令序列表操作頁號單元號操作頁號單元號+0070移位4053+1050+5023×2015存1037存3021取2078取0056+4001-6040存6084〔5〕.在主函數(shù)intmain()中調(diào)用函數(shù)work_ex()和函數(shù)init_ex(),實現(xiàn)地址的轉(zhuǎn)換和產(chǎn)生缺頁中斷。3、流程圖否是結束取下一條指令有后繼指令?是輸出絕對地址形成絕對地址否輸出“*〞頁號表示發(fā)生缺頁中斷該頁標志=1?查頁表取指令中訪問的頁號取一條指令開始否是結束取下一條指令有后繼指令?是輸出絕對地址形成絕對地址否輸出“*〞頁號表示發(fā)生缺頁中斷該頁標志=1?查頁表取指令中訪問的頁號取一條指令開始4.源程序#include<iostream>usingnamespacestd;#definedata128structleaftable//頁表{longleafnumber;//葉號boolflag;//標志longblock;//塊號longdisk;//在磁盤上的位置}pagelist[7];voidwork(longa,longb){for(inti=0;i<7;i++) {if(a==pagelist[i].leafnumber&&pagelist[i].flag) { cout<<"塊號為:"<<pagelist[i].block<<",單元號為:"<<b; cout<<"絕對地址為:"<<pagelist[i].block*data+b<<endl; }elseif(a==pagelist[i].leafnumber&&!pagelist[i].flag)cout<<"*"<<"在磁盤上的位置為:"<<pagelist[i].disk<<endl; }}voidinit_ex()//把頁表初始化{pagelist[0].leafnumber=0;pagelist[0].flag=1;pagelist[0].block=5;pagelist[0].disk=011;pagelist[1].leafnumber=1;pagelist[1].flag=1;pagelist[1].block=8;pagelist[1].disk=012;pagelist[2].leafnumber=2;pagelist[2].flag=1;pagelist[2].block=9;pagelist[2].disk=013;pagelist[3].leafnumber=3;pagelist[3].flag=1;pagelist[3].block=1;pagelist[3].disk=021;pagelist[4].leafnumber=4;pagelist[4].flag=0;pagelist[4].disk=022;pagelist[5].leafnumber=5;pagelist[5].flag=0;pagelist[5].disk=023;pagelist[6].leafnumber=6;pagelist[6].flag=0;pagelist[6].disk=121;}voidmain(){longleaf,d; init_ex();inti=1;while(i) { cout<<"請輸入要執(zhí)行指令的頁號和單元號:"<<endl; cin>>leaf>>d; work(leaf,d);cout<<"是否執(zhí)行下一條指令,是:輸入,不是:輸入"<<endl;cin>>i; }}5.實驗結果:題目二:用先進先出頁面置換算法〔FIFO〕處理缺頁中斷1、程序用到的數(shù)據(jù)結構typedefstructpage{intyemian;//頁面號intbiaoji;//被訪問標記}page;/*頁面邏輯結構,結構為方便算法實現(xiàn)設計*/2、算法流程圖:3、源程序#include<iostream>usingnamespacestd;#include<stdlib.h>constintNsize=10;constintPsize=12;typedefstructpage{intyemian;//頁面號intbiaoji;//被訪問標記}page;/*頁面邏輯結構,結構為方便算法實現(xiàn)設計*/pageblock[Nsize];//物理塊pagepage[Psize];//頁面號串voidInit(intQString[],intNsize){//初始化內(nèi)存單元、緩沖區(qū)for(inti=0;i<Nsize;i++) { block[i].yemian=-1;//找到空閑內(nèi)存block[i].biaoji=0; }for(inti=0;i<Psize;i++) {page[i].yemian=QString[i];page[i].biaoji=0; }}intfindSpace(intNsize){//查找是否有空閑內(nèi)存for(inti=0;i<Nsize;i++) {if(block[i].yemian==-1) {returni;//找到空閑內(nèi)存,返回BLOCK中位置 } }return-1;}intfindExist(intcurpage,intNsize){//查找內(nèi)存中是否有該頁面for(inti=0;i<Nsize;i++) {if(block[i].yemian==page[curpage].yemian) {returni;//找到內(nèi)存中有該頁面,返回BLOCK中位置 } }return-1;}intfindReplace(intNsize){//查找應予置換的頁面inta=0;for(inti=0;i<Nsize;i++) {if(block[i].biaoji>=block[a].biaoji) { a=i;//找到應予置換頁面,返回BLOCK中位置 } }returna;}voiddisplay(intNsize){//顯示for(inti=0;i<Nsize;i++) {if(block[i].yemian!=-1)//非空閑內(nèi)存 {cout<<block[i].yemian<<""; } }cout<<endl;}/*FIFO核心局部*/voidFIFO(intNsize){//先進先出頁面置換算法intexist,space,aition;floatscore=0;for(inti=0;i<Psize;i++) {exist=findExist(i,Nsize);if(exist!=-1)//內(nèi)存中有該頁面 {cout<<"不缺頁"<<endl; score+=1;//統(tǒng)計不缺頁次數(shù) }else {space=findSpace(Nsize);if(space!=-1)//找到空閑內(nèi)存 {block[space]=page[i];display(Nsize); }else {aition=findReplace(Nsize);//找到應予置換頁面block[aition]=page[i];display(Nsize); } }for(intj=0;j<Nsize;j++) { block[j].biaoji++;//BLOCK中所有頁面biaoji++ } }cout<<"缺頁次數(shù)為:"<<20-score<<endl;cout<<"缺頁率為:"<<(20-score)*100/20<<"%"<<endl;}voidBlockClear(intNsize){//塊去除for(inti=0;i<Nsize;i++){block[i].yemian=-1;block[i].biaoji=0;}}voidmain(void){inti,Nsize,QString[Psize]={0};cout<<"請輸入12個數(shù):\n";for(i=0;i<12;i++) {cin>>QString[i]; }cout<<"頁面號引用串:";for(i=0;i<12;i++){cout<<QString[i]<<"";}cout<<endl;cout<<"請輸入分配的物理塊數(shù)的大小:";cin>>Nsize;if(Nsize>0&&Nsize<=10) {Init(QString,Nsize);cout<<"頁面號引用串:";for(i=0;i<Psize;i++) {cout<<QSt

溫馨提示

  • 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

提交評論