版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
實驗報告實驗課程:學生姓名:學號:專業(yè)班級:2009年1目錄實驗一編程實現(xiàn)銀行家安全算法………………3實驗二存儲管理的模擬實現(xiàn)………13實驗三磁盤調(diào)度算法的模擬實現(xiàn)…20 南昌大學實驗報告(1)編程實現(xiàn)銀行家安全算法學生姓名:學號:專業(yè)班級:實驗類型:□驗證□綜合■設計□創(chuàng)新實驗日期:11.5,11.12實驗成績:一、實驗目的通過實驗加強對銀行家安全算法的理解和掌握。二、實驗內(nèi)容熟悉避免死鎖發(fā)生的方法,死鎖與安全序列的關系,編程實現(xiàn)銀行家算法,要求輸出進程的安全序列。三、實驗要求1、需寫出設計說明;2、設計實現(xiàn)代碼及說明3、運行結(jié)果;四、主要實驗步驟1、學習、理解好課本中銀行家算法的實例;2、根據(jù)課本中銀行家算法的描述,畫出程序流程圖;3、按照程序流程圖,用C語言編程并實現(xiàn)。4、上機運行編寫的程序,檢驗并且修正直至能夠得到正確的結(jié)果。輸出提示:輸入有誤,請從新輸入初始化函數(shù)Init()開始輸入進程的數(shù)目m輸出資源的種類n輸入每個進程最多所需的各資源數(shù)輸入每個進程已分配的各資源數(shù)輸入各個資源現(xiàn)有的數(shù)目初始化函數(shù)Init()結(jié)束流程圖:輸出提示:輸入有誤,請從新輸入初始化函數(shù)Init()開始輸入進程的數(shù)目m輸出資源的種類n輸入每個進程最多所需的各資源數(shù)輸入每個進程已分配的各資源數(shù)輸入各個資源現(xiàn)有的數(shù)目初始化函數(shù)Init()結(jié)束銀行家算法C語言程序:#include"iostream.h"#include"stdio.h"#define P_NUM 0X03#define MAX_available 0xAstructPCB{charstate;//狀態(tài)intrequest;//請求資源intmax;//最大需求量intneed;//需求量intallocation;//已經(jīng)分配量};voidrandomallocation(structPCBp[],intav);boolsafecheck(structPCBp[],intav);voidbankallocation(structPCBp[],intav);voidshow(structPCBp[],intav);voidmain(){structPCBprocess[P_NUM];//分配3個進程空間inti;intj;intk;intavailable=MAX_available;//可利用資源向量; printf("\t\t銀行家調(diào)度算法\n");printf("初始狀態(tài)最大的可利用資源MAX_available為:\n",MAX_available);for(i=0;i<5;i++)//為每個進程分配最大需求量{ printf("p%d->max:",i); scanf("%d",&process[i].max);if(process[i].max>MAX_available){printf("錯誤!最大需求量超過了可利用資源總量,請重新輸入!\n");i--;}else{do{ printf("\np%d->allocation:\n",i); scanf("%d",&process[i].allocation);}while((process[i].allocation>process[i].max)||(available-process[i].allocation<0));available=available-process[i].allocation;process[i].need=process[i].max-process[i].allocation;process[i].request=0;process[i].state='R';}//else}//forshow(process,available);printf("\n1--隨機分配算法2--銀行家算法\n");do{printf("請選擇:\n"); scanf("%d",&i);}while(!((i==1)||(i==2)));if(i==1)randomallocation(process,available);else{do{if(safecheck(process,available)==false){printf("\n當前為不安全狀態(tài)!\n");printf("1--退出2--重置");do{printf("\n請選擇:\n");cin>>k;}while((k!=1)&&(k!=2));if(k==2){available=MAX_available;for(j=0;j<5;j++){ printf("p%d->allocation:\n",j);//cin>>process[j].allocation; scanf("%d",&process[j].allocation);available=available-process[j].allocation;}//for(j=0;j<5;j++)}//if(k==2)}//if(safecheck(process,available)==false)else{k=0;break;}}while(k==2);//doif(k==1)return;elseif(k==0)bankallocation(process,available);}//else}//endmainvoidshow(structPCBp[],intav){inti;printf("\navailable=",av);printf("\nnumbermaxneedallocationstate\n");for(i=0;i<5;i++){printf("%d\t%d\t%d\t%d\t%d\n",i,p[i].max,p[i].need,p[i].allocation,p[i].state);}}voidrandomallocation(structPCBp[],intav){inti=0;intj=0;intw;inte;while(1){if(i==5)i=i-5;while(1){if(i==5)i=i-5;elseif(p[i].state=='R'){do{ printf("\np%d->request:\n",i); scanf("%d",&p[i].request);}while(p[i].request>(p[i].max-p[i].allocation));break;}elsei++;}if(p[i].request<=av){av=av-p[i].request;p[i].allocation=p[i].allocation+p[i].request;p[i].request=0;if(p[i].max==p[i].allocation){av=av+p[i].allocation;p[i].state='E';p[i].allocation=0;p[i].request=0;}j=0;while(j<5){if((p[j].request<=av)&&(p[j].state=='W')){av=av+p[j].allocation;p[j].request=0;p[j].state='E';p[j].allocation=0;}if((p[j].max<av+p[j].allocation)&&(p[j].state=='W')){p[j].state='R';}j++;}show(p,av);}else{p[i].state='W';show(p,av);}w=0;e=0;for(j=0;j<5;j++){if(p[j].state=='W')w++;elseif(p[j].state=='E')e++;elsebreak;}if(((w+e)==5)&&(w!=0)){printf("發(fā)生死鎖!\n");return;}elseif(e==5){printf("三個進程順利執(zhí)行完!\n");return;}i++;}}voidbankallocation(structPCBp[],intav)//銀行家算法函數(shù){ intorder[5];intk; intj=0;intrequest;intf;inti;show(p,av);while(1){request=0;k=-1;do{if(k!=-1) printf("不是安全狀態(tài)!\n");av=av+request;p[k].allocation=p[k].allocation-request;do{ printf("p->NO.:"); scanf("%d",&k);}while(p[k].state!='R');do{ printf("p->request:"); scanf("%d",&request);}while(request>(p[k].need));if(request>av){p[k].request=request;p[k].state='W';break;}p[k].allocation=p[k].allocation+request;av=av-request;}while(safecheck(p,av)!=true);if(p[k].allocation==p[k].max){p[k].state='E';av=av+p[k].allocation;p[k].allocation=0;p[k].need=0; order[j]=k;}for(i=0;i<5;i++){if((p[i].state=='W')&&(p[i].request<=av)){if(safecheck(p,av)==true){p[i].allocation=p[i].request+p[i].allocation;av=av-p[i].request;p[i].request=0;p[i].state='R';if(p[i].max==p[i].allocation){p[i].state='E';av=av+p[i].allocation;p[i].allocation=0;}}else{printf("\n不是安全狀態(tài)!原請求資源量無效。\n");p[i].request=0;p[i].state='R';}}}show(p,av);f=0;for(i=0;i<5;i++){if(p[i].state=='E')f++;}if(f==5){printf("**********所有進程順利執(zhí)行完!**********\n");printf("安全序列為:");for(i=0;i<5;i++) { inttemp; temp=order[i]; //cout<<"p"<<temp<<""; printf("p%d",temp); }//for printf("\n");break;}//if j++;}}boolsafecheck(structPCBp[],intav){boolfinish[5];intorder[5];inti;intj=0;intf=0;intk=0;intwork;inttemp;work=av;for(i=0;i<5;i++){order[i]=0;if(p[i].state=='E') {finish[i]=true;}else {finish[i]=false;}}//forwhile(k<5){for(i=0;i<5;i++){if((p[i].state=='W')&&(p[i].request<=work)&&(finish[i]==false)){temp=p[i].allocation;p[i].allocation=p[i].request+p[i].allocation;}//ifif(((p[i].allocation+work)>=p[i].max)&&(finish[i]==false)){work=p[i].allocation+work;finish[i]=true;order[j]=i;j++;if(p[i].state=='W') {p[i].allocation=temp;}}//if}//fork++;}//whilefor(i=0;i<5;i++){if(finish[i]==true) {f++;} }//for(i=0;i<5;i++)if(f==3) { returntrue; }elsereturnfalse;}五、實驗數(shù)據(jù)及處理結(jié)果六、實驗體會或?qū)Ω倪M實驗的建議通過這次實驗我對用銀行家算法實現(xiàn)資源分配有了一定的熟悉,對銀行家算法的步驟和相關數(shù)據(jù)結(jié)構(gòu)用法有了更深的理解,加深了解了死鎖產(chǎn)生的條件和原因。通過編程實現(xiàn)銀行家算法來預防死鎖,加深了對課堂上所授內(nèi)容的理解。在此實驗中為了便于檢驗算法正確與否,采取的數(shù)據(jù)為課本上所用到的數(shù)據(jù),在程序中也可以手動輸入資源,并且所有數(shù)據(jù)都放在外部文件中,這樣就不用每次都需要輸入數(shù)據(jù),減少了麻煩,同時也提高了程序的安全性,也提高了自己再次使用文件、寫文件的能力。七、參考資料《計算機操作系統(tǒng)》 南昌大學實驗報告(2)存儲管理的模擬實現(xiàn)學生姓名:學號:實驗類型:□驗證□綜合■設計□創(chuàng)新實驗日期:11.19,11.26,12.3實驗成績:一、實驗目的存儲管理的主要功能之一是合理地分配空間。請求頁式管理是一種常用的虛擬存儲管理技術(shù)。本實驗的目的是通過請求頁式存儲管理中頁面置換算法模擬設計,了解虛擬存儲技術(shù)的特點,掌握請求頁式管理的頁面置換算法。二、實驗內(nèi)容編程實現(xiàn)頁面置換算法,要求輸出頁面的置換過程,具體可以編程實現(xiàn)OPT、FIFO和LRU算法。三、實驗要求1、需寫出設計說明;2、設計實現(xiàn)代碼及說明3、運行結(jié)果;四、主要實驗步驟1、學習、理解好課本中頁式存儲管理中頁面置換算法的實例;2、根據(jù)課本中頁式存儲管理中頁面置換算法的描述,畫出程序流程圖;3、按照程序流程圖,用C語言編程并實現(xiàn)。4、上機運行編寫的程序,檢驗并且修正直至能夠得到正確的結(jié)果。流程圖C語言程序:
main()
{
intcunchufangwenyemian[4];/*存儲訪問的頁面*/
intcunchujisuanguocheng[3][4];/*存儲計算過程;*/
intcunchushifoumingzhong[4];/*存儲是否被命中*/
intlie,hang;/*循環(huán)變量列,行*/
intshifoumingzhong;/*在前一列的位置,沒有則為0;*/
intwenmenyemiangeshu=4;/*訪問頁面的個數(shù)*/
/*第一步,初始化*/
/*輸入訪問的頁面,存到存儲訪問的頁面的數(shù)組中*/
for(lie=0;lie<4;lie++)
{
printf("\n請輸入第%d個頁面:",lie);
scanf("%d",&cunchufangwenyemian[lie]);
}
/*初始化計算過程數(shù)組*/
for(lie=0;lie<4;lie++)
{
for(hang=0;hang<3;hang++)
{
cunchujisuanguocheng[hang][lie]=-1;
}
}
/*初始化是否沒有命中的數(shù)組*/
for(lie=0;lie<4;lie++)
{
cunchushifoumingzhong[lie]=0;
}
/*第二步,計算*/
/*察看是否命中*/
for
(wenmenyemiangeshu=0;wenmenyemiangeshu<4;wenmenyemiangeshu++)
{
/*對于某一列進行處理*/
lie=wenmenyemiangeshu;
if(lie==0)/*如果為第一列*/
{
cunchujisuanguocheng[0][lie]=cunchufangwenyemian[lie];
/*將頁面落下來*/
cunchushifoumingzhong[0]=0;
/*是否命中為0,不命中*/
}else
{/*如果不為第一列*/
shifoumingzhong=0;
/*假設沒命中*/
for(hang=0;hang<3;hang++)
{
if(
cunchujisuanguocheng[hang][lie-1]==cunchufangwenyemian[lie])
{
shifoumingzhong=hang+1;/*如果相同,則是否命中為命中的位置*/
}
}
cunchushifoumingzhong[lie]=shifoumingzhong;/*存儲命中位置*/
}
if(lie!=0)
{
if((shifoumingzhong!=0))/*是否命中*/
{/*如果命中,則不變*/
for(hang=0;hang<3;hang++)
{
cunchujisuanguocheng[hang][lie]=cunchujisuanguocheng[hang][lie-1];/*將上一列復制過來*/
}
}else
{/*如果沒有命中,則向下移一位,新的進來*/
for(hang=2;hang>0;hang--)
{
cunchujisuanguocheng[hang][lie]=cunchujisuanguocheng[hang-1][lie-1];/*將上一列逐個下移復制過來*/
}
cunchujisuanguocheng[0][lie]=cunchufangwenyemian[lie];/*最上面的等于新進來的*/
}
}
}
/*第三步,輸出*//*輸出訪問序列*/
for(lie=0;lie<4;lie++)
{
printf("%d
",cunchufangwenyemian[lie]);
}
printf("\n");/*輸出計算過程*/
for(hang=0;hang<3;hang++)
{
for(lie=0;lie<4;lie++)
{
printf("%d
",cunchujisuanguocheng[hang][lie]);
}
printf("\n");
}/*輸出是否命中*/
for(lie=0;lie<4;lie++)
{
printf("%d
",cunchushifoumingzhong[lie]);
}
}五、實驗數(shù)據(jù)及處理結(jié)果六、實驗體會或?qū)Ω倪M實驗的建議通過這次實驗,對請求頁式存儲管理中頁面置換算法有了一定的熟悉,對通過請求頁式存儲管理中頁面置換算法模擬設計有了更深的了解,對虛擬存儲技術(shù)的特點,請求頁式管理的頁面置換算法等有了更加深刻的了解。加深了對課堂上所講授的OPT、FIFO和LRU三種算法的理解。七、參考資料《計算機操作系統(tǒng)》南昌大學實驗報告(3)磁盤調(diào)度算法的模擬實現(xiàn)學生姓名:學號:專業(yè)班級:實驗類型:□驗證□綜合■設計□創(chuàng)新實驗日期:12.10,12.17,12.24實驗成績:一、實驗目的通過實驗加強對磁盤調(diào)度算法的理解和掌握。二、實驗內(nèi)容編寫程序?qū)崿F(xiàn)磁盤調(diào)度算法,具體可以編寫程序?qū)崿F(xiàn)FCFS算法、SSTF算法、SCAN算法和CSCAN算法之二。三、實驗要求1、需寫出設計說明;2、設計實現(xiàn)代碼及說明3、運行結(jié)果;四、主要實驗步驟1、學習、理解好課本中FCFS算法、SSTF算法、SCAN算法和CSCAN算法的實例;2、根據(jù)課本中FCFS算法、SSTF算法、SCAN算法和CSCAN算法的描述,畫出程序流程圖;3、按照程序流程圖,用C語言編程并實現(xiàn)。4、上機運行編寫的程序,檢驗并且修正直至能夠得到正確的結(jié)果。流程圖C語言程序://
t1.cpp
:
定義控制臺應用程序的入口點。
#include
"stdafx.h"
#include"math.h"
#include"stdlib.h"
#include"string.h"
struct
Head
{
int
nPosition;
bool
bVisited;
};
void
Visit(struct
Head
*pHead)
{
printf("visite
cy:%d\n",pHead->nPosition);
pHead->bVisited=true;
}
int
ReadInputKeyboard(struct
Head
*pHead,int
*pCurrentPosition,int
nMaxNumber)
{
int
i;
printf("please
input
Current
position:");
scanf("%d",pCurrentPosition);
printf("please
input
will
visit
position:");
for(i=0;i<nMaxNumber;i++)
{
scanf("%d",&pHead[i].nPosition);
pHead[i].bVisited=false;
if(pHead[i].nPosition<0)
break;
}
return
i;
}
int
ReadInputFile(struct
Head
*pHead,int
*pCurrentPosition,int
nMaxNumber)
{
int
i;
char
szFileName[256],*q,*p,szTemp[20];
printf("please
input
filename:");
scanf("%s",szFileName);
FILE
*pFile=fopen(szFileName,"r");
if(pFile==NULL)
{
printf("open
file
%s
error",szFileName);
return
-1;
}
for(i=0;!feof(pFile)
&&i<nMaxNumber;)
{
p=szFileName;
fgets(p,256,pFile);
while(q=strchr(p,','))
{
memset(szTemp,0,sizeof(szTemp)*sizeof(char));
strncpy(szTemp,p,q-p);
p=q+1;
if(i==0)
*pCurrentPosition=atoi(szTemp);
else
{
pHead[i-1].nPosition=atoi(szTemp);
pHead[i-1].bVisited=false;
}
i++;
}
memset(szTemp,0,sizeof(szTemp)*sizeof(char));
pHead[i-1].nPosition=atoi(p);
pHead[i-1].bVisited=false;
//i++;
}
fclose(pFile);
return
i;
}
int
FifoVisit(int
nCurrentPosition,struct
Head
*pHead,int
nNumber)
{
//FCFS算法
int
nHaveVisited=0;
int
nMoveDistance=0;
int
i;
while(nHaveVisited<nNumber)
{
for(i=0;i<nNumber;i++)
{
if(pHead[i].bVisited)
continue;
Visit(&pHead[i]);
nHaveVisited++;
nMoveDistance+=abs(nCurrentPosition-pHead[i].nPosition);
nCurrentPosition=pHead[i].nPosition;
}
}
printf("the
sum
of
move
distance:%d\n",nMoveDistance);
return
nMoveDistance;
}
int
SsfoVisit(int
nCurrentPosition,struct
Head
*pHead,int
nNumber)
{
//
SSTF算法
int
nHaveVisited=0;
int
nMoveDistance=0;
int
nMinDistance=0;
int
nMinIndex=0;
int
i;
while(nHaveVisited<nNumber)
{
nMinDistance=0xffff;
nMinIndex=0;
//找最小值
for(i=0;i<nNumber;i++)
{
if(pHead[i].bVisited)
continue;
if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition))
{
nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);
nMinIndex=i;
}
}
//訪問
Visit(&pHead[nMinIndex]);
nHaveVisited++;
nMoveDistance+=nMinDistance;
nCurrentPosition=pHead[nMinIndex].nPosition;
}
printf("the
sum
of
move
distance:%d\n",nMoveDistance);
return
nMoveDistance;
}
int
DtVisit(int
nCurrentPosition,bool
bOut,struct
Head
*pHead,int
nNumber)
{
//SCAN算法
int
nHaveVisited=0;
int
nMoveDistance=0;
int
nMinDistance=0;
int
nMinIndex=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《島》讀后感:2024年人類心理分析
- 部編版中考道德與法治一輪復習:人民當家作主-專項練習題(含答案)
- 掌握2024版ERP系統(tǒng):采購管理專業(yè)培訓教程
- 商混站(商品混凝土公司)安全風險分級管控和隱患排查治理雙體系方案全套資料匯編完整版
- 營養(yǎng)與健康-礦物質(zhì)
- 2024年保安員培訓:教學大綱的革新與挑戰(zhàn)
- 八年級生物上冊4.2.3鳥的生殖和發(fā)育導學案無答案新版濟南版
- 2024-2025學年新教材高中生物課時作業(yè)9生態(tài)系統(tǒng)的物質(zhì)循環(huán)含解析新人教版選擇性必修2
- 2024高考地理一輪復習課時規(guī)范練41世界重要地區(qū)含解析湘教版
- 2024-2025學年高中物理第五章萬有引力定律及其應用第2節(jié)萬有引力定律的應用教案3魯科版必修2
- 船運公司船舶管理部部門職責說明書
- 人教PEP小學三年級英語上冊知識點歸納
- 排球比賽記錄表
- 新人教版一年級數(shù)學上冊期末試卷
- 高二年級期中考試成績分析(課堂PPT)
- 學校安全檢查管理臺賬
- 中學文化地理興趣社章程及考評細則(共5頁)
- 小學二年級上冊音樂-第6課《小紅帽》--人音版(簡譜)(15張)ppt課件
- 鐵路物資管理模擬考試試題
- 初中歷史課堂教學如何體現(xiàn)學生的主體地位
- 部編版三年級上冊語文課件-習作六:這兒真美---(共19張PPT)部編版
評論
0/150
提交評論