操作系統(tǒng)的存儲(chǔ)管理方式_第1頁(yè)
操作系統(tǒng)的存儲(chǔ)管理方式_第2頁(yè)
操作系統(tǒng)的存儲(chǔ)管理方式_第3頁(yè)
操作系統(tǒng)的存儲(chǔ)管理方式_第4頁(yè)
操作系統(tǒng)的存儲(chǔ)管理方式_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:操作系統(tǒng)的存儲(chǔ)管理方式班級(jí):姓名:學(xué)號(hào):類型:實(shí)驗(yàn)地點(diǎn):日期:一、實(shí)驗(yàn)?zāi)康?1. 動(dòng)態(tài)測(cè)試 WINDOWS2OOO/XP 系統(tǒng)內(nèi)存二、實(shí)驗(yàn)環(huán)境:1. PC機(jī)一臺(tái)(VC C VB等編程環(huán)境)三、實(shí)驗(yàn)內(nèi)容和要求:1.了解WINDOWS 用戶進(jìn)程地址空間分布、系統(tǒng)地址空間分布、WINDOWS中用戶空間內(nèi)存分配方式(以頁(yè)為單位的虛擬內(nèi)存分配方法)、WINDOWS的內(nèi)存保護(hù)機(jī)制。四、實(shí)驗(yàn)步驟:#in clude<iostream> #in clude<cstri ng>內(nèi)存塊未被使用內(nèi)存塊在初始化時(shí)已被系統(tǒng)占用內(nèi)存塊已被分配給 plD=k的用戶進(jìn)程Obj

2、*/#in clude<ctime> #in clude<w in dows.h> using n ames pace std; const int MM_SIZE=100; / 內(nèi)存塊數(shù) const int ROW=10; /繪制內(nèi)存行數(shù) const int COL=10; /繪制內(nèi)存列數(shù) const int NEME_LEN=10; / 名字長(zhǎng)度 const int WAITTIME=2000; / 等待時(shí)間 int UsedNum=0; /當(dāng)前已占用的內(nèi)存塊數(shù) int FreeNum=MM_SIZE; /當(dāng)前空閑的內(nèi)存塊數(shù) int ProCnt=O; /當(dāng)前用戶進(jìn)

3、程數(shù) int NowID=1; /當(dāng)前分配的進(jìn)程編號(hào) int MMMM_SIZE; /Mai n Mem ony /0 -> /-1 -> /k -> /*進(jìn)程 class P ROCESSpublic:PROCESS。:next(0)/構(gòu)造函數(shù)重載,用于構(gòu)造隊(duì)列隊(duì)頭 P ROCESS(char* Name,i nt p N): PageNum( pN), next(0) pN ame=new charNEME LEN;strc py( pN ame,Name);P ageTable=new in tMM_SIZE;for(i nt i=O;i<MM_SIZE;i+)P

4、 ageTablei=-1; plD=NowlD+;PROCESSOdelete pN ame;delete P ageTable;PROCESS* next; /指向下一個(gè)進(jìn)程char* Get pN ame(void)co nst return p Name; / 獲取進(jìn)程名int Get plD(void)co nst return pID; / 獲取進(jìn)程編號(hào)int GetPageNum(void)const return PageNum; / 獲取進(jìn)程所需頁(yè)數(shù) void UnionTable(int i,int j); /關(guān)聯(lián)頁(yè)號(hào)i與塊號(hào)j(創(chuàng)建頁(yè)表) void PrintPageTa

5、ble(void); / 打印頁(yè)表p rotected:char* p Name; / 進(jìn)程名int pID; /進(jìn)程編號(hào)int PageNum; /進(jìn)程所需頁(yè)數(shù)int* P ageTable; / 頁(yè)表;PROCESS* ProLinkHead=new PROCESS; / 申請(qǐng)進(jìn)程隊(duì)列隊(duì)頭空間 void P ROCESS:U nio nTable(i nt i,i nt j)P ageTablei=j;return;void P ROCESS: PrintP ageTable(void)cout<<" PAGETABLE (頁(yè)表)"<<endl;

6、cout<<"頁(yè)號(hào) ID 塊號(hào) ID#"<<endl;for(i nt i=0;i<MM_SIZE;i+)if(P ageTablei!=-1)printf(” %-2d %-2dn",i, PageTablei);cout<<e ndl;return;void In itial_MM(void); / 初始化void Menu(void); / 菜單void CheckMM(void); / 查看內(nèi)存狀態(tài)void PrintProList(void); /打印當(dāng)前用戶進(jìn)程列表void CheckPro(void); /

7、查看進(jìn)程狀態(tài)void CreatePro(void); / 創(chuàng)建新用戶進(jìn)程 void DelPro(void); / 刪除用戶進(jìn)程/*主函數(shù)*/int main( void)sran d(time(0);In itial_MM();Men u();return 0;/*初始化內(nèi)存狀態(tài)*/void In itial_MM(void)memset(MM,0,sizeof(i nt)*MM_SIZE); /缺省所有內(nèi)存塊空閑(0)int USE=rand()%4+2; /初始內(nèi)存占用系數(shù)int UsedMM=MM_SIZE/USE; / 初始內(nèi)存占用數(shù)(占用率=USEMM/MM_SIZE)for(i

8、nt i=0;i<UsedMM;i+) / 隨機(jī)分配 UsedMM 個(gè)內(nèi)存塊給系統(tǒng)(-1)int id;doid=ra nd()%MM_SIZE;while(MMid=-1); /檢查編號(hào)為id的內(nèi)存塊是否已分配給系統(tǒng)MMid=-1;UsedNum+=UsedMM;FreeNum-=UsedMM;return;/*菜單*/void Menu (void)int select;while(true)system("cls");cout<<e ndl;cout<<e ndl;cout<<" 1.檢查內(nèi)存的狀態(tài)"<

9、;<endl;cout<<e ndl;cout<<" 2.檢查進(jìn)程的狀態(tài)"<<endl;cout<<e ndl;cout<<" 3.創(chuàng)建新進(jìn)程"<<endl;cout<<e ndl;cout<<" 4.刪除進(jìn)程"<<endl;cout<<e ndl;cout<<" 5.退出"<<endl;cout<<e ndl;cout<<e ndl;cin&

10、gt; >select;if(select=5)break;switch(select)case 1:CheckMM();break;case 2:Check Pro();break;case 3:Create Pro();break; case 4:De IPro ();break; default: cout<<"出現(xiàn)錯(cuò)誤,請(qǐng)重新輸入!"<<endl;Slee p(WAITTIME/2); break;return;/*查看內(nèi)存狀態(tài)*/void CheckMM(void)system("cls");cout<<

11、;e ndl;cout<<"主內(nèi)存(塊號(hào))ID#="<<ROW<<"*iR+jC"<<endl;cout<<" 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C"<<e ndl;for(i nt i=O;i<ROW;i+)prin tf("%dR ",i);for(i nt j=0;j<COL;j+)prin tf("%2d ",MMROW*i+j);cout<<e ndl;cout<

12、<" -1 :系統(tǒng)使用的內(nèi)存"<<endl;cout<<" 0 :釋放內(nèi)存"<<endl;cout<<" n : PROCESS_n 使用內(nèi)存"<<endl;cout<<e ndl;cout<<"返回菜單?(Y/N)"<<endl;while(true)char Key;cin> >Key;if(Key='Y' | Key='y') break;cout<<&

13、quot;請(qǐng)輸入'Y'."<<endl;cout<<"你現(xiàn)在只能返回菜單 "<<e ndl;return;/*創(chuàng)建新用戶進(jìn)程*/void Create Pro(void)system("cls");cout<<e ndl;cout<<"創(chuàng)建新的進(jìn)程"<<endl;/*輸入新進(jìn)程參數(shù)*/char nameNEME LEN; / 新進(jìn)程名字int pN; /新進(jìn)程所需占用的頁(yè)數(shù)cout<<"新進(jìn)程名字:";ci

14、n>>n ame;cout<<"新進(jìn)程頁(yè)數(shù):";cin>>pN;if(pN>FreeNum) /檢查空閑塊數(shù)是否足夠分配給新進(jìn)程cout<<e ndl;cout<<"內(nèi)存不足!無(wú)法創(chuàng)建該進(jìn)程,請(qǐng)清理內(nèi)存再重試"<<endl;cout<<"自動(dòng)返回菜單"<<endl;Slee p(WAITTIME);return;elseProCn t+;UsedNum+=pN;FreeNu m-=pN;/*創(chuàng)建新進(jìn)程并插入進(jìn)程隊(duì)列*/PROCESS*

15、 NewPro=new PROCESS(name,pN); / 創(chuàng)建新進(jìn)程對(duì)象并申請(qǐng)空間PROCESS* tmp=NewPro; /把新進(jìn)程插入進(jìn)程隊(duì)列tmp->n ext =ProLin kHead->n ext;ProL in kHead->n ext=t mp;/*為進(jìn)程分配內(nèi)存*/int j=0;for(i nt i=0;i< pN;i+)/枚舉進(jìn)程頁(yè)號(hào),為其分配內(nèi)存塊for(;j<MM_SIZE;j+) / 枚舉空閑的內(nèi)存塊號(hào)if(MMj=0)MMj=t mp->Get plD();tmp->Union Table(i,j);break;co

16、ut<<e ndl;cout<<"創(chuàng)建進(jìn)程"<<name<<"成功!"<<endl;cout<<"自動(dòng)返回菜單"<<endl;Slee p(WAITTIME);return;/*打印當(dāng)前用戶進(jìn)程列表*/void PrintP roList(void)cout<<e ndl;cout<<"進(jìn)程狀態(tài)"<<endl;cout<<"PID PAGENUM 名稱"<&l

17、t;endl;P ROCESS* p=P roL in kHead;while( p->n ext)p=p->n ext;printf(” %-10s %2d %4dn", p->Get pN ame(), p->Get plD(), p->Get PageNum(); return;/*查看進(jìn)程狀態(tài)*/void Check Pro(void)system("cls");PrintP roList();if(ProCn t=0)cout<<"當(dāng)前不存在任何用戶進(jìn)程"<<e ndl;cout&

18、lt;<"自動(dòng)返回菜單"<<endl;Slee p(WAITTIME);return;cout<<"輸入PID查看指定進(jìn)程的詳細(xì)信息:"<<endl;int pid;cin>>pid;bool flag=false; /標(biāo)記是否找到編號(hào)為pid的進(jìn)程P ROCESS* p=ProLin kHead-> next;while( p)if(p->Get plD()!=pid)p=p->n ext;else flag=true; break;if(!flag)cout<<&qu

19、ot;輸入錯(cuò)誤!不存在的進(jìn)程!"<<endl; else system("cls");cout<<e ndl;cout<<" P ROCESS_"<< p->Get pN ame()<<'_'<< p->Get plD()<<e ndl; cout<<" PAGENUM(頁(yè)數(shù)):"<<p->GetPageNum()<<endl; cout<<e ndl;p-&g

20、t;PrintPageTableO; 打印 pid 進(jìn)程的頁(yè)表cout<<"Back to Me nu? (Y/N)"<<e ndl;while(true)char Key;cin> >Key;if(Key='Y' II Key='y')break;cout<<"請(qǐng)輸入'Y'"<<endl;cout<<"你現(xiàn)在只能返回菜單 "<<e ndl;return;/*刪除用戶進(jìn)程*/void Del Pro(vo

21、id)system("cls");PrintProList(); /先打印用戶進(jìn)程列表int select;cout<<" (1)刪除指定進(jìn)程."<<endl;cout<<" (2)刪除所有進(jìn)程."<<endl; cout<<e ndl;while(ci n> >select)if(select=1 | select=2)break;cout<<"錯(cuò)誤!"<<endl;cout<<e ndl;if(selec

22、t=1) /刪除指定用戶進(jìn)程int p id;cout<<"輸入頁(yè)號(hào):";cin>>pid;bool flag=false; /標(biāo)記是否找到編號(hào)為 pid的進(jìn)程P ROCESS* p仁P roLi nkHead;P ROCESS* p 2=ProLi nkHead-next;while( p2)if(p 2->Get plD()!=pid)p1=p1->n ext;p2=p2->n ext;else flag=true;p1->n ext =p2->n ext;delete p2; /釋放pid進(jìn)程對(duì)象占用的空間 break;if(flag)ProCn t-;for(int i=O;i<MM_SIZE;i+)/ 釋放被pid進(jìn)程占用的內(nèi)存塊 if(MMi=pid)MMi=O;UsedNum-;FreeNum+;cout<<"刪除成功!"<<endl;elsecout<<

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論