虛擬存儲(chǔ)器實(shí)驗(yàn)報(bào)告.doc_第1頁(yè)
虛擬存儲(chǔ)器實(shí)驗(yàn)報(bào)告.doc_第2頁(yè)
虛擬存儲(chǔ)器實(shí)驗(yàn)報(bào)告.doc_第3頁(yè)
虛擬存儲(chǔ)器實(shí)驗(yàn)報(bào)告.doc_第4頁(yè)
虛擬存儲(chǔ)器實(shí)驗(yàn)報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

佛山科學(xué)技術(shù)學(xué)院實(shí) 驗(yàn) 報(bào) 告課程名稱 操作系統(tǒng)原理實(shí)驗(yàn) 實(shí)驗(yàn)項(xiàng)目 虛擬存儲(chǔ)器 專業(yè)班級(jí) 姓 名 學(xué) 號(hào) 指導(dǎo)教師 成 績(jī) 日 期 一、實(shí)驗(yàn)?zāi)康?、了解虛擬存儲(chǔ)器的基本原理和實(shí)現(xiàn)方法。2、掌握幾種頁(yè)面置換算法。二、實(shí)驗(yàn)內(nèi)容設(shè)計(jì)模擬實(shí)現(xiàn)采用不同內(nèi)外存調(diào)度算法進(jìn)行頁(yè)面置換,并計(jì)算缺頁(yè)率。三、實(shí)驗(yàn)原理內(nèi)存在計(jì)算機(jī)中的作用很大,電腦中所有運(yùn)行的程序都需要經(jīng)過內(nèi)存來(lái)執(zhí)行,如果執(zhí)行的程序很大或很多,就會(huì)導(dǎo)致內(nèi)存消耗殆盡。為了解決這個(gè)問題,Window中運(yùn)用了虛擬內(nèi)存技術(shù),即拿出一部分硬盤空間來(lái)充當(dāng)內(nèi)存使用,當(dāng)內(nèi)存占用完時(shí),電腦就會(huì)自動(dòng)調(diào)用硬盤來(lái)充當(dāng)內(nèi)存,以緩解內(nèi)存的緊張。虛擬存儲(chǔ)器是指具有請(qǐng)求調(diào)入功能和置換功能,能從邏輯上對(duì)內(nèi)存容量加以擴(kuò)充的一種存儲(chǔ)器系統(tǒng)。它是采用一定的方法將一定的外存容量模擬成內(nèi)存,同時(shí)對(duì)程序進(jìn)出內(nèi)存的方式進(jìn)行管理,從而得到一個(gè)比實(shí)際內(nèi)存容量大得多的內(nèi)存空間,使得程序的運(yùn)行不受內(nèi)存大小的限制。虛擬存儲(chǔ)區(qū)的容量與物理主存大小無(wú)關(guān),而受限于計(jì)算機(jī)的地址結(jié)構(gòu)和可用磁盤容量。虛擬內(nèi)存的設(shè)置主要有兩點(diǎn),即內(nèi)存大小和分頁(yè)位置,內(nèi)存大小就是設(shè)置虛擬內(nèi)存最小為多少和最大為多少;而分頁(yè)位置則是設(shè)置虛擬內(nèi)存應(yīng)使用那個(gè)分區(qū)中的硬盤空間。(一)頁(yè)式虛擬存儲(chǔ)器在頁(yè)式虛擬存儲(chǔ)系統(tǒng)中,將程序按統(tǒng)一的大小劃分成多個(gè)頁(yè),同時(shí)也將虛擬存儲(chǔ)器劃分為同樣大小的頁(yè),其中虛擬空間的頁(yè)稱為虛頁(yè)(邏輯頁(yè)),而主存空間的頁(yè)稱為實(shí)頁(yè)(物理頁(yè)),并對(duì)這些頁(yè)按地址從低到高的順序編號(hào)。在編程時(shí),程序的虛地址由高位字段的虛頁(yè)號(hào)和低位字段的頁(yè)內(nèi)地址兩部分組成,虛頁(yè)號(hào)標(biāo)識(shí)頁(yè)。虛地址到實(shí)地址之間的變換是由頁(yè)表來(lái)實(shí)現(xiàn)的。頁(yè)表是一張存放在主存中的虛頁(yè)號(hào)和實(shí)頁(yè)號(hào)的對(duì)照表,記錄著程序的虛頁(yè)調(diào)入主存時(shí)被安排在主存中的位置。若計(jì)算機(jī)采用多道程序工作方式,則可為每個(gè)用戶作業(yè)建立一個(gè)頁(yè)表,硬件中設(shè)置一個(gè)頁(yè)表基址寄存器,存放當(dāng)前所運(yùn)行程序的頁(yè)表的起始地址。頁(yè)表中的每一行記錄了與某個(gè)虛頁(yè)對(duì)應(yīng)的若干信息,包括虛頁(yè)號(hào)、裝入位和實(shí)頁(yè)號(hào)等。頁(yè)表基址寄存器和虛頁(yè)號(hào)拼接成頁(yè)表索引地址。根據(jù)這個(gè)索引地址可讀到一個(gè)頁(yè)表信息字,然后檢測(cè)頁(yè)表信息字中裝入位的狀態(tài)。若裝入位為1,表示該頁(yè)面已在主存中,將對(duì)應(yīng)的實(shí)頁(yè)號(hào)與虛地址中的頁(yè)內(nèi)地址相拼接就得到了完整的實(shí)地址;若裝入位為0,表示該頁(yè)面不在主存中,于是要啟動(dòng)I/O系統(tǒng),把該頁(yè)從輔存中調(diào)入主存后再供CPU使用,若主存已滿,還需要使用替換算法替換頁(yè)。(二)頁(yè)面置換算法在地址映射過程中,若在頁(yè)面中發(fā)現(xiàn)所要訪問的頁(yè)面不再內(nèi)存中,則產(chǎn)生缺頁(yè)中斷。當(dāng)發(fā)生缺頁(yè)中斷時(shí)操作系統(tǒng)必須在內(nèi)存選擇一個(gè)頁(yè)面將其移出內(nèi)存,以便為即將調(diào)入的頁(yè)面讓出空間。而用來(lái)選擇淘汰哪一頁(yè)的規(guī)則叫做頁(yè)面置換算法。幾中常見的頁(yè)面置換方法如下:1. 最佳置換算法(OPT):選擇永不使用或是在最長(zhǎng)時(shí)間內(nèi)不再被訪問(即距現(xiàn)在最長(zhǎng)時(shí)間才會(huì)被訪問)的頁(yè)面淘汰出內(nèi)存。2. 先進(jìn)先出置換算法(FIFO):選擇最先進(jìn)入內(nèi)存即在內(nèi)存駐留時(shí)間最久的頁(yè)面換出到外存。3. 最近最久未使用置換算法(LRU): 以“最近的過去”作為“最近的將來(lái)”的近似,選擇最近一段時(shí)間最長(zhǎng)時(shí)間未被訪問的頁(yè)面淘汰出內(nèi)存4. 時(shí)鐘置換算法Clock :為進(jìn)入內(nèi)存的頁(yè)面設(shè)置一個(gè)訪問位,當(dāng)內(nèi)存中某頁(yè)被訪問,訪問位置一,算法在選擇一頁(yè)淘汰時(shí),只需檢查訪問位,若為0,則直接換出,若為1,置該訪問位為0,檢測(cè)內(nèi)存中的下一個(gè)頁(yè)面的訪問位。5. 最少使用置換算法(LFU):在內(nèi)存中為每個(gè)頁(yè)面設(shè)置一個(gè)移位寄存器,用來(lái)記錄該頁(yè)面被訪問的頻率。選擇在最近時(shí)期使用最少的頁(yè)面作為淘汰頁(yè)6. 隨機(jī)置換算法(S):產(chǎn)生一個(gè)取值范圍在0和N-1之間的隨機(jī)數(shù),該隨機(jī)數(shù)即可表示應(yīng)被淘汰出內(nèi)存的頁(yè)面。四、實(shí)驗(yàn)步驟1定義頁(yè)表的存儲(chǔ)結(jié)構(gòu),設(shè)置作業(yè)進(jìn)程所占內(nèi)存空間為640K,頁(yè)面大小為1K/2K/4K/8K,隨機(jī)生成100個(gè)頁(yè)面,用于分配頁(yè)面大小的內(nèi)存總空間為32K。2初始化進(jìn)程的頁(yè)面引用序列。3選擇下列六種置換算法中的三種編寫程序,進(jìn)行頁(yè)面置換,并計(jì)算缺頁(yè)次數(shù)和缺頁(yè)率。 (1)最佳置換算法(OPT) (2)先進(jìn)先出置換算法(FIFO): (3)最近最久未使用算法(LRU) (4)時(shí)鐘置換算法(CLOCK) (5)最少使用置換算法(LFU) (6)隨機(jī)置換算法(S)4. 使用菜單形式,選擇不同的置換方法,顯示換頁(yè)過程、缺頁(yè)次數(shù)及缺頁(yè)率。五、實(shí)驗(yàn)代碼#include#include#include#define M 3 /內(nèi)存頁(yè)數(shù)#define N 20 /頁(yè)面引用序列數(shù)#define Myprintf printf(-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-n) /*表格控制*/ /定義頁(yè)面的存儲(chǔ)結(jié)構(gòu)typedef struct pageint num; /記錄頁(yè)面號(hào)int time; /記錄調(diào)入內(nèi)存時(shí)間int visitBit; /訪問位Page;Page PM; /內(nèi)存單元數(shù)int cMN; /暫保存內(nèi)存當(dāng)前的狀態(tài)int queueM=-1,-1,-1; /記錄調(diào)入內(nèi)存的頁(yè)面int front=0; /隊(duì)列頭指針int current=0;/初始化內(nèi)存單元、緩沖區(qū)void Init(Page *p,int cMN) int i,j; for(i=0;iM;i+) pi.num=-1; pi.time=N-i-1; pi.visitBit=0; for(i=0;iM;i+) for(j=0;jN;j+) cij=-1; /判斷頁(yè)面是否已在內(nèi)存中int Equation(int fold,Page *p) int i; for(i=0;iM;i+) if (fold=pi.num) return i; return -1; /先進(jìn)先出頁(yè)面置換算法,加載的頁(yè)面已在內(nèi)存中,則/返回0。否則置換出最先調(diào)入內(nèi)存的頁(yè),并返回1int FIFO(int fold,Page *p)int i,y;int val=Equation(fold,p);if(val0) /請(qǐng)求頁(yè)面不在內(nèi)存y=queuefront; /最先調(diào)入內(nèi)存的頁(yè)出隊(duì)queuefront=fold; /加入隊(duì)尾front=(front+1)%M;for(i=0;iM;i+)if(y=pi.num)pi.num=fold; /頁(yè)面置換break;return 1;return 0;/LRU置換算法/取得在內(nèi)存中停留最久的頁(yè)面,默認(rèn)狀態(tài)下為最早調(diào)入的頁(yè)面int GetMax(Page *p) int i; int max=-1; int tag=0; for(i=0;imax) max=pi.time;tag=i; return tag; /LRU核心部分int LRU(int fold,Page *p) int i; int a; a=Equation(fold,p); if (a=0) pa.time=0; for(i=0;iM;i+) if (i!=a) pi.time+;return 0; else a=GetMax(p); pa.num=fold; pa.time=0; for(i=0;iM;i+) if (i!=a) pi.time+;return 1; /時(shí)鐘置換算法/取的內(nèi)存中訪問位為0的淘汰頁(yè)面int GetClockPage(Page *p)int i;for(i=0;iM;i+)if(0=pcurrent.visitBit)return current;elsepcurrent.visitBit=0;current=(current+1)%M;return current;int Clock(int fold,Page *p)int val;val=Equation(fold,p);if(val0) val=GetClockPage(p);pval.num=fold;pval.visitBit=1;return 1;return 0;/顯示換頁(yè)過程void Printf(int a,int q,int k)int i,j;printf(顯示換頁(yè)過程:n);Myprintf;for(j=0;jN;j+) printf(%2d |,aj);Myprintf; for(i=0;iM;i+) for(j=0;jN;j+) if(cij=-1) printf(%2c |,32); else printf(%2d |,cij); Myprintf;printf(n調(diào)入隊(duì)列為:); for(i=0;ik+1;i+) printf(%3d,qi); printf(n缺頁(yè)次數(shù)為:%6dn缺頁(yè)率:%16.6fn,k+1,(float)(k+1)/N);printf(n);int Menu()int i;printf(tt*頁(yè)面置換算法* n); printf(t 1.先進(jìn)先出置換算法(FIFO) n);printf(t 2.最近最久未使用算法(LRU) n); printf(t 3.時(shí)鐘置換算法(CLOCK) n);printf(t 4.退出 n);printf(tt*請(qǐng)輸入您的選擇*n);scanf(%d,&i);getchar();return i;/主函數(shù)void main()int i,j,flag;int q100; /記錄調(diào)入隊(duì)列int k ; /調(diào)入隊(duì)列計(jì)數(shù)變量int aN=7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1;while(1)flag=Menu();switch(flag)case 1: /先進(jìn)先出置換算法(FIFO)Init(P,c);k=-1;for(i=0;iN;i+)if(FIFO(ai,P)q+k=ai; /記錄調(diào)入頁(yè)面c0i=ai;for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 2: /最近最久未使用算法(LRU)Init(P,c);k=-1;for(i=0;iN;i+)if(LRU(ai,P)q+k=ai; /記錄調(diào)入頁(yè)面for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 3: /時(shí)鐘置換算法(CLOCK)Init(P,c);k=-1;for(i=0;iN;i+)if(Clock(ai,P)q+k=ai; /記錄調(diào)入頁(yè)面else /訪問頁(yè)已在內(nèi)存,訪問位置1for(j=0;jM;j+)if(ai=Pi.num)Pi.visitBit=1;current=(current+1)%M;for(j=0;jM;j+) cji=Pj.num;Printf(a,q,k);break;case 4:printf(歡迎使用!n);exit(1);break;六、實(shí)驗(yàn)結(jié)果及分析1先進(jìn)先出置換算法2.最近最久未使用算法3.時(shí)鐘置換算法4.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論