版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 實(shí)驗(yàn)五. 請(qǐng)求頁(yè)式存儲(chǔ)管理的模擬實(shí)驗(yàn)內(nèi)容:熟悉虛擬存儲(chǔ)管理的各種頁(yè)面置換算法,并編寫(xiě)模擬程序?qū)崿F(xiàn)請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法-最近最久未使用算法(LRU),要求在每次產(chǎn)生置換時(shí)顯示頁(yè)面分配狀態(tài)和缺頁(yè)率。實(shí)驗(yàn)要求:1、運(yùn)行給出的實(shí)驗(yàn)程序,查看執(zhí)行情況,進(jìn)而分析算法的執(zhí)行過(guò)程,在理解FIFO頁(yè)面置換算法和最近最久未使用算法(LRU)置換算法后,給出最佳置換算法的模擬程序?qū)崿F(xiàn),并集成到參考程序中。2、執(zhí)行2個(gè)頁(yè)面置換模擬程序,分析缺頁(yè)率的情況。最好頁(yè)框數(shù)和訪問(wèn)序列長(zhǎng)度可調(diào)節(jié),在使用同一組訪問(wèn)序列數(shù)據(jù)的情況下,改變頁(yè)框數(shù)并執(zhí)行2個(gè)頁(yè)面置換模擬程序,查看缺頁(yè)率的變化。3、在每次產(chǎn)生置換時(shí)要求顯示分配
2、狀態(tài)和缺頁(yè)率。程序的地址訪問(wèn)序列通過(guò)隨機(jī)數(shù)產(chǎn)生,要求具有足夠的長(zhǎng)度。最好頁(yè)框數(shù)和訪問(wèn)序列長(zhǎng)度可調(diào)節(jié)。實(shí)驗(yàn)的執(zhí)行結(jié)果如下圖所示(左下圖為FIFO執(zhí)行結(jié)果,右下圖為L(zhǎng)RU執(zhí)行結(jié)果): 程序源代碼:#include <libio.h>#include "windows.h"#include <conio.h>#include <stdlib.h>#include <fstream.h>#include <io.h>#include <string.h>#include <stdio.h>void
3、initialize(); /初始化相關(guān)數(shù)據(jù)結(jié)構(gòu)void createps(); /隨機(jī)生成訪問(wèn)序列void displayinfo(); /顯示當(dāng)前狀態(tài)及缺頁(yè)情況void fifo(); /先進(jìn)先出算法int findpage(); /查找頁(yè)面是否在內(nèi)存void lru(); /最近最久未使用算法int invalidcount = 0; / 缺頁(yè)次數(shù)int vpoint; /頁(yè)面訪問(wèn)指針int pageframe10; / 分配的頁(yè)框int pagehistory10; /記錄頁(yè)框中數(shù)據(jù)的訪問(wèn)歷史int rpoint; /頁(yè)面替換指針int inpflag; /缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺
4、頁(yè)struct PageInfo /頁(yè)面信息結(jié)構(gòu) int serial100; / 模擬的最大訪問(wèn)頁(yè)面數(shù),實(shí)際控制在20以上 int flag; / 標(biāo)志位,0表示無(wú)頁(yè)面訪問(wèn)數(shù)據(jù) int diseffect; / 缺頁(yè)次數(shù) int total_pf; / 分配的頁(yè)框數(shù) int total_pn; / 訪問(wèn)頁(yè)面序列長(zhǎng)度 pf_info;/初始化相關(guān)數(shù)據(jù)結(jié)構(gòu)void initialize() int i,pf;inpflag=0; /缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺頁(yè)pf_info.diseffect =0; / 缺頁(yè)次數(shù)pf_info.flag =0; / 標(biāo)志位,0表示無(wú)頁(yè)面訪問(wèn)數(shù)據(jù)printf(
5、"n請(qǐng)輸入要分配的頁(yè)框數(shù):"); / 自定義分配的頁(yè)框數(shù) scanf("%d",&pf);pf_info.total_pf =pf; for(i=0;i<100;i+) / 清空頁(yè)面序列 pf_info.seriali=-1; / 隨機(jī)生成訪問(wèn)序列void createps(void )int s,i,pn; initialize(); /初始化相關(guān)數(shù)據(jù)結(jié)構(gòu)printf("n請(qǐng)輸入要隨機(jī)生成訪問(wèn)序列的長(zhǎng)度:"); /自定義隨機(jī)生成訪問(wèn)序列的長(zhǎng)度 scanf("%d",&pn); srand(r
6、and(); /初始化隨機(jī)數(shù)隊(duì)列的"種子"s=(float) rand() / 32767) * 50 + pn; / 隨機(jī)產(chǎn)生頁(yè)面序列長(zhǎng)度pf_info.total_pn = s;for(i=0;i<s;i+) /產(chǎn)生隨機(jī)訪問(wèn)序列 pf_info.seriali=(float) rand() / 32767) * 16 ; /隨機(jī)數(shù)的大小在0-15之間 / 顯示當(dāng)前狀態(tài)及缺頁(yè)情況void displayinfo(void) int i,n; if(vpoint=0) printf("n=頁(yè)面訪問(wèn)序列=n"); for(i=0; i<pf_i
7、nfo.total_pn; i+) printf("%4d",pf_info.seriali); if (i+1) % 10 =0) printf("n"); /每行顯示10個(gè) printf("n=n"); printf("訪問(wèn)%3d : 內(nèi)存<",pf_info.serialvpoint); for(n=0;n<pf_info.total_pf;n+) / 頁(yè)框信息 if (pageframen >=0) printf("%3d",pageframen); else prin
8、tf(" "); printf(" >"); if(inpflag=1) /缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺頁(yè) printf(" =>缺頁(yè) "); printf("缺頁(yè)率%3.1f",(float)(pf_info.diseffect)*100.00/vpoint); printf("n"); / 查找頁(yè)面是否在內(nèi)存,1為在內(nèi)存,0為不在即缺頁(yè)int findpage(int page) int n; for(n=0;n<pf_info.total_pf;n+) pagehisto
9、ryn +; / 訪問(wèn)歷史加1for(n=0;n<pf_info.total_pf;n+) if (pageframen=page ) inpflag=0 ; /inpflag缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺頁(yè) pagehistoryn=0; /置訪問(wèn)歷史為0 return 1; inpflag=1; /頁(yè)面不存在,缺頁(yè) return 0; / FIFO頁(yè)面置換算法void fifo(void) int n,count,pstate; rpoint=0; / 頁(yè)面替換指針初始化為0 invalidcount = 0; / 缺頁(yè)數(shù)初始化為0 createps(); / 隨機(jī)生成訪問(wèn)序列 cou
10、nt=0; / 是否裝滿是所有的頁(yè)框 for(n=0;n<pf_info.total_pf;n+) / 清除頁(yè)框信息 pageframen=-1; inpflag=0; /缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺頁(yè) for(vpoint=0;vpoint<pf_info.total_pn;vpoint+) / 執(zhí)行算法 pstate=findpage(pf_info.serialvpoint); /查找頁(yè)面是否在內(nèi)存 if(count<pf_info.total_pf) / 開(kāi)始時(shí)不計(jì)算缺頁(yè) if(pstate=0) / 頁(yè)不存在則裝入頁(yè)面 pageframerpoint=pf_info
11、.serialvpoint;rpoint=(rpoint+1) % pf_info.total_pf;count+; else / 正常缺頁(yè)置換 if(pstate=0) / 頁(yè)不存在則置換頁(yè)面 pageframerpoint=pf_info.serialvpoint;rpoint=(rpoint+1) % pf_info.total_pf;pf_info.diseffect+; / 缺頁(yè)次數(shù)加1 Sleep(10); displayinfo(); / 顯示當(dāng)前狀態(tài) / 置換算法循環(huán)結(jié)束 getch(); return;/ LRU頁(yè)面置換算法void lru(void) int n,count
12、,pstate,max; rpoint=0; / 頁(yè)面替換指針 invalidcount = 0; / 缺頁(yè)次數(shù)初始化為0 createps(); / 隨機(jī)生成訪問(wèn)序列 count=0; / 是否裝滿所有的頁(yè)框 for(n=0;n<pf_info.total_pf;n+) pageframen=-1; / 清除頁(yè)框信息 pagehistoryn=0; / 清除頁(yè)框歷史 inpflag=0; /缺頁(yè)標(biāo)志,0為不缺頁(yè),1為缺頁(yè) for(vpoint=0;vpoint<pf_info.total_pn;vpoint+) / 執(zhí)行算法 pstate=findpage(pf_info.ser
13、ialvpoint); /查找頁(yè)面是否在內(nèi)存 if(count<pf_info.total_pf) / 開(kāi)始時(shí)不計(jì)算缺頁(yè) if(pstate=0) / 頁(yè)不存在則裝入頁(yè)面 pageframerpoint=pf_info.serialvpoint; /把要調(diào)入的頁(yè)面放入一個(gè)空的頁(yè)框里rpoint=(rpoint+1) % pf_info.total_pf;count+; else / 正常缺頁(yè)置換 if(pstate=0)/ 頁(yè)不存在則置換頁(yè)面 max=0; for(n=1;n<pf_info.total_pf;n+) if(pagehistoryn>pagehistoryma
14、x) max=n; rpoint=max; pageframerpoint=pf_info.serialvpoint; pagehistoryrpoint=0; pf_info.diseffect+; / 缺頁(yè)次數(shù)加1 Sleep(10); displayinfo(); / 顯示當(dāng)前狀態(tài) / 置換算法循環(huán)結(jié)束 _getch(); return; /最佳置換算法 自己完成/ 主函數(shù)int main() char ch; system("cls") ; while ( true ) printf("*n"); printf(" 若要執(zhí)行FIFO頁(yè)面
15、置算法請(qǐng)按1n");printf(" 若要執(zhí)行LRU 頁(yè)面置算法請(qǐng)按2n"); printf(" 若要退出請(qǐng)按3n") ; printf("*n"); printf( "Enter your choice (1 or 2 or 3): "); do /如果輸入信息不正確,繼續(xù)輸入 ch = (char)getch() ;while(ch != '1' && ch != '2'&& ch != '3'); printf("nn你按的是:%c ,現(xiàn)在為你執(zhí)行對(duì)應(yīng)操作。",ch); if(ch = '3') /選
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版委托貸款合同(購(gòu)車貸款)3篇
- 2025版民間借貸合同文本四種借款人法律義務(wù)解讀4篇
- 商鋪售后返租合同風(fēng)險(xiǎn)評(píng)估與法律建議(2025年版)2篇
- 2025年度龍山區(qū)中醫(yī)院醫(yī)療廢物處理技術(shù)改造合同4篇
- 二零二五年度實(shí)木復(fù)合地板品牌代理銷售合同4篇
- 2025年物業(yè)管理責(zé)任服務(wù)協(xié)議書(shū)(含物業(yè)合同續(xù)簽)3篇
- 體育場(chǎng)館體育賽事現(xiàn)場(chǎng)安全保衛(wèi)措施與體系建設(shè)改進(jìn)考核試卷
- 體育用品行業(yè)創(chuàng)新商業(yè)模式探索考核試卷
- 2025年農(nóng)村地房產(chǎn)租賃土地租賃協(xié)議
- 2025年度木材加工與木工安裝服務(wù)承包合同4篇
- 土地買賣合同參考模板
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 房地產(chǎn)運(yùn)營(yíng)管理:提升項(xiàng)目品質(zhì)
- 自愿斷絕父子關(guān)系協(xié)議書(shū)電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語(yǔ)閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補(bǔ)類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊(cè)課件【完整版】
評(píng)論
0/150
提交評(píng)論