操作系統(tǒng)課程設(shè)計說明書 -基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)_第1頁
操作系統(tǒng)課程設(shè)計說明書 -基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)_第2頁
操作系統(tǒng)課程設(shè)計說明書 -基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)_第3頁
操作系統(tǒng)課程設(shè)計說明書 -基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)_第4頁
操作系統(tǒng)課程設(shè)計說明書 -基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)課程設(shè)計說明書學(xué)院、系:軟件學(xué)院專業(yè)軟件工程設(shè)計題目:基于Linux的模擬存儲器管理的設(shè)計與實現(xiàn)需求分析設(shè)計目的存儲器管理是操作系統(tǒng)的重要功能之一,其中的頁面置換算法是虛擬存儲管理實現(xiàn)的關(guān)鍵,通過本次實驗理解內(nèi)存頁面調(diào)度的機制,在模擬實現(xiàn)FIFO、LRU、NRU和OPT幾種經(jīng)典頁面置換算法的基礎(chǔ)上,比較各種置換算法的效率和優(yōu)缺點,從而了解虛擬存儲實現(xiàn)的過程。設(shè)計內(nèi)容和要求在內(nèi)存開辟兩塊存儲空間,分別模擬內(nèi)存和外存,大小分別是8M,25M。給定三個文件A,B,C,大小分別是4.2M,8M和9.8M。模擬其并發(fā)執(zhí)行過程。每個進程在內(nèi)存中固定分配4個頁面,缺頁時分別采用四種置換算法(FIFO,LRU,NUR,OPT)進行置換。假定頁面大小為512K,進程執(zhí)行時頁面調(diào)度順序要求手動輸入??梢栽谄聊簧陷敵龈鬟M程頁面置換過程(以圖表形式描述)以及每種頁面置換算法的缺頁率和置換率,并對比各算法的優(yōu)劣。要求在Linux平臺下,使用C語言進行開發(fā)。總體設(shè)計程序的主框架采用數(shù)組的方式來實現(xiàn),每個進程在內(nèi)存里分配的4個頁面就是是個一個數(shù)組的4個數(shù),然后用二維數(shù)組是,第一維表示這個數(shù)組中包含的數(shù),而第二維則是實現(xiàn)了一個計數(shù)的功能,每個算法中的作用基本相同。輸入的序列也作為一個數(shù)組來實現(xiàn)的(由于不會使用動態(tài)的數(shù)組,在使用的時候還需要輸入序列的個數(shù),然后系統(tǒng)會分別提示輸入序列中的第一個數(shù))置換算法FIFO算法是先調(diào)入內(nèi)存的頁,先被置換出去。我們用數(shù)組P[]來代表內(nèi)存中的4個塊。輸入的序列存放在一個數(shù)組Xulie[]中,當(dāng)執(zhí)行一個頁面的時候,先檢測此頁面是否在內(nèi)存中,假如存在,給出提示;假如不在,將4個頁面依次的調(diào)入內(nèi)存中或者將4個塊依次置換。定義了一個用于的計數(shù)的變量x,用x=(x+1)%4用實現(xiàn)4個內(nèi)存塊的循環(huán)置換,實現(xiàn)了FIFO算法。LRU算法是最佳最久未使用,即前邊最近未被使用的頁面優(yōu)先被置換出去。我們用了二維p[][2]來代表內(nèi)存中的4個塊,p[][0]代表頁面,p[][1]代表一個計數(shù),4個內(nèi)存塊的計數(shù)初始為0,1,2,3,當(dāng)執(zhí)行一個頁面的時候,就將代表那個頁面的計數(shù)總體加1,以此來標(biāo)記最近最久未使用的頁面OPT算法是最佳轉(zhuǎn)換算法,即向后看,最將要使用的頁面優(yōu)先被轉(zhuǎn)換出去。我們用數(shù)組P[][2]來代表內(nèi)存中的4個塊,P[][0]代表頁面,P[][1]存在兩種狀態(tài)0,1,初始為0,當(dāng)要置換頁面的時候檢測后面的頁面序列,當(dāng)檢測到其中的一個頁面的時候就將那個頁面的塊的計數(shù)變?yōu)?,直到檢測出其中的三個頁面或者將整個頁面序列都檢測完,就將最前邊計數(shù)為0的頁面置換出去。NUR算法。我們用數(shù)組P[][2]來代表內(nèi)存中的4個塊,P[][0]代表頁面,P[][1]存在兩種狀態(tài)0,1,初始為0,當(dāng)執(zhí)行完一個一個頁面后,就將此頁面塊的計數(shù)變?yōu)?,每執(zhí)行4個頁面就將其初始化為0,當(dāng)置換頁面時就將最前邊計數(shù)為0的頁面置換。3.詳細(xì)設(shè)計FIFO置換算法模塊voidFRun(intn,intX[]){floatqueyelv,zhihuanlv;inti,j,x;intP[4]={0,0,0,0};intqueye=0;intzhihuan=0;x=0;for(i=0;i<n;i++){if((P[0]==X[i])||(P[1]==X[i])||(P[2]==X[i])||(P[3]==X[i])){printf("執(zhí)行的%d號頁面在內(nèi)存中\(zhòng)n",X[i]);}else{if(P[x]==0){printf("將第%d號頁面調(diào)入內(nèi)存",X[i]);queye++;}else{printf("將%d號頁面置換為%d號頁面",P[x],X[i]);zhihuan++;queye++;}P[x]=X[i];x=(x+1)%4;printf("%d%d%d%d\n",P[0],P[1],P[2],P[3]);}}printf("本次執(zhí)行過程缺頁次數(shù)為%d,置換次數(shù)為%d\n",queye,zhihuan);queyelv=(float)queye/n;zhihuanlv=(float)zhihuan/n;printf("本次執(zhí)行的缺頁率為%f,置換率為%f\n",queyelv,zhihuanlv);}NUR置換算法模塊voidNRun(intn,intX[]){inti,j,cunzai;floatzhihuanlv,queyelv;intmange=0;intqueye=0;intzhihuan=0;inta=0;intP[4][2]={{0,0},{0,0},{0,0},{0,0}};for(i=0;i<n;i++){cunzai=0;if(i%4==0){P[0][1]=0;P[1][1]=0;P[2][1]=0;P[3][1]=0;}for(j=0;j<4;j++){if(P[j][0]==X[i]){printf("要執(zhí)行的%d號頁面在內(nèi)存中\(zhòng)n",X[i]);P[j][1]=1;cunzai=1;}}if(cunzai==0){if(mange<4){printf("將%d號頁面調(diào)入內(nèi)存中",X[i]);P[mange][0]=X[i];P[mange][1]=1;mange++;queye++;}else{if(P[0][1]==0)a=0;else{if(P[1][1]==0)a=1;else{if(P[2][1]==0)a=2;else{if(P[3][1]==0)a=3;}}}printf("將%d頁置換為%d頁",P[a][0],X[i]);P[a][0]=X[i];P[a][1]=1;queye++;zhihuan++;}printf("%d%d%d%d\n",P[0][0],P[1][0],P[2][0],P[3][0]);}}printf("本次執(zhí)行過程缺頁次數(shù)為%d,置換次數(shù)為%d\n",queye,zhihuan);queyelv=(float)queye/n;zhihuanlv=(float)zhihuan/n;printf("本次執(zhí)行的缺頁率為%f,置換率為%f\n",queyelv,zhihuanlv);}LRU置換算法模塊voidLRun(intn,intX[]){floatqueyelv,zhihuanlv;intj,i,q;intqueye=0;intzhihuan=0;intP[4][2]={{0,0},{0,1},{0,2},{0,3}};intm=3;intcunzai;for(i=0;i<n;i++){cunzai=0;for(j=0;j<4;j++){if(P[j][0]==X[i]){printf("要執(zhí)行的%d號頁面在內(nèi)存中\(zhòng)n",X[i]);m++;P[j][1]=m;cunzai=1;}}if(cunzai==0){q=Bijiao(P[0][1],P[1][1],P[2][1],P[3][1]);if(P[q][1]<4){printf("將%d號頁面調(diào)入內(nèi)存中",X[i]);queye++;}if(P[q][1]>=4){printf("將%d號頁面置換為%d號頁面",P[q][0],X[i]);queye++;zhihuan++;}P[q][0]=X[i];m++;P[q][1]=m;printf("%d%d%d%d\n",P[0][0],P[1][0],P[2][0],P[3][0]);}}printf("本次執(zhí)行缺頁次數(shù)為%d,置換次數(shù)為%d\n",queye,zhihuan);queyelv=(float)queye/n;zhihuanlv=(float)zhihuan/n;printf("本次執(zhí)行的缺頁率為%f,置換率為%f\n",queyelv,zhihuanlv);}intBijiao(inta,intb,intc,intd){intm,n,x;if(a>b)m=b;elsem=a;if(c>d)n=d;elsen=c;if(m>n)x=n;elsex=m;if(x==a)return0;if(x==b)return1;if(x==c)return2;if(x==d)return3;}OPT置換算法模塊voidORun(intn,intX[]){floatqueyelv,zhihuanlv;inti,j,cunzai;intshu;intmange=0;inta=0;intqueye=0;intzhihuan=0;intP[4][2]={{0,0},{0,0},{0,0},{0,0}};for(i=0;i<n;i++){P[0][1]=0;P[1][1]=0;P[2][1]=0;P[3][1]=0;shu=0;cunzai=0;if((P[0][0]==X[i])||(P[1][0]==X[i])||(P[2][0]==X[i])||(P[3][0]==X[i])){printf("要執(zhí)行的%d號頁面在內(nèi)存中\(zhòng)n",X[i]);cunzai=1;}if(cunzai==0){if(mange<4){printf("將%d號頁面調(diào)入內(nèi)存中",X[i]);P[mange][0]=X[i];mange++;queye++;}else{j=i+1;while(shu<3){if(P[0][1]==0){if(P[0][0]==X[j]){P[0][1]=1;shu++;}}if(P[1][1]==0){if(P[1][0]==X[j]){P[1][1]=1;shu++;}}if(P[2][1]==0){if(P[2][0]==X[j]){P[2][1]=1;shu++;}}if(P[3][1]==0){if(P[3][0]==X[j]){P[3][1]=1;shu++;}}j++;if(j==n)break;}if(P[0][1]==0)a=0;else{if(P[1][1]==0)a=1;else{if(P[2][1]==0)a=2;else{if(P[3][1]==0)a=3;}}}printf("將%d號頁面置換為%d號頁面",P[a][0],X[i]);P[a][0]=X[i];queye++;zhihuan++;}printf("%d%d%d%d\n",P[0][0],P[1][0],P[2][0],P[3][0]);}}printf("本次執(zhí)行缺頁次數(shù)為%d,置換次數(shù)為%d\n",queye,zhihuan);queyelv=(float)queye/n;zhihuanlv=(float)zhihuan/n;printf("本次執(zhí)行的缺頁率為%f,置換率為%f\n",queyelv,zhihuanlv);}主模塊voidmain(){intg,x,z,Acaozuo,Bcaozuo,Ccaozuo,Ashu,Bshu,Cshu;intAxulie[100],Bxulie[100],Cxulie[100];printf("----------------------------------\n");printf("^_^存儲器管理模擬系統(tǒng)^_^\n");printf("----------------------------------\n");printf("---提示:本系統(tǒng)共執(zhí)行3個文件進程---\n---A進程有9個頁面---\n---B進程有16個頁面---\n---C進程有20個頁面---\n");printf("---四種調(diào)度算法模擬:---\n");printf("---操作號算法---\n");printf("---1先進先出算法---\n---2最近最久未使用算法---\n---3最佳置換算法---\n---4NUR算法---\n");printf("----------------------------------\n");printf("----------------------------------\n");printf("請輸入A文件序列的個數(shù):");scanf("%d",&Ashu);printf("請輸入A文件進程的調(diào)度序列(1—9號)\n");for(g=0;g<Ashu;g++){do{printf("請輸入第%d個序列號",g+1);scanf("%d",&Axulie[g]);}while((Axulie[g]<1)||(Axulie[g]>9));}do{printf("請輸入執(zhí)行A文件的調(diào)度算法操作號\n操作號:");scanf("%d",&Acaozuo);}while((Acaozuo!=1)&&(Acaozuo!=2)&&(Acaozuo!=3)&&(Acaozuo!=4));printf("----------------------------------\n");printf("請輸入B文件序列的個數(shù):");scanf("%d",&Bshu);printf("請輸入B文件進程的調(diào)度序列(1—16號)\n");for(x=0;x<Bshu;x++){do{printf("請輸入第%d個序列號",x+1);scanf("%d",&Bxulie[x]);}while((Bxulie[x]<1)||(Bxulie[x]>16));}do{printf("請輸入執(zhí)行B文件的調(diào)度算法操作號\n操作號:");scanf("%d",&Bcaozuo);}while((Bcaozuo!=1)&&(Bcaozuo!=2)&&(Bcaozuo!=3)&&(Bcaozuo!=4));printf("----------------------------------\n");printf("請輸入C文件序列的個數(shù):");scanf("%d",&Cshu);printf("請輸入C文件進程的調(diào)度序列(1—20號)\n");for(z=0;z<Cshu;z++){do{printf("請輸入第%d個序列號",z+1);scanf("%d",&Cxulie[z]);}while((Cxulie[z]<1)||(Cxulie[z]>20));}do{printf("請輸入執(zhí)行C文件的調(diào)度算法操作號\n操作號:");scanf("%d",&Ccaozuo);}while((Ccaozuo!=1)&&(Ccaozuo!=2)&&(Ccaozuo!=3)&&(Ccaozuo!=4));printf("----------------------------------\n");printf("----------------------------------\n");printf("----------------------------------\n");printf("A文件的調(diào)度過程:\n");if(Acaozuo==1){FRun(Ashu,Axulie);}else{if(Acaozuo==2){LRun(Ashu,Axulie);}else{if(Acaozuo==3){ORun(

溫馨提示

  • 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

提交評論