版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上防災(zāi)科技學(xué)院實(shí)驗(yàn)報(bào)告系別災(zāi)害信息工程系專業(yè)班級(jí)學(xué)號(hào)學(xué)生姓名鄭平貞實(shí)驗(yàn)日期2011-12-8成績(jī)課程名稱計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)題目虛擬存儲(chǔ)器管理實(shí)驗(yàn)記錄實(shí)驗(yàn)?zāi)康模? 理解虛擬存儲(chǔ)器的概念2 掌握分頁(yè)式存儲(chǔ)管理地址轉(zhuǎn)換和缺頁(yè)中斷實(shí)驗(yàn)環(huán)境:Windows XP VC+6.0實(shí)驗(yàn)內(nèi)容:1 模擬分頁(yè)式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁(yè)中斷2 用先進(jìn)先出頁(yè)面調(diào)度算法處理缺頁(yè)中斷實(shí)驗(yàn)過(guò)程:1.實(shí)驗(yàn)設(shè)計(jì)(1)模擬分頁(yè)式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁(yè)中斷。分頁(yè)式虛擬存儲(chǔ)系統(tǒng)是把作業(yè)信息的副本存放在磁盤上,當(dāng)作業(yè)被選中時(shí),可把作業(yè)的開(kāi)始幾頁(yè)先裝入主存且啟動(dòng)執(zhí)行。為此,在為作業(yè)建立頁(yè)表時(shí),
2、應(yīng)說(shuō)明哪些頁(yè)已在主存,哪些頁(yè)尚未裝入主存。作業(yè)執(zhí)行時(shí),指令中的邏輯地址指出了參加運(yùn)算的操作存放的頁(yè)號(hào)和單元號(hào),硬件的地址轉(zhuǎn)換機(jī)構(gòu)按頁(yè)號(hào)查頁(yè)表,若該頁(yè)對(duì)應(yīng)標(biāo)志為“1”,則表示該頁(yè)已在主存,這時(shí)根據(jù)關(guān)系式“絕對(duì)地址=塊號(hào)×塊長(zhǎng)+單元號(hào)”計(jì)算出欲訪問(wèn)的主存單元地址。如果塊長(zhǎng)為2 的冪次,則可把塊號(hào)作為高地址部分,把單元號(hào)作為低地址部分,兩者拼接而成絕對(duì)地址。若訪問(wèn)的頁(yè)對(duì)應(yīng)標(biāo)志為“0”,則表示該頁(yè)不在主存,這時(shí)硬件發(fā)“缺頁(yè)中斷”信號(hào),有操作系統(tǒng)按該頁(yè)在磁盤上的位置,把該頁(yè)信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。設(shè)計(jì)一個(gè)“地址轉(zhuǎn)換”程序來(lái)模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問(wèn)的頁(yè)在主存時(shí),則形成絕
3、對(duì)地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來(lái)代替一條指令的執(zhí)行。當(dāng)訪問(wèn)的頁(yè)不在主存時(shí),則輸出“* 該頁(yè)頁(yè)號(hào)”,表示產(chǎn)生了一次缺頁(yè)中斷。(2)用先進(jìn)先出(FIFO)頁(yè)面調(diào)度算法處理缺頁(yè)中斷。FIFO 頁(yè)面調(diào)度算法總是淘汰該作業(yè)中最先進(jìn)入主存的那一頁(yè),因此可以用一個(gè)數(shù)組來(lái)表示該作業(yè)已在主存的頁(yè)面。假定作業(yè)被選中時(shí),把開(kāi)始的m 個(gè)頁(yè)面裝入主存,則數(shù)組的元素可定為m 個(gè)。2.程序代碼:(1) 模擬分頁(yè)式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁(yè)中斷。#include <cstdio>#include <cstring>#define SizeOfPage 100#define
4、SizeOfBlock 128#define M 4struct info/頁(yè)表bool flag; /標(biāo)志long block;/塊號(hào)long disk;/在磁盤上的位置bool dirty;/修改標(biāo)志pagelistSizeOfPage;long po;/隊(duì)列標(biāo)記long PM;void init_ex1()memset(pagelist,0,sizeof(pagelist);pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;pagelist1.disk=012;
5、pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex1()bool stop=0;long p,q;char s128;doprintf("請(qǐng)輸入指令的頁(yè)號(hào)和單元號(hào):n");if (scanf("%ld%ld",&p,&q)!=2)scanf("%s",s);if (strcmp(s,"exit")=0)stop=
6、1;elseif (pagelistp.flag)printf("絕對(duì)地址=%ldn",pagelistp.block*SizeOfBlock+q);elseprintf("* %ldn",p);while (!stop);void init_ex2()po=0;P0=0;P1=1;P2=2;P3=3;memset(pagelist,0,sizeof(pagelist);pagelist0.flag=1;pagelist0.block=5;pagelist0.disk=011;pagelist1.flag=1;pagelist1.block=8;page
7、list1.disk=012;pagelist2.flag=1;pagelist2.block=9;pagelist2.disk=013;pagelist3.flag=1;pagelist3.block=1;pagelist3.disk=021;void work_ex2()long p,q,i;char s100;bool stop=0;doprintf("請(qǐng)輸入指令的頁(yè)號(hào)、單元號(hào),以及是否為存指令:n");if (scanf("%ld%ld",&p,&q)!=2)scanf("%s",s);if (strcmp(s
8、,"exit")=0)stop=1;elsescanf("%s",s);if (pagelistp.flag)printf("絕對(duì)地址=%ldn",pagelistp.block*SizeOfBlock+q);if (s0='Y' | s0='y')pagelistp.dirty=1;elseif (pagelistPpo.dirty)/將更新后的內(nèi)容寫(xiě)回外存pagelistPpo.dirty=0;pagelistPpo.flag=0;printf("out %ldn",Ppo);p
9、rintf("in %ldn",p);pagelistp.block=pagelistPpo.block;pagelistp.flag=1;Ppo=p;po=(po+1)%M;while (!stop);printf("數(shù)組P 的值為:n");for (i=0;i<M;i+)printf("P%ld=%ldn",i,Pi);void select()long se;char s128;doprintf("請(qǐng)選擇題號(hào)(1/2):");if (scanf("%ld",&se)!=1)s
10、canf("%s",s);if (strcmp(s,"exit")=0)return;elseif (se=1)init_ex1();work_ex1();if (se=2)init_ex2();work_ex2();while (1);int main()select();return 0;(2) 用先進(jìn)先出(FIFO)頁(yè)面調(diào)度算法處理缺頁(yè)中斷。#include <iostream.h> #include <iomanip.h> #include <ctype.h> /頁(yè)表用數(shù)組模擬,在實(shí)驗(yàn)中頁(yè)表數(shù)據(jù)結(jié)構(gòu)定義為: #
11、define N 32 /實(shí)驗(yàn)中假定的頁(yè)表長(zhǎng)度,頁(yè)表的長(zhǎng)度實(shí)際上是由系統(tǒng)按照作業(yè)長(zhǎng)度決定的 #define M 4 /實(shí)驗(yàn)中用,用固定局部置換算法給每個(gè)進(jìn)程分配的主存物理塊數(shù) struct int lnumber; /頁(yè)號(hào) int flag; /表示該頁(yè)是否在主存,"1"表示在主存,"0"表示不在主存 int pnumber; /該頁(yè)所在主存塊的塊號(hào) int write; /該頁(yè)是否被修改過(guò),"1"表示修改過(guò),"0"表示沒(méi)有修改過(guò) int dnumber; /該頁(yè)存放在磁盤上的位置,即磁盤塊號(hào) pageN; /頁(yè)表
12、定義 int pM; /用數(shù)組模擬FIFO算法中的隊(duì)列(使用循環(huán)隊(duì)列) int head; void initial(void); /初始化 int do_mmap(int); /模擬地址轉(zhuǎn)換 void do_page_fault(int); /缺頁(yè)中斷處理程序 void run_first_instructon(int); /執(zhí)行進(jìn)程的第一條指令 void run_a_instruction(int); /CPU執(zhí)行一條指令 void print_page_and_fifoqueue(void); /輸出頁(yè)表和FIFO隊(duì)列 main() int laddress, paddress; /邏輯
13、地址,物理地址 int lnumber, ad, pnumber; /頁(yè)號(hào),頁(yè)內(nèi)地址和物理塊號(hào) initial(); /手工初始化頁(yè)表 print_page_and_fifoqueue(); /輸出頁(yè)表和FIFO隊(duì)列 run_first_instructon(0x0000); /運(yùn)行進(jìn)程的第一條指令的地址 /輸入下一條指令的地址 cout<<"輸入下一條指令的邏輯地址(032767)(-1 to end)"<<endl; cin>>laddress; while(laddress>32767) /輸入正確性檢測(cè) cout<&l
14、t;"Enter ERORR! 請(qǐng)重新輸入下一條指令的邏輯地址(032767)(-1 to end)"<<endl; cin>>laddress; while(laddress!=-1) /還有指令要執(zhí)行 lnumber=laddress>>10; /取邏輯地址的頁(yè)號(hào)lnumber if(pagelnumber.flag=1) /指令所在的頁(yè)面已裝入在內(nèi)存中 paddress=do_mmap(laddress); /形成物理地址 cout<<paddress<<"輸出轉(zhuǎn)換后的物理地址"<&
15、lt;endl; run_a_instruction(paddress); /CPU根據(jù)得到的物理地址去執(zhí)行指令 cout<<"此指令執(zhí)行是否修改所在頁(yè)面lnumber="<<lnumber<<"(y/n?) " char change; cin>>change; if(tolower(change)='y') pagelnumber.write=1; /若頁(yè)面要已修改,則將此頁(yè)面修改位置1 print_page_and_fifoqueue(); else /缺頁(yè)中斷 cout<<
16、;lnumber<<"輸出該頁(yè)的頁(yè)號(hào)表示硬件產(chǎn)生缺頁(yè)中斷"<<endl; do_page_fault(lnumber); /直接轉(zhuǎn)去缺頁(yè)中斷處理 continue; /本循環(huán)結(jié)束,重新執(zhí)行指令 cout<<"輸入下一條指令的邏輯地址(032767),-1 to end.n" cin>>laddress; while(laddress>32767) /輸入正確性檢測(cè) cout<<"Enter ERORR! 請(qǐng)重新輸入下一條指令的邏輯地址(032767)(-1 to end)&quo
17、t;<<endl; cin>>laddress; cout<<"祝賀,進(jìn)程運(yùn)行結(jié)束!"<<endl; system("PAUSE"); return 0; /手工初始化頁(yè)表和pM隊(duì)列 void initial(void) int i; for(i=0; i=31; i+) pagei.lnumber=i; if(i=M-1) /預(yù)裝入算法初始化頁(yè)表的前四項(xiàng) cout<<"輸入頁(yè)號(hào)為 "<<i<<" 所在內(nèi)存的物理塊號(hào)(預(yù)裝入前四個(gè)頁(yè)面):&q
18、uot; cin>>pagei.pnumber; pagei.flag=1; /存在標(biāo)志置1 /初始化FIFO的隊(duì)列 head=0; for(i=0; i=M-1; i+) pi=i; /輸出頁(yè)表和FIFO隊(duì)列 void print_page_and_fifoqueue(void) int i; cout<<"Print the page table.n" cout<<setw(10)<<"lnumber"<<setw(9)<<"flag"<<setw
19、(10)<<"pnumber" <<setw(10)<<"write"<<setw(10)<<"dnumber"<<endl; for(i=0; i=N-1; i+) cout<<setw(7)<<pagei.lnumber<<setw(10)<<pagei.flag<<setw(10)<<pagei.pnumber <<setw(10)<<pagei.write<
20、;<setw(10)<<pagei.dnumber<<endl; cout<<"Print the FIFO queue.n" cout<<setw(10)<<"NO"<<setw(40)<<"page(已在主存的頁(yè)號(hào)lnumber)n" cout<<"head="<<head<<endl; for(i=0; i=M-1;i+) cout<<setw(10)<<i&l
21、t;<setw(15)<<pi<<endl; /模擬地址轉(zhuǎn)換 int do_mmap(int laddress) int lnumber, ad, pnumber, paddress; lnumber=laddress>>10; /取邏輯地址的頁(yè)號(hào)lnumber ad=laddress&0x3ff; /頁(yè)內(nèi)地址 pnumber=pagelnumber.pnumber; /從頁(yè)表中取得塊號(hào)pnumber paddress=pnumber<<10|ad; return paddress; /CPU執(zhí)行一條指令,輸出物理地址表示指令執(zhí)行完
22、成 void run_a_instruction(int paddress) cout<<paddress<<" 輸出物理地址表示指令執(zhí)行完成"<<endl; /執(zhí)行進(jìn)程的第一條指令 void run_first_instructon(int laddress) int lnumber, ad, pnumber, paddress; lnumber=laddress>>10; /取邏輯地址的頁(yè)號(hào) if(pagelnumber.flag=1) /由于式預(yù)裝入方式,所以第一條指令所在的頁(yè)面肯定在內(nèi)存中 paddress=do_mm
23、ap(laddress); /形成物理地址 cout<<paddress<<"輸出轉(zhuǎn)換后的物理地址"<<endl; run_a_instruction(paddress); cout<<"此指令執(zhí)行(0x0000)是否修改所在頁(yè)面lnumber="<<lnumber<<"(y/n?) " char change; cin>>change; if(tolower(change)='y') /若指令執(zhí)行完時(shí)修改了頁(yè)面,則置write標(biāo)志位位1 pagelnumber.write=1; print_page_and_fifoqueue(); cout<<"*第一條指令執(zhí)行完成(地址為0x0000)*"<<endl; /頁(yè)面寫(xiě)回磁盤 void write_to_harddisk(int j) cout<<j<<"輸出已修改的淘汰的頁(yè)號(hào)表示該頁(yè)寫(xiě)回了磁盤&q
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)畢業(yè)生實(shí)習(xí)自我鑒定(合集15篇)
- 2024年渣土運(yùn)輸行業(yè)合作合同樣本
- 教師個(gè)人年終述職報(bào)告合集15篇
- 《淘氣包馬小跳》讀后感15篇
- 英文感謝信模板集合7篇
- 2024-2025學(xué)年高中歷史 第四單元 雅爾塔體系下的冷戰(zhàn)與和平 第3課 美蘇爭(zhēng)霸教學(xué)教學(xué)實(shí)錄2 新人教版選修3
- 個(gè)人年度的工作計(jì)劃
- 二年級(jí)體育上冊(cè) 2.36游戲活動(dòng)和立定跳遠(yuǎn)測(cè)試教學(xué)實(shí)錄
- 九年級(jí)化學(xué)上冊(cè) 第四章 生命之源-水4.4《化學(xué)方程式》教學(xué)實(shí)錄(新版)粵教版
- 心理專業(yè)名詞解釋
- 錨索張拉伸長(zhǎng)量計(jì)算
- 部編版語(yǔ)文九年級(jí)上冊(cè)單元復(fù)習(xí)課教案
- 孕酮檢驗(yàn)報(bào)告
- 2024年度醫(yī)院皮膚科醫(yī)務(wù)人員績(jī)效述職統(tǒng)計(jì)報(bào)告課件
- 《成本費(fèi)用控制》課件
- 醫(yī)院消防培訓(xùn)方案
- 【人教部編版語(yǔ)文六年級(jí)上冊(cè)】選擇題專項(xiàng)練習(xí)復(fù)習(xí)(100道題后附答案)
- 外科醫(yī)學(xué)教學(xué)設(shè)計(jì)
- 創(chuàng)辦臺(tái)球廳的計(jì)劃書(shū)
- 廣東省廣州市越秀區(qū)2022-2023學(xué)年八年級(jí)上學(xué)期期末物理試卷
- 統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)《期末作文專項(xiàng)復(fù)習(xí)》 課件
評(píng)論
0/150
提交評(píng)論