版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上防災(zāi)科技學(xué)院實驗報告系別災(zāi)害信息工程系專業(yè)班級學(xué)號學(xué)生姓名鄭平貞實驗日期2011-12-8成績課程名稱計算機操作系統(tǒng)實驗題目虛擬存儲器管理實驗記錄實驗?zāi)康模? 理解虛擬存儲器的概念2 掌握分頁式存儲管理地址轉(zhuǎn)換和缺頁中斷實驗環(huán)境:Windows XP VC+6.0實驗內(nèi)容:1 模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷2 用先進先出頁面調(diào)度算法處理缺頁中斷實驗過程:1.實驗設(shè)計(1)模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷。分頁式虛擬存儲系統(tǒng)是把作業(yè)信息的副本存放在磁盤上,當(dāng)作業(yè)被選中時,可把作業(yè)的開始幾頁先裝入主存且啟動執(zhí)行。為此,在為作業(yè)建立頁表時,
2、應(yīng)說明哪些頁已在主存,哪些頁尚未裝入主存。作業(yè)執(zhí)行時,指令中的邏輯地址指出了參加運算的操作存放的頁號和單元號,硬件的地址轉(zhuǎn)換機構(gòu)按頁號查頁表,若該頁對應(yīng)標(biāo)志為“1”,則表示該頁已在主存,這時根據(jù)關(guān)系式“絕對地址=塊號×塊長+單元號”計算出欲訪問的主存單元地址。如果塊長為2 的冪次,則可把塊號作為高地址部分,把單元號作為低地址部分,兩者拼接而成絕對地址。若訪問的頁對應(yīng)標(biāo)志為“0”,則表示該頁不在主存,這時硬件發(fā)“缺頁中斷”信號,有操作系統(tǒng)按該頁在磁盤上的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。設(shè)計一個“地址轉(zhuǎn)換”程序來模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問的頁在主存時,則形成絕
3、對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的執(zhí)行。當(dāng)訪問的頁不在主存時,則輸出“* 該頁頁號”,表示產(chǎn)生了一次缺頁中斷。(2)用先進先出(FIFO)頁面調(diào)度算法處理缺頁中斷。FIFO 頁面調(diào)度算法總是淘汰該作業(yè)中最先進入主存的那一頁,因此可以用一個數(shù)組來表示該作業(yè)已在主存的頁面。假定作業(yè)被選中時,把開始的m 個頁面裝入主存,則數(shù)組的元素可定為m 個。2.程序代碼:(1) 模擬分頁式存儲管理中硬件的地址轉(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;/塊號long disk;/在磁盤上的位置bool dirty;/修改標(biāo)志pagelistSizeOfPage;long po;/隊列標(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("請輸入指令的頁號和單元號: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("請輸入指令的頁號、單元號,以及是否為存指令: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("請選擇題號(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) 用先進先出(FIFO)頁面調(diào)度算法處理缺頁中斷。#include <iostream.h> #include <iomanip.h> #include <ctype.h> /頁表用數(shù)組模擬,在實驗中頁表數(shù)據(jù)結(jié)構(gòu)定義為: #
11、define N 32 /實驗中假定的頁表長度,頁表的長度實際上是由系統(tǒng)按照作業(yè)長度決定的 #define M 4 /實驗中用,用固定局部置換算法給每個進程分配的主存物理塊數(shù) struct int lnumber; /頁號 int flag; /表示該頁是否在主存,"1"表示在主存,"0"表示不在主存 int pnumber; /該頁所在主存塊的塊號 int write; /該頁是否被修改過,"1"表示修改過,"0"表示沒有修改過 int dnumber; /該頁存放在磁盤上的位置,即磁盤塊號 pageN; /頁表
12、定義 int pM; /用數(shù)組模擬FIFO算法中的隊列(使用循環(huán)隊列) int head; void initial(void); /初始化 int do_mmap(int); /模擬地址轉(zhuǎn)換 void do_page_fault(int); /缺頁中斷處理程序 void run_first_instructon(int); /執(zhí)行進程的第一條指令 void run_a_instruction(int); /CPU執(zhí)行一條指令 void print_page_and_fifoqueue(void); /輸出頁表和FIFO隊列 main() int laddress, paddress; /邏輯
13、地址,物理地址 int lnumber, ad, pnumber; /頁號,頁內(nèi)地址和物理塊號 initial(); /手工初始化頁表 print_page_and_fifoqueue(); /輸出頁表和FIFO隊列 run_first_instructon(0x0000); /運行進程的第一條指令的地址 /輸入下一條指令的地址 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; /取邏輯地址的頁號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<<"輸出該頁的頁號表示硬件產(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<<"祝賀,進程運行結(jié)束!"<<endl; system("PAUSE"); return 0; /手工初始化頁表和pM隊列 void initial(void) int i; for(i=0; i=31; i+) pagei.lnumber=i; if(i=M-1) /預(yù)裝入算法初始化頁表的前四項 cout<<"輸入頁號為 "<<i<<" 所在內(nèi)存的物理塊號(預(yù)裝入前四個頁面):&q
18、uot; cin>>pagei.pnumber; pagei.flag=1; /存在標(biāo)志置1 /初始化FIFO的隊列 head=0; for(i=0; i=M-1; i+) pi=i; /輸出頁表和FIFO隊列 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(已在主存的頁號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; /取邏輯地址的頁號lnumber ad=laddress&0x3ff; /頁內(nèi)地址 pnumber=pagelnumber.pnumber; /從頁表中取得塊號pnumber paddress=pnumber<<10|ad; return paddress; /CPU執(zhí)行一條指令,輸出物理地址表示指令執(zhí)行完
22、成 void run_a_instruction(int paddress) cout<<paddress<<" 輸出物理地址表示指令執(zhí)行完成"<<endl; /執(zhí)行進程的第一條指令 void run_first_instructon(int laddress) int lnumber, ad, pnumber, paddress; lnumber=laddress>>10; /取邏輯地址的頁號 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í)行完時修改了頁面,則置write標(biāo)志位位1 pagelnumber.write=1; print_page_and_fifoqueue(); cout<<"*第一條指令執(zhí)行完成(地址為0x0000)*"<<endl; /頁面寫回磁盤 void write_to_harddisk(int j) cout<<j<<"輸出已修改的淘汰的頁號表示該頁寫回了磁盤&q
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第四課 云計算 說課稿 2024-2025學(xué)年西交大版(2024)初中信息技術(shù)七年級上冊
- 全國青島版信息技術(shù)八年級下冊專題青春歲月紀(jì)念冊第12課一、《添加動畫效果》說課稿
- 比的應(yīng)用(說課稿)-2024-2025學(xué)年數(shù)學(xué)六年級上冊北師大版
- 珠海廣東珠海萬山海洋開發(fā)試驗區(qū)發(fā)展改革和政策研究局招聘合同制職員筆試歷年典型考點(頻考版試卷)附帶答案詳解
- 2025年度風(fēng)力發(fā)電站混凝土基礎(chǔ)與塔筒施工合同3篇
- 《風(fēng)景談》《秦腔》聯(lián)讀 說課稿 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 第4單元 教學(xué)初探2024-2025學(xué)年二年級語文上冊同步說課稿(統(tǒng)編版)
- 2025年度高科技園區(qū)建設(shè)項目委托投標(biāo)協(xié)議范本3篇
- 2025年房產(chǎn)出售協(xié)議12篇
- Unit 3 Diverse Cultures Reading for writing 說課稿-2023-2024學(xué)年高中英語人教版(2019)必修第三冊
- 2024年VB程序設(shè)計:從入門到精通
- 2024年故宮文化展覽計劃:課件創(chuàng)意與呈現(xiàn)
- 公共交通乘客投訴管理制度
- 不銹鋼伸縮縫安裝施工合同
- 水土保持監(jiān)理總結(jié)報告
- Android移動開發(fā)基礎(chǔ)案例教程(第2版)完整全套教學(xué)課件
- 醫(yī)保DRGDIP付費基礎(chǔ)知識醫(yī)院內(nèi)培訓(xùn)課件
- 專題12 工藝流程綜合題- 三年(2022-2024)高考化學(xué)真題分類匯編(全國版)
- DB32T-經(jīng)成人中心靜脈通路裝置采血技術(shù)規(guī)范
- TDALN 033-2024 學(xué)生飲用奶安全規(guī)范入校管理標(biāo)準(zhǔn)
- 物流無人機垂直起降場選址與建設(shè)規(guī)范
評論
0/150
提交評論