![操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第1頁](http://file4.renrendoc.com/view/90be5b47e80e57d0aec3d36c34921774/90be5b47e80e57d0aec3d36c349217741.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第2頁](http://file4.renrendoc.com/view/90be5b47e80e57d0aec3d36c34921774/90be5b47e80e57d0aec3d36c349217742.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第3頁](http://file4.renrendoc.com/view/90be5b47e80e57d0aec3d36c34921774/90be5b47e80e57d0aec3d36c349217743.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第4頁](http://file4.renrendoc.com/view/90be5b47e80e57d0aec3d36c34921774/90be5b47e80e57d0aec3d36c349217744.gif)
![操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第5頁](http://file4.renrendoc.com/view/90be5b47e80e57d0aec3d36c34921774/90be5b47e80e57d0aec3d36c349217745.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc實(shí)
驗(yàn)
報(bào)
告
試驗(yàn)課程:
計(jì)算機(jī)操作系統(tǒng)
學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專業(yè)班級(jí):
電氣信息類III091班
02022年年212月月818日
目錄
操作系統(tǒng)安裝及其接口環(huán)境2編程實(shí)現(xiàn)銀行家安全算法7進(jìn)程調(diào)度算法的實(shí)現(xiàn)16存儲(chǔ)管理的模擬實(shí)現(xiàn)22
告南昌大學(xué)試驗(yàn)報(bào)告操作系統(tǒng)安裝及其接口環(huán)境學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專業(yè)班級(jí):
電Ⅲ091班
試驗(yàn)類型:□驗(yàn)證■綜合□設(shè)計(jì)□創(chuàng)新
試驗(yàn)日期:
試驗(yàn)成績:
一、試驗(yàn)?zāi)康氖煜indows//Linux操作系統(tǒng)的安裝過程與安裝方法,并把握該操作系統(tǒng)所提供的用戶接口環(huán)境,并為后續(xù)試驗(yàn)做好編程環(huán)境準(zhǔn)備。
二、試驗(yàn)內(nèi)容1、熟悉Windows//Linux操作系統(tǒng)的安裝過程與安裝方法,并把握該操作系統(tǒng)所提供的用戶接口環(huán)境,通過系統(tǒng)提供的用戶管理程序、查看系統(tǒng)中的用戶狀況、進(jìn)程、線程、內(nèi)存使用狀況等,學(xué)會(huì)使用它進(jìn)行監(jiān)視進(jìn)程的狀況、系統(tǒng)資源的使用狀況及用戶狀況。并為后續(xù)試驗(yàn)做好編程環(huán)境準(zhǔn)備。
2、用C語言編寫一小段程序,使其可以通過某個(gè)系統(tǒng)調(diào)用來獲得OS提供的某種服務(wù)。
三、試驗(yàn)要求1.了解所安裝的操作系統(tǒng)對(duì)軟硬件資源的具體要求;2.機(jī)器最低硬件配置要求;3.操作系統(tǒng)所提供的用戶接口環(huán)境的熟悉;4.了解主要BIOSCMOS參數(shù)的含義及其設(shè)置方法;5.把握程序編寫中系統(tǒng)調(diào)用的方法。
四、主要試驗(yàn)步驟1、可以通過Vmwareworkstation虛擬機(jī)來模擬并記錄安裝Windows和Linux的過程,主要要準(zhǔn)備光盤(虛擬機(jī)也可使用光盤鏡像ISO文件或精靈虛擬光驅(qū)),若計(jì)算機(jī)已經(jīng)裝有一個(gè)操作系統(tǒng),則在安裝之前要注意:假如是使用光盤用電腦自帶光驅(qū)安裝,則安裝之前必需設(shè)定計(jì)算機(jī)的BIOS,讓計(jì)算機(jī)從光驅(qū)啟動(dòng);若是使用USB光驅(qū)或者是U盤引導(dǎo),則要設(shè)定BIOS使計(jì)算機(jī)從USB接口啟動(dòng)。安裝系統(tǒng)主要需要輸入序列號(hào),設(shè)定管理員及使用者姓名和身份密碼。用戶可以選擇要安裝的系統(tǒng)程序(Linux為軟件包),或者也可以在安裝完后在操縱面板的添加/刪除程序中選擇。安裝方法一般來說使用光盤直接安裝,將光盤放入光驅(qū)中,沒有光驅(qū)的電腦可以使用USB光驅(qū)或者使用U盤安裝。
2、熟悉查看用戶的接口環(huán)境可以使用系統(tǒng)自帶的管理程序,操作如下:
"右擊我的電腦'"管理'"設(shè)備管理器',也可以"右擊我的電腦'"屬性'"硬件'"設(shè)備管理器',進(jìn)入設(shè)備管理器可以看到計(jì)算機(jī)的設(shè)備狀況,包括計(jì)算機(jī)的各個(gè)接口。
3、查看系統(tǒng)中的用戶狀況、進(jìn)程、線程、內(nèi)存使用狀況,可進(jìn)行如下操作:
"右擊我的電腦'"管理'"本地用戶和組'"用戶',這樣就可以查看系統(tǒng)中的用戶狀況,并可以對(duì)用戶進(jìn)行添加、刪除、禁用、修改等操作。
使用任務(wù)管理器可以看到系統(tǒng)中活動(dòng)的用戶、系統(tǒng)中的進(jìn)程、線程和內(nèi)存的使用狀況,進(jìn)行的操作如下:
"右擊任務(wù)欄'"任務(wù)管理器',或者直接在鍵盤上使用ctrl+alt+delete的快捷鍵開啟任
務(wù)管理器。在任務(wù)管理器中,點(diǎn)擊"進(jìn)程'就可以看見當(dāng)前計(jì)算機(jī)在運(yùn)行的進(jìn)程及該進(jìn)程的用戶、CPU占用率和內(nèi)存使用狀況。點(diǎn)擊"性能'即可看見計(jì)算機(jī)當(dāng)前CPU的使用、CPU使用記錄、PF使用率、頁面文件使用記錄和線程數(shù)。點(diǎn)擊"用戶'就可以看見當(dāng)前計(jì)算機(jī)活動(dòng)的用戶。
4、調(diào)用系統(tǒng)服務(wù):
開啟MicrosoftVisualC++6.0,新建C++SourseFile,寫入以下代碼:
#includestdlib.hvoidmain(){
system(date);}保存,使用工具編譯,得到結(jié)果。
五、試驗(yàn)數(shù)據(jù)及處理結(jié)果安裝WindowsXpSp2的過程:
安裝UbuntuLinux10.04的過程:
以下是計(jì)算機(jī)Xs19的狀況,Xs19中WindowsXp的設(shè)備管理器:
Xs19中WindowsXp的用戶狀況:
Xs19的任務(wù)管理器:
調(diào)度服務(wù)的結(jié)果:
六、試驗(yàn)體會(huì)或?qū)Ω倪M(jìn)試驗(yàn)的建議感覺這個(gè)試驗(yàn)不是光靠把握書上內(nèi)容就能做的,平日的實(shí)踐也是十分重要的,假如對(duì)計(jì)算機(jī)十分熟悉的話,這個(gè)試驗(yàn)做起來難度很小。在做的時(shí)候基本上可以完成,中間碰見一個(gè)問題,就是對(duì)計(jì)算機(jī)有的系統(tǒng)服務(wù)不熟悉,所以要用C語言編程時(shí)感覺有點(diǎn)不知所措。
七、參考資料《計(jì)算機(jī)操作系統(tǒng)》(第三版)
《計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書》
告南昌大學(xué)試驗(yàn)報(bào)告編程實(shí)現(xiàn)銀行家安全算法學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專業(yè)班級(jí):
電Ⅲ091班
試驗(yàn)類型:□驗(yàn)證■綜合□設(shè)計(jì)□創(chuàng)新
試驗(yàn)日期:
試驗(yàn)成績:
一、試驗(yàn)?zāi)康耐ㄟ^試驗(yàn)加強(qiáng)對(duì)銀行家安全算法的理解和把握。
二、試驗(yàn)內(nèi)容熟悉避免死鎖發(fā)生的方法,死鎖與安全序列的關(guān)系,編程實(shí)現(xiàn)銀行家算法,要求輸出進(jìn)程的安全序列。
三、試驗(yàn)要求1、需寫出設(shè)計(jì)說明;2、設(shè)計(jì)實(shí)現(xiàn)代碼及說明3、運(yùn)行結(jié)果;四、主要試驗(yàn)步驟1、分析銀行家算法結(jié)構(gòu);2、畫出銀行家算法的流程圖,即設(shè)計(jì)說明;3、根據(jù)畫出的流程圖使用C語言編寫相應(yīng)的代碼(代碼過長,放到最終);程序主要由main函數(shù)和以下幾個(gè)函數(shù)組成:
voidinput();用戶輸入銀行家算法的初始數(shù)據(jù);voidoutput();輸出當(dāng)前系統(tǒng)資源分派狀況;voidchange();當(dāng)請(qǐng)求資源滿足要求時(shí),進(jìn)行分派,系統(tǒng)資源發(fā)生改變;intcheck();安全性算法,檢查是否存在安全序列;voidoutputsafe();輸出安全序列的資源分派表。
4、檢查代碼,將編出的代碼編譯、鏈接,驗(yàn)證其正確性。
開始輸入銀行家算法初始數(shù)據(jù)執(zhí)行安全性算法數(shù)據(jù)是否正確是否存在安全序列輸入進(jìn)程Pi發(fā)出的請(qǐng)求向量請(qǐng)求資源是否小于需求資源系統(tǒng)將資源分派給Pi執(zhí)行算法的是否為初始數(shù)據(jù)終止資源分派無效,恢復(fù)分派前的系統(tǒng)資源狀況輸出當(dāng)前資源分派表NNYYNNYYNNYY輸出安全序列的資源狀況是否有進(jìn)程發(fā)出請(qǐng)求向量NNYYNNYY請(qǐng)求資源是否小于系統(tǒng)資源YY進(jìn)程Pi需等待NNYY
五、試驗(yàn)數(shù)據(jù)及處理結(jié)果
六、試驗(yàn)體會(huì)或?qū)Ω倪M(jìn)試驗(yàn)的建議體會(huì):編寫銀行家算法需要較好分析能力,C語言也要把握的很好,而且需要細(xì)心和極大地耐心。我的程序在最開始編出來的第一份代碼編譯時(shí)大大小小一堆錯(cuò)誤,有些是一個(gè)小錯(cuò)誤導(dǎo)致了下面全錯(cuò),這些小錯(cuò)誤在一百多行里找起來十分吃力。然后小錯(cuò)誤全部找出來以后,再編譯,錯(cuò)誤沒有了,但是得到的結(jié)果卻是錯(cuò)誤的,這樣又要開始一行一行分析,看是哪里出了問題。到最終得到了想要的結(jié)果以后,程序還需要修飾,至少要輸出要簡(jiǎn)單明朗,要讓別人一運(yùn)行這個(gè)程序就知道自己在什么時(shí)候該輸入什么數(shù)據(jù),數(shù)據(jù)是什么作用,而不是只有自己知道輸進(jìn)去的是什么東西。
七、參考資料《計(jì)算機(jī)操作系統(tǒng)》《C程序設(shè)計(jì)》《C語言程序設(shè)計(jì)_現(xiàn)代方法》八、試驗(yàn)代碼#includestdio.h#includestdlib.h#includestring.hintmax[5][3];
//開始定義銀行家算法中需要用到的數(shù)據(jù)intallocation[5][3];intneed[5][3];intavailable[3];intrequest[5][3];char*finish[5];intsafe[5];intn,i,m;intk=0;
intj=0;intwork[3];intworks[5][3];voidstart();//表示程序開始voidend();//表示程序終止voidinput();//輸入數(shù)據(jù)voidoutput();//輸出數(shù)據(jù)voidchange();//系統(tǒng)分派資源,原有資源狀況改變voidoutputsafe();//輸出安全序列的資源分派狀況intcheck();//安全性算法voidmain()
//主程序開始{
start();
for(;j==0;)
//確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入
{
input();
printf(以下為進(jìn)程資源狀況,請(qǐng)確認(rèn)其是否正確:\n);
output();
printf(數(shù)據(jù)是否無誤:\n正確:輸入\n錯(cuò)誤:輸入\n請(qǐng)輸入:);
scanf(%d,j);
}
printf(數(shù)據(jù)確認(rèn)無誤,算法繼續(xù)。\n);
if(check()==0)
//若check函數(shù)返回值為,表示輸入的初始數(shù)據(jù)找不到安全序列,無法進(jìn)行下一步,程序終止
{
end();
exit(0);
}
for(;j==1;)
//當(dāng)有多個(gè)進(jìn)程請(qǐng)求資源時(shí),循環(huán)開始
{
printf(請(qǐng)輸入請(qǐng)求資源的進(jìn)程i(0、、、、):);
//輸入發(fā)出請(qǐng)求向量的進(jìn)程及請(qǐng)求向量
scanf(%d,i);
printf(請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:,i,i);
for(n=0;n3;n++)
scanf(%d,request[i][n]);
for(;request[i][0]need[i][0]||request[i][1]need[i][1]||request[i][2]need[i][2];)//若請(qǐng)求向量大于需求資源,則認(rèn)為是輸入錯(cuò)誤,要求重新輸入
{
printf(數(shù)據(jù)輸入有誤,請(qǐng)重試!\n請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:,i,i);
for(n=0;n3;n++)
scanf(%d,request[i][n]);
}
if(request[i][0]=available[0]request[i][1]=available[1]request[i][2]=available[2])
//判斷系統(tǒng)是否有足夠資源提供分派
{
printf(系統(tǒng)正在為進(jìn)程P%d分派資源\n,i);
change();
//分派資源
j=0;
}
else
printf(系統(tǒng)沒有足夠的資源,進(jìn)程P%d需要等待。\n,i);
if(j==0)
//j=0表示系統(tǒng)有足夠資源分派的狀況
{
printf(當(dāng)前系統(tǒng)資源狀況如下:\n);
//輸出分派資源后的系統(tǒng)資源分派狀況
output();
if(check()==0)
//若找不到安全系列,則之前的資源分派無效
{
printf(本次資源分派作廢,恢復(fù)原來的資源分派狀態(tài)。\n);
for(m=0;m3;m++)
//恢復(fù)分派資源前的系統(tǒng)資源狀態(tài)
{
available[m]+=request[i][m];
allocation[i][m]-=request[i][m];
need[i][m]+=request[i][m];
}
output();
//輸出系統(tǒng)資源狀態(tài)
}
}
printf(是否還有進(jìn)程請(qǐng)求資源?\n是:輸入\n否:輸入\n請(qǐng)輸入:);
scanf(%d,j);
//若還有進(jìn)程請(qǐng)求資源,j=1,之前的for循環(huán)條件滿足
}
end();}voidline()
//美化程序,使程序運(yùn)行時(shí)更加明朗美觀{
printf(\n);}
voidstart()
//表示銀行家算法開始{
line();
printf(
銀行家算法開始\n);
printf(
DesignedbyZhangHong\n);
line();}
voidend()
//表示銀行家算法終止
{
line();
printf(
銀行家算法終止,感謝使用\n);
line();}
voidinput()
//輸入銀行家算法起始各項(xiàng)數(shù)據(jù){
for(n=0;n5;n++)
{
printf(請(qǐng)輸入進(jìn)程P%d的相關(guān)信息:\n,n);
printf(Max:);
for(m=0;m3;m++)
scanf(%d,max[n][m]);
printf(Allocation:);
for(m=0;m3;m++)
scanf(%d,allocation[n][m]);
for(m=0;m3;m++)
need[n][m]=max[n][m]-allocation[n][m];
}
printf(請(qǐng)輸入系統(tǒng)可利用資源數(shù)Available:);
for(m=0;m3;m++)
scanf(%d,available[m]);}
voidoutput()
//輸出系統(tǒng)現(xiàn)有資源狀況{
line();
printf(資源狀況
Max
Allocation
Need
Available\n);
printf(進(jìn)程
A
B
C
A
B
C
A
B
C
A
B
C\n);
line();
for(n=0;n5;n++)
{
printf(P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d,n,max[n][0],max[n][1],max[n][2],allocation[n][0],allocation[n][1],allocation[n][2],need[n][0],need[n][1],need[n][2]);
if(n==0)
printf(%6d%3d%3d\n,available[0],available[1],available[2]);
else
printf(\n);
}
line();}
voidchange()
//當(dāng)Request[i,j]=Available[j]時(shí),系統(tǒng)把資源分派給進(jìn)程P[i],Available[j]和Need[i,j]發(fā)生改變{
for(m=0;m3;m++)
{
available[m]-=request[i][m];
allocation[i][m]+=request[i][m];
need[i][m]-=request[i][m];
}}
voidoutputsafe()
//輸出安全序列的資源分派表{
printf(該安全序列的資源分派圖如下:\n);
line();
printf(資源狀況
Work
Need
AllocationWork+Allocation
Finish\n);
printf(進(jìn)程
A
B
C
A
B
C
A
B
C
A
B
C\n);
line();
for(n=0;n5;n++)
printf(P%d%9d%3d%3d%5d%3d%3d%5d%3d%3d%6d%3d%3d%12s\n,safe[n],works[safe[n]][0],works[safe[n]][1],works[safe[n]][2],need[safe[n]][0],need[safe[n]][1],need[safe[n]][2],allocation[safe[n]][0],allocation[safe[n]][1],allocation[safe[n]][2],works[safe[n]][0]+allocation[safe[n]][0],works[safe[n]][1]+allocation[safe[n]][1],works[safe[n]][2]+allocation[safe[n]][2],finish[n]);
line();}
intcheck()
//安全性算法{
printf(開始執(zhí)行安全性算法\n);
for(m=0;m3;m++)
//數(shù)組work和finish初始化
work[m]=available[m];
for(n=0;n5;n++)
{
finish[n]=false;
safe[n]=0;
}
k=0;
for(m=0;m5;m++)
for(n=0;n5;n++)
if(strcmp(finish[n],false)==0need[n][0]=work[0]need[n][1]=work[1]need[n][2]=work[2])
//查找可以分派資源但尚未分派到資源的進(jìn)程
{
safe[k]=n;
//以數(shù)組safe[k]記錄下來各個(gè)進(jìn)程得到分派的資源的順序
works[safe[k]][0]=work[0];
works[safe[k]][1]=work[1];
works[safe[k]][2]=work[2];
work[0]+=allocation[n][0];
//進(jìn)程執(zhí)行后釋放出分派給它的資源
work[1]+=allocation[n][1];
work[2]+=allocation[n][2];
finish[n]=ture;//finish[n]變?yōu)橐允驹撨M(jìn)程完成本次分
k++;
}
for(m=0;m5;m++)
//判斷是否所有進(jìn)程分派資源完成
{
if(strcmp(finish[m],false)==0)
{
printf(找不到安全序列,系統(tǒng)處于擔(dān)心全狀態(tài)。\n);
return0;
//找不到安全序列,終止check函數(shù),返回
}
else
if(m==4)
//此處m=4表示所有數(shù)組finish的所有元素都為ture
{
printf(找到安全序列P%d-P%d-P%d-P%d-P%d,系統(tǒng)是安全的\n,safe[0],safe[1],safe[2],safe[3],safe[4]);
j=1;
outputsafe();
//輸出安全序列的資源分派表
}
}
return1;}
告南昌大學(xué)試驗(yàn)報(bào)告
進(jìn)程調(diào)度算法的實(shí)現(xiàn)學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專業(yè)班級(jí):
電Ⅲ091班
試驗(yàn)類型:□驗(yàn)證■綜合□設(shè)計(jì)□創(chuàng)新
試驗(yàn)日期:
試驗(yàn)成績:
一、試驗(yàn)?zāi)康耐ㄟ^試驗(yàn)加強(qiáng)對(duì)進(jìn)程調(diào)度算法的理解和把握。
二、試驗(yàn)內(nèi)容編寫程序?qū)崿F(xiàn)進(jìn)程調(diào)度算法,具體可以編寫程序?qū)崿F(xiàn)先來先服務(wù)算法或優(yōu)先度高者調(diào)度算法。
三、試驗(yàn)要求1、需寫出設(shè)計(jì)說明;2、設(shè)計(jì)實(shí)現(xiàn)代碼及說明3、運(yùn)行結(jié)果;四、主要試驗(yàn)步驟1、分析試驗(yàn)內(nèi)容,畫出算法流程圖;2、根據(jù)流程圖寫出試驗(yàn)代碼;3、編譯代碼,驗(yàn)證結(jié)果正確與否;4、對(duì)程序進(jìn)行修改,得到最終結(jié)果。
流程圖如下:
開始系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)將數(shù)據(jù)依照到達(dá)時(shí)間從小到大排序用戶輸入數(shù)據(jù)進(jìn)程到達(dá)時(shí)前一個(gè)進(jìn)程是否已經(jīng)完成完成時(shí)間=服務(wù)時(shí)間+前一個(gè)進(jìn)程完成時(shí)間完成時(shí)間=服務(wù)時(shí)間+到達(dá)時(shí)間周轉(zhuǎn)時(shí)間=完成時(shí)間-到達(dá)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間=完成時(shí)間/服務(wù)時(shí)間是否所有進(jìn)程已完成計(jì)算輸出結(jié)果終止YNYNYN
五、試驗(yàn)數(shù)據(jù)及處理結(jié)果
六、試驗(yàn)體會(huì)或?qū)Ω倪M(jìn)試驗(yàn)的建議在做這個(gè)試驗(yàn)的時(shí)候,一開始以為很簡(jiǎn)單,只要做簡(jiǎn)單的加減乘除就行了,但是細(xì)心做過以后發(fā)現(xiàn)需要考慮好多狀況。譬如說輸入進(jìn)程到達(dá)時(shí)間的時(shí)候,要是亂序的該怎么辦?還有到達(dá)時(shí)間和服務(wù)時(shí)間等等定義的都是整型變量,但是帶權(quán)周轉(zhuǎn)時(shí)間確會(huì)得到小數(shù),此時(shí)就需要用到強(qiáng)制轉(zhuǎn)換。在做系統(tǒng)產(chǎn)生隨機(jī)數(shù)的時(shí)候也要考慮隨機(jī)數(shù)的范圍,如到達(dá)時(shí)間可以為0,但是服務(wù)時(shí)間卻不能為0,否則帶權(quán)周轉(zhuǎn)時(shí)間的計(jì)算會(huì)出錯(cuò)。
七、參考資料《計(jì)算機(jī)操作系統(tǒng)》《計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書》《C程序設(shè)計(jì)》《C語言程序設(shè)計(jì)_現(xiàn)代方法》八、試驗(yàn)代碼#includestdio.h
#includestdlib.h#includetime.h#defineN5
//進(jìn)程個(gè)數(shù),可改變intrt[N];
//到達(dá)時(shí)間intst[N];
//服務(wù)時(shí)間intct[N];
//完成時(shí)間intcyt[N];//周轉(zhuǎn)時(shí)間floatrct[N];//帶權(quán)周轉(zhuǎn)時(shí)間floatav[2];//平均數(shù)intn,m;voidstart();//表示程序開始voidend();//表示程序終止voidinput();//輸入數(shù)據(jù)voidrandom();//系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)voidordination();//對(duì)數(shù)據(jù)按到達(dá)時(shí)間進(jìn)行排序voidfcfs();//先來先服務(wù)計(jì)算voidoutput();//輸出結(jié)果voidmain(){
start();
intwhich;
intc=1;
for(;c==1;)
{
for(;;)
{
printf(輸入數(shù)據(jù)還是由系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)?\n1、輸入數(shù)據(jù)\t2、系統(tǒng)隨機(jī)產(chǎn)生數(shù)據(jù)\n請(qǐng)輸入:);
scanf(%d,which);
if(which==1)
{
input();
break;
}
else
if(which==2)
{
random();
break;
}
else
printf(輸入錯(cuò)誤,請(qǐng)重新輸入!);
}
ordination();
//進(jìn)程依照到達(dá)時(shí)間進(jìn)行排序
fcfs();
output();
printf(繼續(xù)輸入,退出輸入。請(qǐng)輸入:);
scanf(%d,c);
}
end();}voidline()
//美化程序,使程序運(yùn)行時(shí)更加明朗美觀{
printf(\n);}voidstart()
//表示FCFS算法開始{
line();
printf(
FCFS算法開始\n);
printf(
DesignedbyZhangHong\n);
line();}voidend()
//表示FCFS算法終止{
line();
printf(
FCFS算法終止,感謝使用\n);
line();}voidinput(){
printf(請(qǐng)輸入%d個(gè)進(jìn)程的到達(dá)時(shí)間:,N);
for(n=0;nN;n++)
scanf(%d,rt[n]);
printf(請(qǐng)輸入%d個(gè)進(jìn)程對(duì)應(yīng)的服務(wù)時(shí)間:,N);
for(n=0;nN;n++)
scanf(%d,st[n]);}voidrandom(){
srand((unsigned)time(NULL));
for(n=0;nN;n++)
{
rt[n]=rand()%100;
for(m=0;mn;m++)
if(n!=0rt[n]==rt[m])
{
rt[n]=rand()%100;
m=0;
}
st[n]=rand()%98+1;
for(m=0;mn;m++)
if(n!=0st[n]==st[m])
{
st[n]=rand()%98+1;
m=0;
}
}}voidordination()
//重新排序,應(yīng)對(duì)出現(xiàn)輸入的到達(dá)時(shí)間為亂序的狀況{
inttemp;
for(n=0;nN;n++)
for(m=0;mN-n-1;m++)
if(rt[m+1]rt[m])
{
temp=rt[m+1];
rt[m+1]=rt[m];
rt[m]=temp;
temp=st[m+1];
st[m+1]=st[m];
st[m]=temp;
}}voidfcfs()
//執(zhí)行fcfs算法{
av[0]=0;
av[1]=0;
ct[0]=rt[0]+st[0];
for(n=1;nN;n++)
{
if(ct[n-1]=rt[n])
//考慮當(dāng)前一個(gè)進(jìn)程完成而后一個(gè)進(jìn)程還沒有到達(dá)的狀況
ct[n]=ct[n-1]+st[n];
else
ct[n]=rt[n]+st[n];
}
for(n=0;nN;n++)
cyt[n]=ct[n]-rt[n];
for(n=0;nN;n++)
rct[n]=(float)cyt[n]/(float)st[n];
for(n=0;nN;n++)
{
av[0]+=(float)cyt[n]/N;
av[1]+=rct[n]/N;
}}voidoutput()
//輸出結(jié)果{
line();
printf(進(jìn)程名\t);
for(n=0;nN;n++)
printf(\t%c,65+n);
printf(\t平均\n到達(dá)時(shí)間);
for(n=0;nN;n++)
printf(\t%d,rt[n]);
printf(\n服務(wù)時(shí)間);
for(n=0;nN;n++)
printf(\t%d,st[n]);
printf(\n完成時(shí)間);
for(n=0;nN;n++)
printf(\t%d,ct[n]);
printf(\n周轉(zhuǎn)時(shí)間);
for(n=0;nN;n++)
printf(\t%d,cyt[n]);
printf(\t%0.1f,av[0]);
printf(\n帶權(quán)周轉(zhuǎn)時(shí)間);
for(n=0;nN;n++)
printf(\t%0.1f,rct[n]);
printf(\t%0.1f,av[1]);
printf(\n);
line();}
南昌大學(xué)試驗(yàn)報(bào)告
存儲(chǔ)管理的模擬實(shí)現(xiàn)學(xué)生姓名:
張虹
學(xué)
號(hào):
6100409033
專業(yè)班級(jí):
電Ⅲ091班
試驗(yàn)類型:□驗(yàn)證■綜合□設(shè)計(jì)□創(chuàng)新
試驗(yàn)日期:
試驗(yàn)成績:
一、
試驗(yàn)?zāi)康拇鎯?chǔ)管理的主要功能之一是合理地分派空間。請(qǐng)求頁式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本試驗(yàn)的目的是通過請(qǐng)求頁式存儲(chǔ)管理中頁面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),把握請(qǐng)求頁式管理的頁面置換算法。
二、
試驗(yàn)內(nèi)容1.過隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共320條指令。其地址按下述原則生成:
①50%的指令是順序執(zhí)行的;②25%的指令是均勻分布在前地址部分;③25%的指令是均勻分布在后地址部分;具體的實(shí)施方法是:
A.在[0,319]的指令地址之間隨機(jī)選區(qū)一起點(diǎn)M;B.順序執(zhí)行一條指令,即執(zhí)行地址為M+1的指令;C.在前地址[0,M+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為M;D.順序執(zhí)行一條指令,其地址為M+1;E.在后地址[M+2,319]中隨機(jī)選取一條指令并執(zhí)行;F.重復(fù)AE,直到執(zhí)行320次指令。
2.指令序列變換成頁地址流,設(shè):
(1)
頁面大小為1K;(2)
用戶內(nèi)存容量為4頁到32頁;(3)
用戶虛存容量為32K。
在用戶虛存中,按每K存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:
第0條第9條指令為第0頁(對(duì)應(yīng)虛存地址為[0,9]);第10條第19條指令為第1頁(對(duì)應(yīng)虛存地址為[10,19]);。。。。。。。。。。。。。。。。。。。。。
第310條第319條指令為第31頁(對(duì)應(yīng)虛存地址為[310,319]);按以上方式,用戶指令可組成32頁。
3.計(jì)算并輸出下述各種算法在不同內(nèi)存容量下的命中率。
A.FIFO先進(jìn)先出的算法B.LRU最近最少使用算法C.LFU最少訪問頁面算法三、
試驗(yàn)要求1、需寫出設(shè)計(jì)說明;2、設(shè)計(jì)實(shí)現(xiàn)代碼及說明3、運(yùn)行結(jié)果;
四、
主要試驗(yàn)步驟1、分析算法結(jié)構(gòu);2、畫出算法的流程圖,即設(shè)計(jì)說明;3、根據(jù)畫出的流程圖使用C語言編寫相應(yīng)的代碼(代碼過長,放到最終);程序主要由main函數(shù)和以下幾個(gè)函數(shù)組成:
voidinitialization();初始化內(nèi)存數(shù)據(jù)voidFIFO();FIFO先進(jìn)先出算法;voidLRU();LRU最久未使用算法;voidLFU();LFU最近最久未使用算法;4、檢查代碼,將編出的代碼編譯、鏈接,驗(yàn)證其正確性。
開始按要求產(chǎn)生320個(gè)隨機(jī)數(shù)將隨機(jī)數(shù)轉(zhuǎn)換成頁面用戶內(nèi)存容量ii==44ii32??FIFO頁面置換算法LRU頁面置換算法LFU頁面置換算法ii==ii++11終止NNYY頁面置換算法整體結(jié)構(gòu)
開始內(nèi)存數(shù)據(jù)初始化,物理塊00mmii中頁面停留時(shí)間time[[mm]=mm++11nn==00用戶內(nèi)存中是否已存在要調(diào)用的頁面用戶內(nèi)存中是否存在空物理塊NN將頁面調(diào)入空物理塊中,該物理塊time[[mm]=00對(duì)比所有物理塊的time[[mm]],找到最大值,將頁面調(diào)入最大值所在物理塊,該物理塊time[[mm]=00所有已經(jīng)存入頁面的內(nèi)存time[[mm]++,nn++NNYYYYnn320??終止將頁面pp[[nn]]調(diào)入內(nèi)存YYNNFIFO頁面置換算法
開始內(nèi)存數(shù)據(jù)初始化,物理塊00mmii中頁面停留時(shí)間time[[mm]=mm++11nn==00用戶內(nèi)存中是否已存在要調(diào)用的頁面用戶內(nèi)存中是否存在空物理塊NN將頁面調(diào)入空物理塊中,該物理塊time[[mm]=00對(duì)比所有物理塊的time[[mm]],找到最大值,將頁面調(diào)入最大值所在物理塊,該物理塊time[[mm]=00所有已經(jīng)存入頁面的內(nèi)存time[[mm]++,nn++NNYYYYnn320??終止將頁面pp[[nn]]調(diào)入內(nèi)存YYNN存在該頁面的物理塊timg[[mm]=00LRU頁面置換算法
開始內(nèi)存數(shù)據(jù)初始化,物理塊00mmii中頁面停留時(shí)間time[[mm]=mm++11nn==00nn50??將頁面pp[[nn]]調(diào)入內(nèi)存對(duì)比物理塊中頁面在之前的50次調(diào)用中出現(xiàn)的次數(shù),將頁面pp[[nn]]調(diào)入使用最少的頁面占用的物理塊nn320??終止依照LRU頁面置換算法調(diào)入頁面nn++YYNNYYNNLFU頁面置換算法
五、
試驗(yàn)數(shù)據(jù)及處理結(jié)果
六、
試驗(yàn)體會(huì)或?qū)Ω倪M(jìn)試驗(yàn)的建議我做試驗(yàn)的時(shí)候,主要的難度是在幾個(gè)特別狀況的處理上,如LRU內(nèi)存中的頁面都是之前沒有調(diào)用過的,那怎么辦,還有就是LFU中還沒有達(dá)到"一定時(shí)間間隔'的條件時(shí)怎么辦?另外就是由于試驗(yàn)使用的是系統(tǒng)產(chǎn)生的隨機(jī)數(shù),所以難以驗(yàn)證明驗(yàn)結(jié)果的正確性。
試驗(yàn)產(chǎn)生隨機(jī)指令的方法是:
1、在[0,319]的指令地址之間隨機(jī)選區(qū)一起點(diǎn)M;2、順序執(zhí)行一條指令,即執(zhí)行地址為M+1的指令;3、在前地址[0,M+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為M;4、順序執(zhí)行一條指令,其地址為M+1;5、在后地址[M+2,319]中隨機(jī)選取一條指令并執(zhí)行;6、重復(fù)AE,直到執(zhí)行320次指令。
那么,產(chǎn)生的第一個(gè)隨機(jī)起點(diǎn)M指令是否執(zhí)行?這對(duì)結(jié)果影響對(duì)比大,若起點(diǎn)M執(zhí)行,那么命中率至少能提高0.2以上!
七、
參考資料《計(jì)算機(jī)操作系統(tǒng)》《計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書》《C程序設(shè)計(jì)》《C語言程序設(shè)計(jì)_現(xiàn)代方法》《計(jì)算機(jī)操作系統(tǒng)教程習(xí)題解答與試驗(yàn)指導(dǎo)(其次版)》八、
試驗(yàn)代碼#includestdio.h#includestdlib.h#includetime.h#defineN320#defineM32#defineR32#defineruntime100//程序運(yùn)行次數(shù),保證結(jié)果的確切性intrun;floataverage[3][32];//取平均數(shù),使結(jié)果更加確切ints,i;//s表示產(chǎn)生的隨機(jī)數(shù),i表示物理塊數(shù)intm,n,h;//循環(huán)專用intk,g,f;intsum;//缺頁次數(shù)floatr;//rate命中率intp[N];//page頁數(shù)inta[N];//執(zhí)行的指令intpb[M];//physicalblock用戶內(nèi)存容量(物理塊)
voidFIFO();voidLRU();voidLFU();voidline();voidstart();voidend();voidmain(){
start();
srand((int)time(NULL));//以計(jì)算機(jī)當(dāng)前時(shí)間作為隨機(jī)數(shù)種子
for(run=0;runruntime;run++)//共產(chǎn)生"runtime'次隨機(jī)數(shù),保證結(jié)果的確切性
{
for(n=0;nN;n+=3)
{
s=rand()%N+0;//隨機(jī)產(chǎn)生一條指令
a[n]=s+1;//順序執(zhí)行一條指令
s=rand()%(a[n]+1);//執(zhí)行前地址指令M`
a[n+1]=s+1;
s=rand()%(N-a[n+1]-1)+(a[n+1]+1);
a[n+2]=s;
}
for(n=0;nN;n++)
p[n]=a[n]/10;//得到指令相對(duì)的頁數(shù)
for(i=4;i=32;i++)
{
FIFO();
LRU();
LFU();
}
}
printf(物理塊數(shù)\tFIFO\t\tLRU\t\tLFU\n);
line();
for(i=4;i=32;i++)
{
printf(\n
%2d:,i);
for(m=0;m3;m++)
printf(\t\t%6.4f,average[m][i]);//輸出"runtime'次運(yùn)行后的平均數(shù)
}
end();}voidinitialization()//用戶內(nèi)存及相關(guān)數(shù)據(jù)初始化{
for(n=0;nM;n++)
pb[n]=-1;
sum=0;
r=0;
k=0;
g=-1;
f=-1;}
voidFIFO()//先進(jìn)先出置換算法{
inttime[M];//定義進(jìn)入內(nèi)存時(shí)間長度數(shù)組
intmax;//max表示進(jìn)入內(nèi)存時(shí)間最久的,即最先進(jìn)去的
initialization();
for(m=0;mi;m++)
time[m]=m+1;
for(n=0;nN;n++)
{
k=0;
for(m=0;mi;m++)
if(pb[m]==p[n])//表示內(nèi)存中已有當(dāng)前要調(diào)入的頁面
{
g=m;
break;
}
for(m=0;mi;m++)
if(pb[m]==-1)//用戶內(nèi)存中存在空的物理塊
{
f=m;
break;
}
if(g!=-1)
g=-1;
else
{
if(f==-1)//找到最先進(jìn)入內(nèi)存的頁面
{
max=time[0];
for(m=0;mi;m++)
if(time[m]max)
{
max=time[m];
k=m;
}
pb[k]=p[n];
time[k]=0;//該物理塊中頁面停留時(shí)間置零
sum++;//缺頁數(shù)+1
}
else
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for(m=0;mipb[m]!=-1;m++)
time[m]++;//物理塊中現(xiàn)有頁面停留時(shí)間+1
/*if(n==0i==6)
printf(\n);
if(i==6n=30)
{
printf(%d,p[n]);
for(m=0;mi;m++)
printf(%d,pb[m]);
printf(\n);
}*/
}
r=1-(float)sum/N;
average[0][i]+=r/runtime;}
voidLRU()//最近最少使用算法{
inttime[M];
intmax;
initialization();
for(m=0;mi;m++)
time[m]=m+1;
for(n=0;nN;n++)
{
k=0;
for(m=0;mi;m++)
if(pb[m]==p[n])
{
g=m;
break;
}
for(m=0;mi;m++)
if(pb[m]==-1)
{
f=m;
break;
}
if(g!=-1)
{
time[g]=0;
g=-1;
}
else
{
if(f==-1)
{
max=time[0];
for(m=0;mi;m++)
if(time[m]max)
{
k=m;
max=time[m];
}
pb[k]=p[n];
time[k]=0;
sum++;
}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國鋁合金梳狀加熱器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國海島絲行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年度工地施工人員健康保險(xiǎn)及意外傷害合同
- 2025年度圓管涵工程材料采購及供應(yīng)合同
- 2025年度環(huán)保項(xiàng)目居間合同標(biāo)的交付與物權(quán)轉(zhuǎn)移實(shí)施辦法
- 2025年度建筑廢棄物回收利用合同樣本
- 2025年度公司股份委托管理合同范本
- 二零二五版農(nóng)場(chǎng)租賃合同范本:農(nóng)業(yè)科技研發(fā)租賃合同
- 2025年度新能源汽車充電樁建設(shè)與運(yùn)營合作合同
- 2025年度大型商業(yè)綜合體空?qǐng)龅刈赓U合同范本
- 2024年版古董古玩買賣合同:古玩交易稅費(fèi)及支付規(guī)定
- 幼兒園費(fèi)用報(bào)銷管理制度
- 【7歷期末】安徽省宣城市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試歷史試題
- 春節(jié)后安全生產(chǎn)開工第一課
- 2025光伏組件清洗合同
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年網(wǎng)格員考試題庫完美版
- 《建筑與市政工程防水規(guī)范》解讀
- 審計(jì)合同終止協(xié)議書(2篇)
- 2024年重慶市中考數(shù)學(xué)試題B卷含答案
- 腰椎間盤突出癥護(hù)理查房
評(píng)論
0/150
提交評(píng)論