版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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ī)操作系統(tǒng)實(shí)驗(yàn)題目虛擬存儲(chǔ)器管理實(shí)驗(yàn)記錄實(shí)驗(yàn)?zāi)康模? 理解虛擬存儲(chǔ)器的概念2 掌握分頁式存儲(chǔ)管理地址轉(zhuǎn)換和缺頁中斷實(shí)驗(yàn)環(huán)境:Windows XP VC+6.0實(shí)驗(yàn)內(nèi)容:1 模擬分頁式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷2 用先進(jìn)先出頁面調(diào)度算法處理缺頁中斷實(shí)驗(yàn)過程:1.實(shí)驗(yàn)設(shè)計(jì)(1)模擬分頁式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷。分頁式虛擬存儲(chǔ)系統(tǒng)是把作業(yè)信息的副本存放在磁盤上,當(dāng)作業(yè)被選中時(shí),可把作業(yè)的開始幾頁先裝入主存且啟動(dòng)執(zhí)行。為此,在為作業(yè)建立頁表時(shí),
2、應(yīng)說明哪些頁已在主存,哪些頁尚未裝入主存。作業(yè)執(zhí)行時(shí),指令中的邏輯地址指出了參加運(yùn)算的操作存放的頁號(hào)和單元號(hào),硬件的地址轉(zhuǎn)換機(jī)構(gòu)按頁號(hào)查頁表,若該頁對應(yīng)標(biāo)志為“1”,則表示該頁已在主存,這時(shí)根據(jù)關(guān)系式“絕對地址=塊號(hào)×塊長+單元號(hào)”計(jì)算出欲訪問的主存單元地址。如果塊長為2 的冪次,則可把塊號(hào)作為高地址部分,把單元號(hào)作為低地址部分,兩者拼接而成絕對地址。若訪問的頁對應(yīng)標(biāo)志為“0”,則表示該頁不在主存,這時(shí)硬件發(fā)“缺頁中斷”信號(hào),有操作系統(tǒng)按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。設(shè)計(jì)一個(gè)“地址轉(zhuǎn)換”程序來模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問的頁在主存時(shí),則形成絕
3、對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的執(zhí)行。當(dāng)訪問的頁不在主存時(shí),則輸出“* 該頁頁號(hào)”,表示產(chǎn)生了一次缺頁中斷。(2)用先進(jìn)先出(FIFO)頁面調(diào)度算法處理缺頁中斷。FIFO 頁面調(diào)度算法總是淘汰該作業(yè)中最先進(jìn)入主存的那一頁,因此可以用一個(gè)數(shù)組來表示該作業(yè)已在主存的頁面。假定作業(yè)被選中時(shí),把開始的m 個(gè)頁面裝入主存,則數(shù)組的元素可定為m 個(gè)。2.程序代碼:(1) 模擬分頁式存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷。#include <cstdio>#include <cstring>#define SizeOfPage 100#define
4、SizeOfBlock 128#define M 4struct info/頁表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("請輸入指令的頁號(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("絕對地址=%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("請輸入指令的頁號(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("絕對地址=%ldn",pagelistp.block*SizeOfBlock+q);if (s0='Y' | s0='y')pagelistp.dirty=1;elseif (pagelistPpo.dirty)/將更新后的內(nèi)容寫回外存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("請選擇題號(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)頁面調(diào)度算法處理缺頁中斷。#include <iostream.h> #include <iomanip.h> #include <ctype.h> /頁表用數(shù)組模擬,在實(shí)驗(yàn)中頁表數(shù)據(jù)結(jié)構(gòu)定義為: #
11、define N 32 /實(shí)驗(yàn)中假定的頁表長度,頁表的長度實(shí)際上是由系統(tǒng)按照作業(yè)長度決定的 #define M 4 /實(shí)驗(yàn)中用,用固定局部置換算法給每個(gè)進(jìn)程分配的主存物理塊數(shù) struct int lnumber; /頁號(hào) int flag; /表示該頁是否在主存,"1"表示在主存,"0"表示不在主存 int pnumber; /該頁所在主存塊的塊號(hào) int write; /該頁是否被修改過,"1"表示修改過,"0"表示沒有修改過 int dnumber; /該頁存放在磁盤上的位置,即磁盤塊號(hào) pageN; /頁表
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); /缺頁中斷處理程序 void run_first_instructon(int); /執(zhí)行進(jìn)程的第一條指令 void run_a_instruction(int); /CPU執(zhí)行一條指令 void print_page_and_fifoqueue(void); /輸出頁表和FIFO隊(duì)列 main() int laddress, paddress; /邏輯
13、地址,物理地址 int lnumber, ad, pnumber; /頁號(hào),頁內(nèi)地址和物理塊號(hào) initial(); /手工初始化頁表 print_page_and_fifoqueue(); /輸出頁表和FIFO隊(duì)列 run_first_instructon(0x0000); /運(yùn)行進(jìn)程的第一條指令的地址 /輸入下一條指令的地址 cout<<"輸入下一條指令的邏輯地址(032767)(-1 to end)"<<endl; cin>>laddress; while(laddress>32767) /輸入正確性檢測 cout<&l
14、t;"Enter ERORR! 請重新輸入下一條指令的邏輯地址(032767)(-1 to end)"<<endl; cin>>laddress; while(laddress!=-1) /還有指令要執(zhí)行 lnumber=laddress>>10; /取邏輯地址的頁號(hào)lnumber if(pagelnumber.flag=1) /指令所在的頁面已裝入在內(nèi)存中 paddress=do_mmap(laddress); /形成物理地址 cout<<paddress<<"輸出轉(zhuǎn)換后的物理地址"<&
15、lt;endl; run_a_instruction(paddress); /CPU根據(jù)得到的物理地址去執(zhí)行指令 cout<<"此指令執(zhí)行是否修改所在頁面lnumber="<<lnumber<<"(y/n?) " char change; cin>>change; if(tolower(change)='y') pagelnumber.write=1; /若頁面要已修改,則將此頁面修改位置1 print_page_and_fifoqueue(); else /缺頁中斷 cout<<
16、;lnumber<<"輸出該頁的頁號(hào)表示硬件產(chǎn)生缺頁中斷"<<endl; do_page_fault(lnumber); /直接轉(zhuǎn)去缺頁中斷處理 continue; /本循環(huán)結(jié)束,重新執(zhí)行指令 cout<<"輸入下一條指令的邏輯地址(032767),-1 to end.n" cin>>laddress; while(laddress>32767) /輸入正確性檢測 cout<<"Enter ERORR! 請重新輸入下一條指令的邏輯地址(032767)(-1 to end)&quo
17、t;<<endl; cin>>laddress; cout<<"祝賀,進(jìn)程運(yùn)行結(jié)束!"<<endl; system("PAUSE"); return 0; /手工初始化頁表和pM隊(duì)列 void initial(void) int i; for(i=0; i=31; i+) pagei.lnumber=i; if(i=M-1) /預(yù)裝入算法初始化頁表的前四項(xiàng) cout<<"輸入頁號(hào)為 "<<i<<" 所在內(nèi)存的物理塊號(hào)(預(yù)裝入前四個(gè)頁面):&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; /輸出頁表和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(已在主存的頁號(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; /取邏輯地址的頁號(hào)lnumber ad=laddress&0x3ff; /頁內(nèi)地址 pnumber=pagelnumber.pnumber; /從頁表中取得塊號(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; /取邏輯地址的頁號(hào) if(pagelnumber.flag=1) /由于式預(yù)裝入方式,所以第一條指令所在的頁面肯定在內(nèi)存中 paddress=do_mm
23、ap(laddress); /形成物理地址 cout<<paddress<<"輸出轉(zhuǎn)換后的物理地址"<<endl; run_a_instruction(paddress); cout<<"此指令執(zhí)行(0x0000)是否修改所在頁面lnumber="<<lnumber<<"(y/n?) " char change; cin>>change; if(tolower(change)='y') /若指令執(zhí)行完時(shí)修改了頁面,則置write標(biāo)志位位1 pagelnumber.write=1; print_page_and_fifoqueue(); cout<<"*第一條指令執(zhí)行完成(地址為0x0000)*"<<endl; /頁面寫回磁盤 void write_to_harddisk(int j) cout<<j<<"輸出已修改的淘汰的頁號(hào)表示該頁寫回了磁盤&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)生活化教學(xué)在培養(yǎng)學(xué)生創(chuàng)新能力中的角色研究
- 家庭辦公環(huán)境下的理財(cái)與消費(fèi)習(xí)慣
- 小學(xué)數(shù)學(xué)教育中的情感教育與德育融合
- 2025年與小貸公司協(xié)議(2篇)
- 安全出口指示標(biāo)志的維護(hù)與更新策略
- 2025年10月輔導(dǎo)員個(gè)人總結(jié)范例(二篇)
- 教育技術(shù)對初中生物實(shí)驗(yàn)教學(xué)的影響與啟示
- 2025年“禮儀延邊”主題實(shí)踐月活動(dòng)總結(jié)范例(三篇)
- 教育行業(yè)中的突發(fā)醫(yī)療事件應(yīng)急處理
- 2025年上半年工作總結(jié)與計(jì)劃(3篇)
- 公共交通乘客投訴管理制度
- 不銹鋼伸縮縫安裝施工合同
- 水土保持監(jiān)理總結(jié)報(bào)告
- Android移動(dòng)開發(fā)基礎(chǔ)案例教程(第2版)完整全套教學(xué)課件
- 醫(yī)保DRGDIP付費(fèi)基礎(chǔ)知識(shí)醫(yī)院內(nèi)培訓(xùn)課件
- 專題12 工藝流程綜合題- 三年(2022-2024)高考化學(xué)真題分類匯編(全國版)
- DB32T-經(jīng)成人中心靜脈通路裝置采血技術(shù)規(guī)范
- 【高空拋物侵權(quán)責(zé)任規(guī)定存在的問題及優(yōu)化建議7100字(論文)】
- TDALN 033-2024 學(xué)生飲用奶安全規(guī)范入校管理標(biāo)準(zhǔn)
- 物流無人機(jī)垂直起降場選址與建設(shè)規(guī)范
- 冷庫存儲(chǔ)合同協(xié)議書范本
評(píng)論
0/150
提交評(píng)論