操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告doc_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

評(píng)論

0/150

提交評(píng)論