操作系統(tǒng)實(shí)驗(yàn)五虛擬存儲器管理_第1頁
操作系統(tǒng)實(shí)驗(yàn)五虛擬存儲器管理_第2頁
操作系統(tǒng)實(shí)驗(yàn)五虛擬存儲器管理_第3頁
操作系統(tǒng)實(shí)驗(yàn)五虛擬存儲器管理_第4頁
操作系統(tǒng)實(shí)驗(yàn)五虛擬存儲器管理_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)五 虛擬存儲器管理學(xué)號 1115102015 姓名 方茹 班級 11電子A 華僑大學(xué)電子工程系實(shí)驗(yàn)五 虛擬存儲器管理實(shí)驗(yàn)?zāi)康?1、 理解虛擬存儲器概念。2、 掌握分頁式存儲管理地址轉(zhuǎn)換盒缺頁中斷。 實(shí)驗(yàn)內(nèi)容與基本要求1、 模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷。 分頁式虛擬存儲系統(tǒng)是把作業(yè)信息的副本存放在磁盤上,當(dāng)作業(yè)被選中時(shí),可把作業(yè)的開始幾頁先裝入主存且啟動執(zhí)行。為此,在為作業(yè)建立頁表時(shí),應(yīng)說明哪些頁已在主存,哪些頁尚未裝入主存。作業(yè)執(zhí)行時(shí),指令中的邏輯地址指出了參加運(yùn)算的操作存放的頁 號和單元號,硬件的地址轉(zhuǎn)換機(jī)構(gòu)按頁號查頁表,若該頁對應(yīng)標(biāo)志為“1”,

2、則表示該頁已在主存,這時(shí)根據(jù)關(guān)系式“絕對地址=塊號×塊長+單元號”計(jì)算出欲訪問的主存單元地址。如果塊長為2 的冪次,則可把塊號作為高地址部分,把單元號作為低地址部分,兩者拼接而 成絕對地址。若訪問的頁對應(yīng)標(biāo)志為“0”,則表示該頁不在主存,這時(shí)硬件發(fā)“缺頁中斷”信號,有操作系統(tǒng)按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。設(shè)計(jì)一個“地址轉(zhuǎn)換”程序來模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問的頁在主存時(shí),則 形成絕對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的執(zhí)行。當(dāng)訪問的頁不在主存時(shí),則輸出“* 該頁頁號”,表示

3、產(chǎn)生了一次缺頁中斷。 2、 用先進(jìn)先出頁面調(diào)度算法處理缺頁中斷。 FIFO 頁面調(diào)度算法總是淘汰該作業(yè)中最先進(jìn)入主存的那一頁,因此可以用一個數(shù)組來表示該作業(yè)已在主存的頁面。假定作業(yè)被選中時(shí),把開始的m 個頁面裝入主存,則數(shù)組的元素可定為m 個。實(shí)驗(yàn)報(bào)告內(nèi)容 1、 分頁式存儲管理和先進(jìn)先出頁面調(diào)度算法原理。 分頁式存儲管理的基本思想是把內(nèi)存空間分成大小相等、位置固定的若干個小分區(qū),每個小分區(qū)稱為一個存儲塊,簡稱塊,并依次編號為0,1,2,3,,n塊,每個存儲塊的大小由不同的系統(tǒng)決定,一般為2的n次冪,如1KB,2 KB,4 KB等,一般

4、不超過4 KB。而把用戶的邏輯地址空間分成與存儲塊大小相等的若干頁,依次為0,1,2,3,m頁。當(dāng)作業(yè)提出存儲分配請求時(shí),系統(tǒng)首先根據(jù)存儲塊大小把作業(yè)分成若干頁。每一頁可存儲在內(nèi)存的任意一個空白塊內(nèi)。此時(shí),只要建立起程序的邏輯頁和內(nèi)存的存儲塊之間的對應(yīng)關(guān)系,借助動態(tài)地址重定位技術(shù),原本連續(xù)的用戶作業(yè)在分散的不連續(xù)存儲塊中,就能夠正常投入運(yùn)行。 先進(jìn)先出頁面調(diào)度算法根據(jù)頁面進(jìn)入內(nèi)存的時(shí)間先后選擇淘汰頁面,先進(jìn)入內(nèi)存的頁面先淘汰,后進(jìn)入內(nèi)存的后淘汰。本算法實(shí)現(xiàn)時(shí)需要將頁面按進(jìn)入內(nèi)存的時(shí)間先后組成一個隊(duì)列,每次調(diào)度隊(duì)首頁面予以淘汰。程序流程圖。1、地址轉(zhuǎn)換程序流程圖開始取一條指令取指令中訪

5、問的頁號查頁表該頁標(biāo)志=1?形成絕對地址輸出絕對地址輸出“*”頁號表示發(fā)生缺頁中斷有后續(xù)指令?結(jié)束取下一條指令YYNN2、FIFO頁面置換算法程序流程圖開始取一條指令取指令中訪問的頁號查頁表該頁標(biāo)志=1?形成絕對地址是內(nèi)存指令?置該頁修改標(biāo)志為1輸出絕對地址有后繼指令?取下一條指令結(jié)束當(dāng)前頁是否被更新?將該頁更新標(biāo)志置為0置換出當(dāng)前頁輸出被置換出去的頁面顯示被調(diào)入的頁面設(shè)置被調(diào)入頁面的相關(guān)屬性修改頁表YYYYN(產(chǎn)生缺頁中斷)NNN模擬FIFO頁面調(diào)度模擬硬件地址 轉(zhuǎn) 換程序及其注釋#include<cstdio>#include<cstring>#define Siz

6、eOfPage 100#define SizeOfBlock 128#define M 4/主存中放4個頁面struct info/頁表信息結(jié)構(gòu)體bool flag;/頁標(biāo)志,1表示該頁已在主存,0表示該頁不在主存long block;/塊號long disk;/在磁盤上的位置bool dirty;/更新標(biāo)志pagelistSizeOfPage;long po;/隊(duì)列標(biāo)記long PM;/假設(shè)內(nèi)存中最多允許M個頁面void init_ex1()memset(pagelist,0,sizeof(pagelist);/內(nèi)存空間初始化/*分頁式虛擬存儲系統(tǒng)初始化*/pagelist0.flag=1;

7、pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;pagelist1.disk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex1()/模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷過程bool stop=0;long p,q;/頁號,單元號char s128;/初始定義塊長do printf(&quo

8、t;請輸入指令的頁號和單元號:n");if(scanf("%ld%ld",&p,&q)!=2)scanf("%s",s);if(strcmp(s,"exit")=0)/如果輸入的為“exit”那么就退出,進(jìn)入重選頁面stop=1;elseif(pagelistp.flag)/如果該頁標(biāo)志flag為1,說明該頁已在主存中 printf("絕對地址=%ldn",pagelistp.block*SizeOfBlock+q);/計(jì)算出絕對地址,絕對地址=塊號x塊長(默認(rèn)128)+單元號elsepr

9、intf("*%ldn",p);/如果該頁標(biāo)志flag為0,說明該頁不在主存,則產(chǎn)生了一次缺頁中斷while(!stop);void init_ex2()/*以下部分為先進(jìn)先出(FIFO)頁面調(diào)度算法處理缺頁中斷的初始化,其中也包含了對于當(dāng)前的存儲器內(nèi)容的初始化*/po=0;P0=0;P1=1;P2=2;P3=3;/對內(nèi)存中的4個頁面進(jìn)行初始化,并且使目前排在第一位的為0memset(pagelist,0,sizeof(pagelist);/內(nèi)存空間初始化pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pageli

10、st1.flag=1;pagelist1.block=8;pagelist1.disk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex2()/模擬FIFO算法的工作過程long p,q,i;char s100;bool stop=0;doprintf("請輸入指令的頁號、單元號,以及是否為內(nèi)存指令:n");if(scanf("%ld%ld",&p,

11、&q)!=2)scanf("%s",s);if(strcmp(s,"exit")=0)/如果輸入的為“exit”就退出,進(jìn)入重選界面stop=1;elsescanf("%s",s);if(pagelistp.flag)/如果該頁標(biāo)志flag為1,說明該頁已在主存中printf("絕對地址=%ldn",pagelistp.block*SizeOfBlock+q);/計(jì)算絕對地址if(s0='Y'|s0='y')/內(nèi)存指令pagelistp.dirty=1;/修改標(biāo)志為1else

12、if(pagelistPpo.dirty)/當(dāng)前的頁面被更新過,需把更新后的內(nèi)容寫回外存pagelistPpo.dirty=0;pagelistPpo.flag=0;/將flag置0,表明當(dāng)前頁面已被置換出去printf("out%ldn",Ppo);/顯示根據(jù)FIFO算法被置換出去的頁面printf("in%ldn",p);/顯示根據(jù)FIFO算法被調(diào)入的頁面pagelistp.block=pagelistPpo.block;/塊號相同pagelistp.flag=1;/將當(dāng)前頁面flag置1,表明已在主存中Ppo=p;/保存當(dāng)前頁面所在的位置po=(p

13、o+1)%M;while(!stop);printf("數(shù)組P的值為:n");for(i=0;i<M;i+)/循環(huán)輸入當(dāng)前數(shù)組的數(shù)值,即當(dāng)前在內(nèi)存中的頁面printf("P%ld=%ldn",i,Pi);void select()/選擇哪種方法進(jìn)行l(wèi)ong se;char s128;do printf("請選擇題號(1/2):");if(scanf("%ld",&se)!=1)scanf("%s",&s);if(strcmp(s,"exit")=0)/如果輸入為exit則退出整個程序return;else if(se=1)/如果se=1說明選擇的模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷init

溫馨提示

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

最新文檔

評論

0/150

提交評論