![操作系統(tǒng) 段頁式存儲 實驗報告_第1頁](http://file4.renrendoc.com/view/9947c52cd42624f9ed9b4e46e90c0ceb/9947c52cd42624f9ed9b4e46e90c0ceb1.gif)
![操作系統(tǒng) 段頁式存儲 實驗報告_第2頁](http://file4.renrendoc.com/view/9947c52cd42624f9ed9b4e46e90c0ceb/9947c52cd42624f9ed9b4e46e90c0ceb2.gif)
![操作系統(tǒng) 段頁式存儲 實驗報告_第3頁](http://file4.renrendoc.com/view/9947c52cd42624f9ed9b4e46e90c0ceb/9947c52cd42624f9ed9b4e46e90c0ceb3.gif)
![操作系統(tǒng) 段頁式存儲 實驗報告_第4頁](http://file4.renrendoc.com/view/9947c52cd42624f9ed9b4e46e90c0ceb/9947c52cd42624f9ed9b4e46e90c0ceb4.gif)
![操作系統(tǒng) 段頁式存儲 實驗報告_第5頁](http://file4.renrendoc.com/view/9947c52cd42624f9ed9b4e46e90c0ceb/9947c52cd42624f9ed9b4e46e90c0ceb5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
武漢理工大學《操作系統(tǒng)》課程設計說明書19-一、指定的選題——段頁式存儲管理1課程設計題目分析段式和頁式存儲管理各有優(yōu)缺點,段頁式存儲管理系統(tǒng),用分段的方法來分配和管理虛擬存儲器,而用分頁的方法來分配和管理主存。既有段式系統(tǒng)便于實現(xiàn)段的共享,段的保護,動態(tài)鏈接和段的動態(tài)增長等一系列優(yōu)點,又能像頁式系統(tǒng)那樣,很好地解決內存的外碎片問題。
段頁式系統(tǒng)的基本原理,是分段和分頁原理的組合。即先將用戶程序分為若干個段,再把每個段劃分成若干頁,并為每個段賦予一個段名。在段頁式系統(tǒng)中,地址結構由段號、段內頁號、頁內地址三部分組成。在段頁式系統(tǒng)中,為了便于實現(xiàn)地址變換,須配置一段表寄存器,存放段表始址和段長TL。(1)進行地址變換時,首先利用段號S,將它與段長TL進行比較,若S<TL,表示未越界,利用段表始址和段號來求出該段對應的段表項在段表中的位置,得到該段的頁表始址;
(2)利用邏輯地址中的段內頁號P,獲得對應頁的頁表項位置,讀出該頁所在的物理塊號b;
(3)用塊號b和頁內地址構成物理地址。2數(shù)據(jù)結構及模塊說明2.1存儲結構說明在此段頁式存儲管理系統(tǒng)中,我們采用以下數(shù)據(jù)結構來存儲數(shù)據(jù),存儲結構用結構體和結構體數(shù)組來實現(xiàn):2.1段表段號s狀態(tài)flag頁表長度plen頁表始址psta//段表typedefstructStack{ intnum;//段號 intflag;//段狀態(tài) intplen;//頁表長度 intpsta;//頁表始址}Stack;其中狀態(tài)為1代表在內存,為0代表不在內存。2.2頁表頁號pnum狀態(tài)位(是否在內存中)塊號block//頁表typedefstructPage{ intnum;//頁號 intflag;//頁狀態(tài),即是否在內存。 intblock;//該頁對應的塊號}Page;2.3數(shù)據(jù)區(qū)塊號block作業(yè)內容簡單起見,我們沒有把內容初始化到每一個內存地址,只給出每個作業(yè)塊的內容,并且用一串字符代替。typedefstructData{ intnum;//內存的塊數(shù) stringstr;//對應數(shù)據(jù)塊的作業(yè)內容,簡化起見說明內容為一串字符。}Data;2.4快表段號段內頁號塊號//快表typedefstructQuick{ intqs;//快表段號 intqp;//快表頁號 intqb;//快表段號}Quick;2.5段表寄存器段表始址段表長度//段表寄存器typedefstructStare{ intssta;//段表始址 intslen;//段表長度}Stare;3程序流程圖4使用技術及實現(xiàn)功能使用技術:本實驗使用VC++6.0平臺,使用基本的控制臺應用程序,單文檔結構,主要數(shù)據(jù)結構是結構體間的關系。打開VC++6.0建立一個空工程,然后簡歷C++源文件,根據(jù)數(shù)據(jù)結構編寫代碼。實現(xiàn)功能:從鍵盤輸入進程及其各段大小,能實現(xiàn)空間的分配,回收,地址轉換,能顯示段表、頁表及存儲空間狀態(tài)5程序代碼#include<iostream>#include<string>#definenull"0"usingnamespacestd;//數(shù)據(jù)結構//快表typedefstructQuick{ intqs;//快表塊號 intqp;//快表頁號 intqb;//快表段號}Quick;//數(shù)據(jù)區(qū),簡單起見,只為每一個內儲塊寫入內容,不具體到每一物理地址。typedefstructData{ intnum;//內存的塊數(shù) stringstr;//對應數(shù)據(jù)塊的作業(yè)內容,簡化起見說明內容為一串字符。 boolflag;//是否被分配,1為是,0為否}Data;//頁表typedefstructPage{ intnum;//頁號 boolflag;//頁狀態(tài),即是否在內存。 intblock;//該頁對應的塊號}Page;//段表typedefstructStack{ intnum;//段號 boolflag;//段狀態(tài) intplen;//頁表長度 intpsta;//頁表始址}Stack;//段表寄存器typedefstructStare{ intssta;//段表始址 intslen;//段表長度}Stare; Stackss[10];////全局變量Starest;///////全局變量Datawork[100];//全局變量 Quickqu;//////全局變量 Pagepage[5][5]; boolmenuflag=0; intbs;//內存大小 intbbs;//內存塊大小 intblocknum;//總塊數(shù) intsums;//總段數(shù)voidmenu();voidstart();voidchange();voiddisplay_stack();voiddisplay_page();voiddisplay_flag();voidrecycle();intmain(){ menu(); return0;}voidmenu(){cout<<"*************請選擇**************"<<endl; cout<<endl; cout<<"**1、初始化表*****"<<endl; cout<<"**2、物理地址轉換*****"<<endl;cout<<"**3、顯示段表*****"<<endl;cout<<"**4、顯示頁表*****"<<endl;cout<<"**5、顯示存儲空間狀態(tài)*****"<<endl;cout<<"**6、回收*****"<<endl; cout<<"**7、退出*****"<<endl; intmenu1; cin>>menu1; if(menu1!=1&&menu1!=2&&menu1!=3&&menu1!=4&&menu1!=5&&menu1!
=6&&menu1!=7) { cout<<"請輸入正確的選項"<<endl; menu(); } switch(menu1) { case1: { menuflag=1; start(); break;} case2: { if(menuflag==0) { cout<<"請初始化表"<<endl; menu(); } change(); break; } case3: {if(menuflag==0) { cout<<"請初始化表"<<endl; menu(); } display_stack(); break; }case4: {if(menuflag==0) { cout<<"請初始化表"<<endl; menu(); } display_page(); break; }case5: {if(menuflag==0) { cout<<"請初始化表"<<endl; menu(); } display_flag(); break; } case6: {if(menuflag==0) { cout<<"請初始化表"<<endl; menu(); } recycle(); break; } case7:break; }//switch }voidstart(){cout<<"請輸入內存大小(K)"<<endl; cin>>bs; cout<<"請輸入內存塊的大小(k)"<<endl;cin>>bbs; blocknum=bs/bbs; cout<<"內存一共被分為"<<blocknum<<"塊,每
塊"<<bbs<<"k"<<"一共"<<bs<<"k"<<endl; cout<<"請輸入進程個數(shù)"<<endl; intpn;cin>>pn; //下面求所有進程的總段數(shù)和段表,并為每段創(chuàng)建頁表 for(intpn1=0;pn1<pn;pn1++) { cout<<"請輸入第"<<pn1<<"個進程的段數(shù)"<<endl; intppn; cin>>ppn; sums+=ppn; } for(intss1=0;ss1<sums;ss1++) { cout<<"請輸入第"<<ss1<<"個段的:段號,狀態(tài),頁表
長度,頁表始址"<<endl; cin>>ss[ss1].num>>ss[ss1].flag>>ss
[ss1].plen>>ss[ss1].psta; cout<<"請初始化第"<<ss1<<"段的頁表項,輸入兩個數(shù)
據(jù)頁表狀態(tài)和對應塊號"<<endl; for(intsss1=0;sss1<ss[ss1].plen;sss1++) { page[ss1][sss1].num=sss1; cout<<"請輸入該段第"<<sss1<<"個頁的頁狀
態(tài)和對應塊號"<<endl; cin>>page[ss1][sss1].flag>>page[ss1]
[sss1].block; } } //初始化段表寄存器 cout<<"初始化段表寄存器的段表始址"<<endl; cin>>st.ssta; st.slen=sums; //初始化內存中物理地址每一塊的數(shù)據(jù)區(qū) cout<<"簡單起見,我們對物理地址的需要的塊用字符串進
行簡單的初始化,沒有具體到每一物理地址"<<endl; for(intbn=0;bn<blocknum;bn++) { intbn1;cout<<"請輸入內存塊號及內存塊里的作業(yè)內容,輸入#時,輸入結
束"<<endl;cin>>bn1; work[bn1].num=bn1; cin>>work[bn1].str;work[bn1].flag=1; if(work[bn1].str=="#") break; } //初始化快表 cout<<"簡單起見,我們初始化快表只有一個"<<endl; cout<<"請輸入要作為快表的段號和頁號"<<endl; cin>>qu.qb>>qu.qp; while(ss[qu.qb].flag!=1||page[qu.qb]
[qu.qp].flag!=1) { cout<<"該頁不在內存請輸入一頁在內存中的
作為快表,請輸入要作為快表的段號和頁號"<<endl; cin>>qu.qb>>qu.qp; } qu.qs=page[qu.qb][qu.qp].block; menu();}voiddisplay_stack(){cout<<"**段號狀態(tài)頁表長度頁表始址*****"<<endl; for(intsn=0;sn<sums;sn++) {cout<<"**"<<ss[sn].num<<""<<ss[sn].flag<<"
"<<ss[sn].plen<<""<<ss[sn].psta<<"*****"<<endl;}menu();}voiddisplay_page(){ cout<<"**頁號狀態(tài)存儲塊號*****"<<endl; for(intsp1=0;sp1<sums;sp1++) {cout<<"******第"<<sp1<<"段的頁表"<<"***************"<<endl; for(intsp2=0;sp2<ss[sp1].plen;sp2++) cout<<"**"<<page[sp1][sp2].num<<""<<page[sp1]
[sp2].flag<<""<<page[sp1][sp2].block<<"*****"<<endl; }menu();}voiddisplay_flag(){ cout<<"**塊號狀態(tài)*****"<<endl; for(intsf=0;sf<blocknum;sf++) { cout<<"**"<<sf<<""<<work[sf].flag<<"
*****"<<endl; } menu();}voidrecycle(){ for(intsf=0;sf<blocknum;sf++) { work[sf].flag=0;work[sf].str=null; } menu();}voidchange(){cout<<"請輸入要轉化的邏輯地址,段號s,段內頁號p,頁內偏移地
址d(B)"<<endl; intsnum,pnum,dnum; cin>>snum>>pnum>>dnum; //首先查快表 if(snum==qu.qb&&pnum==qu.qp) { cout<<"快表命中"<<"對應塊號
是"<<qu.qs<<endl; cout<<"該塊中作業(yè)數(shù)據(jù)是"<<work[page
[qu.qb][qu.qp].block].str<<endl; cout<<"物理地址
是"<<qu.qs*bbs*1024+dnum<<endl;; menu(); } //訪問段表寄存器 else { cout<<"快表沒有命中,訪問段表寄存器,段
號等于段表始址加上偏移地址"<<endl; //intssnum;//ssnum=st.ssta+snum; if(snum>st.slen-1) { cout<<"越界中斷"<<endl; menu(); } //訪問段表 else { if(snum>=0&&snum<=st.slen-1) { //是否缺段 cout<<"段表有
效"<<endl; if(ss[snum].flag==0) { cout<<"缺段中
斷"<<endl; menu(); } else { //查詢頁表,根據(jù)段號查
出頁表始址,加上段內偏移頁數(shù),即得到頁表項。 //缺頁中斷測試 if(pnum>ss
[snum].plen-1) {
cout<<"缺頁中斷"<<endl; menu
(); } else { if
(pnum>=0&&pnum<=ss[snum].plen-1) {
if(page[snum][pnum].flag==0)
{
cout<<"缺頁中斷"<<endl;
menu();
}
else
{
cout<<"找到該頁"<<"查詢頁表后對應塊號"<<page[snum][pnum
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新一代高性能計算機設備采購合同
- 欽州2025年廣西欽州市市直中學教師專場招聘140人筆試歷年參考題庫附帶答案詳解
- 西安2025年陜西西安音樂學院招聘6人筆試歷年參考題庫附帶答案詳解
- 紅河云南民建紅河州委招聘公益性崗位人員筆試歷年參考題庫附帶答案詳解
- 百色2025年廣西百色學院招聘187人筆試歷年參考題庫附帶答案詳解
- 珠海廣東珠海高新區(qū)科技產業(yè)局招聘專員筆試歷年參考題庫附帶答案詳解
- 滁州2025年安徽滁州鳳陽縣城區(qū)學校選調教師143人筆試歷年參考題庫附帶答案詳解
- 楚雄云南楚雄雙江自治縣綜合行政執(zhí)法局招聘編外長聘人員筆試歷年參考題庫附帶答案詳解
- 惠州2025年廣東惠州市中醫(yī)醫(yī)院第一批招聘聘用人員27人筆試歷年參考題庫附帶答案詳解
- 2025年速凍麻竹筍項目可行性研究報告
- 中國氫內燃機行業(yè)發(fā)展環(huán)境、市場運行格局及前景研究報告-智研咨詢(2024版)
- 開學季初三沖刺中考開學第一課為夢想加油課件
- 《自然保護區(qū)劃分》課件
- 2025年普通卷釘項目可行性研究報告
- 2025年人教版英語五年級下冊教學進度安排表
- 2025年建筑施工春節(jié)節(jié)后復工復產工作專項方案
- 學校食堂餐廳管理者食堂安全考試題附答案
- 《商用車預見性巡航系統(tǒng)技術規(guī)范》
- 玻璃電動平移門施工方案
- 春季安全開學第一課
- 陜鼓集團招聘筆試題目
評論
0/150
提交評論