操作系統(tǒng)的存儲管理方式_第1頁
操作系統(tǒng)的存儲管理方式_第2頁
操作系統(tǒng)的存儲管理方式_第3頁
免費預(yù)覽已結(jié)束,剩余7頁可下載查看

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗報告實驗名稱:操作系統(tǒng)的存儲管理方式班級:姓名:學(xué)號:類型:實驗地點:日期:、實驗?zāi)康模?. 動態(tài)測試 WINDOWS2000/XP 系統(tǒng)內(nèi)存、實驗環(huán)境:1. PC機一臺(VC C VB等編程環(huán)境)三、實驗內(nèi)容和要求:1.了解WINDOWS 用戶進程地址空間分布、系統(tǒng)地址空間分布、WINDOWS中用戶空間內(nèi)存分配方式(以頁為單位的虛擬內(nèi)存分配方法)、WINDOWS的內(nèi)存保護機制。四、實驗步驟:#in clude<iostream>#in clude<cstri ng>#in clude<ctime>#i nclude<wi ndows.h&

2、gt; using n amespace std; const int MM_SIZE=100; / 內(nèi)存塊數(shù) const int ROW=10; /繪制內(nèi)存行數(shù) const int COL=1O; /繪制內(nèi)存列數(shù) const int NEME_LEN=10; / 名字長度 const int WAITTIME=2000; / 等待時間 int UsedNum=0; /當(dāng)前已占用的內(nèi)存塊數(shù) int FreeNum=MM_SIZE; /當(dāng)前空閑的內(nèi)存塊數(shù) int ProCnt=O; /當(dāng)前用戶進程數(shù) int NowID=1; /當(dāng)前分配的進程編號 int MMMM_SIZE; /Mai n Me

3、m ony/0 ->內(nèi)存塊未被使用/-1 ->內(nèi)存塊在初始化時已被系統(tǒng)占用 /k ->內(nèi)存塊已被分配給 pID=k的用戶進程 /* 進程 Obj*/class PROCESS public:PROCESS。:next(0)/構(gòu)造函數(shù)重載,用于構(gòu)造隊列隊頭 PROCESS(char* Name,int pN):PageNum(pN),next(O) pName=new charNEME LEN;strcpy(pName,Name);PageTable=new intMM_SIZE;for(i nt i=0;i<MM_SIZE;i+)PageTablei=-1; plD=N

4、owlD+;PROCESS()delete pName;delete PageTable;PROCESS* next; /指向下一個進程char* GetpName(void)co nst return pName; / 獲取進程名int GetpID(void)co nst return pID; / 獲取進程編號int GetPageNum(void)const return PageNum; / 獲取進程所需頁數(shù) void UnionTable(int i,int j); /關(guān)聯(lián)頁號i與塊號j(創(chuàng)建頁表) void PrintPageTable(void); / 打印頁表protecte

5、d:char* pName; / 進程名int pID; /進程編號int PageNum; /進程所需頁數(shù)int* PageTable; / 頁表;PROCESS* ProLinkHead=new PROCESS; / 申請進程隊列隊頭空間 void PROCESS:U nio nTable(i nt i,i nt j)PageTablei=j;return;void PROCESS:Pri ntPageTable(void)cout<<" PAGETABLE (頁表)"<<endl;cout<<"頁號 ID 塊號 ID#&q

6、uot;<<endl;for(i nt i=0;i<MM_SIZE;i+)if(PageTablei!=-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)前用戶進程列表void CheckPro(void); / 查看進程狀態(tài)void CreatePro(void); / 創(chuàng)建新用

7、戶進程 void DelPro(void); / 刪除用戶進程/*主函數(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(int i=0;i<UsedMM;i+) / 隨機分配 Used

8、MM 個內(nèi)存塊給系統(tǒng)(-1)int id;doid=ra nd()%MM_SIZE;while(MMid=-1); / 檢查編號為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)"<<endl;cout<<e ndl;cout&

9、lt;<" 2.檢查進程的狀態(tài)"<<endl;cout<<e ndl;cout<<" 3.創(chuàng)建新進程"<<endl;cout<<e ndl;cout<<" 4.刪除進程"<<endl;cout<<e ndl;cout<<" 5.退出"<<endl;cout<<e ndl;cout<<e ndl;cin> >select;if(select=5)break;

10、switch(select)case 1:CheckMM();break;case 2:CheckPro();break;case 3:CreatePro();break;case 4:DelPro();break;default:cout<<"出現(xiàn)錯誤,請重新輸入!"<<endl;Sleep(WAITTIME/2);break;return;/*查看內(nèi)存狀態(tài)*/void CheckMM(void)system("cls");cout<<e ndl;cout<<"主內(nèi)存(塊號)ID#="

11、<<ROW<<"*iR+jC"<<endl;cout<<" 0C 1C 2C 3C 4C 5C 6C 7C 8C 9C"<<e ndl;for(i nt i=0;i<ROW;i+)printf("%dR ",i);for(i nt j=0;j<COL;j+)prin tf("%2d ”,MMROW*i+j);cout<<e ndl;cout<<" -1 :系統(tǒng)使用的內(nèi)存"<<endl;cout<

12、;<" 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<<"請輸入'Y'."<<endl;cout<&

13、lt;"你現(xiàn)在只能返回菜單 "<<e ndl;return;/*創(chuàng)建新用戶進程*/void CreatePro(void)system("cls");cout<<e ndl;cout<<"創(chuàng)建新的進程"<<endl;/*輸入新進程參數(shù)*/char nameNEME LEN; / 新進程名字int pN; /新進程所需占用的頁數(shù)cout<<"新進程名字:";cin»n ame;cout<<"新進程頁數(shù):";cin&g

14、t; >pN;if(pN>FreeNum) /檢查空閑塊數(shù)是否足夠分配給新進程cout<<e ndl;cout<<"內(nèi)存不足!無法創(chuàng)建該進程,請清理內(nèi)存再重試"<<endl;cout<<"自動返回菜單"<<endl;Sleep(WAITTIME);return;elseProC nt+;UsedNum+=pN;FreeNum-=pN;/*創(chuàng)建新進程并插入進程隊列*/PROCESS* NewPro=new PROCESS(name,pN); / 創(chuàng)建新進程對象并申請空間PROCESS*

15、 tmp=NewPro; /把新進程插入進程隊列 tmp->n ext=ProL in kHead->n ext;ProL in kHead->n ext=tmp;/*為進程分配內(nèi)存*/int j=0;for(i nt i=0;i<pN;i+) /枚舉進程頁號,為其分配內(nèi)存塊for(;j<MM_SIZE;j+) / 枚舉空閑的內(nèi)存塊號 if(MMj=0)MMj=tmp->GetpID();tmp-> Union Table(i,j);break;cout<<e ndl;cout<<"創(chuàng)建進程"<<

16、name<<"成功!"<<endl;cout<<"自動返回菜單"<<endl;Sleep(WAITTIME);return;/*打印當(dāng)前用戶進程列表*/void Prin tProList(void)cout<<e ndl;cout<<"進程狀態(tài)"<<endl;cout<<"PID PAGENUM 名稱"<<endl;PROCESS* p=ProL in kHead;while(p->n ext)p=p

17、->n ext;printf(” %-10s %2d %4dn",p->GetpName(),p->GetplD(),p->GetPageNum();return;/*查看進程狀態(tài)*/void CheckPro(void)system("cls");Prin tProList();if(ProC nt=O)cout<<"當(dāng)前不存在任何用戶進程"<<e ndl;cout<<"自動返回菜單"<<endl;Sleep(WAITTIME);return;cout

18、<<"輸入PID查看指定進程的詳細(xì)信息:"<<endl;int pid;cin> >pid;bool flag=false; /標(biāo)記是否找到編號為pid的進程PROCESS* p=ProL in kHead-> next;while(p)if(p->GetpID()!=pid)p=p->n ext;elseflag=true;break;if(!flag)cout<<"輸入錯誤!不存在的進程!"<<endl;elsesystem("cls");cout<

19、;<e ndl;cout<<" PROCESS_"<<p->GetpName()<<'_'<<p->GetplD()<<e ndl;cout<<" PAGENUM(頁數(shù)):"<<p->GetPageNum()<<endl; cout<<e ndl;p->PrintPageTable(); 打印 pid 進程的頁表cout<<"Back to Me nu? (Y/N)"&l

20、t;<e ndl;while(true)char Key;cin> >Key;if(Key='Y' | Key='y')break;cout<<"請輸入'Y'"<<endl;cout<<"你現(xiàn)在只能返回菜單 "<<e ndl;return;/*刪除用戶進程*/void DelPro(void)system("cls");PrintProList(); /先打印用戶進程列表int select;cout<<&qu

21、ot; (1)刪除指定進程."<<endl;cout<<" (2)刪除所有進程."<<endl; cout<<e ndl;while(ci n> >select)if(select=1 | select=2)break;cout<<"錯誤!"<<endl;cout<<e ndl;if(select=1) /刪除指定用戶進程int pid;cout<<"輸入頁號:";cin> >pid;bool flag=f

22、alse; /標(biāo)記是否找到編號為 pid的進程PROCESS* p仁ProLi nkHead;PROCESS* p2=ProLi nkHead-> next;while(p2)if(p2->GetplD()!=pid)p1=p1- >n ext;p2=p2->n ext;elseflag=true;p1- >n ext=p2->n ext;delete p2; /釋放pid進程對象占用的空間break;if(flag)ProC nt-;for(int i=O;i<MM_SIZE;i+)/釋放被pid進程占用的內(nèi)存塊if(MMi=pid)MMi=O;UsedNum-;FreeNum+;cout<<"刪除成功!"<<endl;elseco

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論