




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——廣工操作系統(tǒng)試驗(yàn)報(bào)告
操作系統(tǒng)試驗(yàn)報(bào)告
學(xué)生學(xué)院計(jì)算機(jī)學(xué)院專業(yè)班級2023級計(jì)算機(jī)科學(xué)與技術(shù)四班學(xué)號3110006015學(xué)生姓名張法光指導(dǎo)教師何翠紅
2023年1月05日
目錄
試驗(yàn)一、進(jìn)程調(diào)度4試驗(yàn)二、作業(yè)調(diào)度8試驗(yàn)三、動態(tài)分區(qū)分派方式的模擬16試驗(yàn)四、文件系統(tǒng)24
3
1試驗(yàn)一進(jìn)程調(diào)度
1、試驗(yàn)?zāi)康?/p>
編寫并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用“短進(jìn)程優(yōu)先〞調(diào)度算法對五個(gè)進(jìn)程進(jìn)行調(diào)度。以加深對進(jìn)程的概念及進(jìn)程調(diào)度算法的理解.
2、試驗(yàn)原理
在多道程序系統(tǒng)中,一個(gè)作業(yè)被提交后必需經(jīng)過處理機(jī)調(diào)度后,方能獲
得處理機(jī)執(zhí)行。對調(diào)度的處理又都可采用不同的調(diào)度方式和調(diào)度算法。調(diào)度算法是指:根據(jù)系統(tǒng)的資源分派策略所規(guī)定的資源分派算法。
短進(jìn)程優(yōu)先調(diào)度算法是指對短進(jìn)程優(yōu)先調(diào)度的算法,它是從后備隊(duì)列中選
擇一個(gè)或者若干個(gè)進(jìn)程,將處理機(jī)分派給它,使它馬上執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機(jī)時(shí)再重新調(diào)度。
短進(jìn)程優(yōu)先調(diào)度源程序如下:
#include#definen5#definenum5#definemax65535typedefstructpro{
intPRO_ID;//進(jìn)程號intarrive_time;//到達(dá)時(shí)間intsum_time;//運(yùn)行總時(shí)間intflag;
}Pro;
//整數(shù)排序
intbubble(inttemp[]){
inti,j,tem=0;
for(i=1;itemp[j+1])}
{
tem=temp[j];temp[j]=temp[j+1];temp[j+1]=tem;lastX=0;}
if(lastX==1)break;
}
returntemp[0];
//進(jìn)程排序
Probubble(Prop[]){
inti,j;
Protemp={0};Pros[num];
for(i=0;is[j+1].sum_time){
temp=s[j];s[j]=s[j+1];s[j+1]=temp;lastX=0;}
if(lastX==1)break;
}
5
voidSPF(intp){
if(n>0){
inti,j,k,l,tc=0;
Proseq[n];Protemp_seq[n];
printf(\printf(\計(jì)科4班張法光3110006015\\n\
printf(\
printf(\試驗(yàn)一:短進(jìn)程優(yōu)先調(diào)度算法SPF\\n\
printf(\請依次輸入5個(gè)進(jìn)程的進(jìn)程號、到達(dá)時(shí)間和執(zhí)行時(shí)間\\n\printf(\成員變量用逗號隔開;進(jìn)程間用回車隔開\\n\
printf(\for(i=0;i#include#include
#definegetpch(type)(type*)malloc(sizeof(type))#definenull0intn;
floatT1=0,T2=0;inttimes=0;
structjcb//作業(yè)控制塊{
charname[10];//作業(yè)名
intreachtime;//作業(yè)到達(dá)時(shí)間intstarttime;//作業(yè)開始時(shí)間
intneedtime;//作業(yè)需要運(yùn)行的時(shí)間floatsuper;//作業(yè)的響應(yīng)比intfinishtime;//作業(yè)完成時(shí)間floatcycletime;//作業(yè)周轉(zhuǎn)時(shí)間
floatcltime;//作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間charstate;//作業(yè)狀態(tài)structjcb*next;//結(jié)構(gòu)體指針}*ready=NULL,*p,*q;
typedefstructjcbJCB;
voidinital()//建立作業(yè)控制塊隊(duì)列,先將其排成先來先服務(wù)的模式隊(duì)列{
inti;
printf(\輸入作業(yè)數(shù):\scanf(\for(i=0;ireachtime=i;
printf(\作業(yè)默認(rèn)到達(dá)時(shí)間:%d\printf(\輸入作業(yè)要運(yùn)行的時(shí)間:\scanf(\p->state='W';
9
p->next=NULL;
if(ready==NULL)ready=q=p;else{
q->next=p;q=p;}}
}
voidoutput(JCB*q,intj){/*顯示所有作業(yè)的狀況*/JCB*pr=ready;floatf=0.0;
printf(\所有作業(yè)的狀況:\\n\列表顯示所有作業(yè)的狀況
if(j==3){
printf(\作業(yè)名\\t\\t到達(dá)時(shí)間\\t所需運(yùn)行間\\t響應(yīng)比\\t\\t作業(yè)狀態(tài)\\n\printf(\while(pr){
if(pr->supername,pr->reachtime,pr->needtime,f,pr->state);elseprintf(\pr->name,pr->reachtime,pr->needtime,pr->super,pr->state);
pr=pr->next;}
}
else{
printf(\作業(yè)名\\t\\t到達(dá)時(shí)間\\t所需運(yùn)行間\\t作業(yè)狀態(tài)\\n\
printf(\while(pr){printf(\pr->name,pr->reachtime,pr->needtime,pr->state);pr=pr->next;}}
}
voiddisp(JCB*q,intm)//顯示作業(yè)運(yùn)行后的周轉(zhuǎn)時(shí)間及帶權(quán)周轉(zhuǎn)時(shí)間等{
if(m==3)//顯示高響應(yīng)比算法調(diào)度作業(yè)后的運(yùn)行狀況{output(q,m);
printf(\作業(yè)%s正在運(yùn)行,估計(jì)其運(yùn)行狀況:\\n\
printf(\開始運(yùn)行時(shí)刻\\t完成時(shí)刻\\t周轉(zhuǎn)時(shí)間\\t帶權(quán)周轉(zhuǎn)時(shí)間\\t相應(yīng)比\\n\\n\printf(\getch();
}
else//顯示先來先服務(wù),最短作業(yè)優(yōu)先算法調(diào)度后作業(yè)的運(yùn)行狀況{
output(q,m);
printf(\作業(yè)%s正在運(yùn)行,估計(jì)其運(yùn)行狀況:\\n\
10
printf(\開始運(yùn)行時(shí)刻\\t完成時(shí)刻\\t周轉(zhuǎn)時(shí)間\\t帶權(quán)周轉(zhuǎn)時(shí)間\\n\\n\
printf(\getch();}}
voidrunning(JCB*p,intm)//運(yùn)行作業(yè)
{
if(p==ready)//先將要運(yùn)行的作業(yè)從隊(duì)列中分開出來{ready=p->next;p->next=NULL;}else{q=ready;while(q->next!=p)q=q->next;q->next=p->next;}
p->starttime=times;//計(jì)算作業(yè)運(yùn)行后的完成時(shí)間,周轉(zhuǎn)時(shí)間等等p->state='R';
p->finishtime=p->starttime+p->needtime;
p->cycletime=(float)(p->finishtime-p->reachtime);
p->cltime=(float)(p->cycletime/p->needtime);T1+=p->cycletime;T2+=p->cltime;
disp(p,m);//調(diào)用disp()函數(shù),顯示作業(yè)運(yùn)行狀況
times+=p->needtime;p->state='F';
printf(\作業(yè)%s已經(jīng)完成!\\n請輸入任意鍵繼續(xù)\\n\free(p);//釋放運(yùn)行后的作業(yè)
getch();
}
voidsuper()//計(jì)算隊(duì)列中作業(yè)的高響應(yīng)比{
JCB*padv;
padv=ready;
do{if(padv->state=='W'
}
padv=padv->next;}while(padv!=NULL);
}
voidfinal()//最終打印作業(yè)的平均周轉(zhuǎn)時(shí)間,平均帶權(quán)周轉(zhuǎn)時(shí)間{
floats,t;
11
t=T1/n;
s=T2/n;getch();
printf(\作業(yè)已經(jīng)全部完成!\
printf(\個(gè)作業(yè)的平均周轉(zhuǎn)時(shí)間是:%f\
printf(\個(gè)作業(yè)的平均帶權(quán)周轉(zhuǎn)時(shí)間是%f:\\n\\n\\n\}
voidhrn(intm)//高響應(yīng)比算法{
JCB*min;inti,iden;system(\inital();
for(i=0;istate=='W'iden=0;}elseif(p->super>min->super)min=p;p=p->next;}while(p!=NULL);
running(min,m);//調(diào)用running()函數(shù)}//for
final();//調(diào)用running()函數(shù)}
voidfcfs(intm)//先來先服務(wù)算法{
inti,iden;system(\inital();
for(i=0;istate=='W'if(iden)p=p->next;}while(p!=NULLif(iden)
{
i--;printf(\沒有滿足要求的進(jìn)程,需等待\times++;
12
if(times>100){printf(\時(shí)間過長\}else{
running(p,m);//調(diào)用running()函數(shù)}
}
final();//調(diào)用running()函數(shù)}
voidmain()//主函數(shù){
intm;
while(1){
printf(\printf(\計(jì)科4班張法光3110006015\\n\printf(\試驗(yàn)2-作業(yè)調(diào)度系統(tǒng)\\n\printf(\先來先服務(wù)算法\\n\
printf(\響應(yīng)比高者優(yōu)先算法\\n\printf(\退出程序\\n\
printf(\printf(\選擇所要操作:\\n\
scanf(\switch(m){
case1:fcfs(m);
getch();
times=0;main();break;case2:hrn(m);getch();times=0;main();break;case3:exit(0);
default:
printf(\選擇錯(cuò)誤,重新選擇.\getch();
system(\}
13
}}
5、程序運(yùn)行結(jié)果
5.1先來先服務(wù)算法
14
5.2響應(yīng)比高者優(yōu)先算法
6、結(jié)果分析與試驗(yàn)小結(jié)
參考了幾個(gè)作業(yè)調(diào)度的范例,作業(yè)調(diào)度實(shí)踐起來并不難,但需要漸漸調(diào)試。和同學(xué)探討了設(shè)計(jì)思路之后就開始做了,雖然有小錯(cuò)誤,但是經(jīng)過反復(fù)調(diào)試也修正了BUG。
15
printf(\請輸入登錄用戶名:\/*用戶登陸*/scanf(\
for(userid=0;userid>\\n\
printf(\printf(\create新建文件.\printf(\delete刪除文件.\printf(\open開啟文件.\printf(\close關(guān)閉文件.\printf(\read讀出文件.\printf(\write寫進(jìn)文件.\printf(\display顯示用戶列表.\printf(\quit安全退出.\
printf(\printf(\操作命令:createdeleteopenclosereadwritedisplayquit\\n\printf(\請輸入操作命令:\
36
scanf(\getchar();
for(i=0;iDuLNode*p=block_first;while(p){if(p->data.ID==ID){p->data.state=Free;p->data.ID=Free;if(p->prior->data.state==Free)//與前面的空閑塊相連{p->prior->data.size+=p->data.size;p->prior->next=p->next;p->next->prior=p->prior;}if(p->next->data.state==Free)//與后面的空閑塊相連{p->data.size+=p->next->data.size;p->next->next->prior=p;p->next=p->next->next;}break;}p=p->next;}returnOK;}
//顯示主存分派狀況voidshow(){coutnext;while(p){coutdata.ID==Free)coutdata.state==Free)coutnext;}}
//主函數(shù)voidmain(){intch;//算法選擇標(biāo)記cout>ch;Initblock();//開創(chuàng)空間表intchoice;//操作選擇標(biāo)記while(1){
cout>choice;if(choice==1)alloc(ch);//分派內(nèi)存elseif(choice==2)//內(nèi)存回收{(diào)intID;cout>ID;free(ID);}elseif(choice==3)show();//顯示主存elseif(choice==0)break;//退出else//輸入操作有誤{cout5、源程序清單(需附詳細(xì)的解釋)#include#include#include#defineNULL0
#definegetpch(type,num)(type*)malloc(sizeof(type)*num)
structufd{/*其次級:用戶文件目錄UFD*/charfilename[10];/*文件名*/
charprocode[3];/*保護(hù)碼1:讀2:寫3:執(zhí)行*/intlength;/*文件長度*/}*p;
typedefstructufdUFD;
structmdf{/*第一級:主目錄MDF*/charname[10];/*用戶名*/
UFD*directory;/*文件目錄指針*/}maindir[10];/*用戶數(shù)組*/
typedefstructmdfMDF;
structafd{/*文件運(yùn)行目錄*/charfilename[10];/*文件名*/
charprocode[3];/*保護(hù)碼1:讀2:寫3:執(zhí)行*/
intrw;/*讀寫指針初始狀態(tài)讀:0寫:文件長度*/}afd[5];
intusernum,opennum;/*登陸用戶數(shù)量開啟文件數(shù)量*/intfilenum[10];/*所有的用戶目錄下的文件數(shù)目*/charusername[10];/*當(dāng)前登陸系統(tǒng)的用戶名*/char
command[][10]={\/*文件操作命令*/
voidlogin()/*用戶注冊,信息寫入database文件*/{inti,j;
FILE*fp;intloginum;
intcreatnum[10];
printf(\注冊頁面=====\\n\\n\
26
printf(\請輸入注冊的用戶數(shù)量:\scanf(\for(i=0;i=10
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加裝空調(diào)工程合同范本
- 購房合同有購房合同范本
- 單位合伙建房合同范例
- 關(guān)于獨(dú)家合同范本
- 醫(yī)藥會議合同范本
- 單位給買車合同范本
- 化工項(xiàng)目整體承建合同范本
- 產(chǎn)品總經(jīng)銷合同范本
- 醫(yī)院加盟合同范本
- 親子服務(wù)合同范本模板
- 工業(yè)和信息化部裝備工業(yè)發(fā)展中心2025年上半年應(yīng)屆畢業(yè)生招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年溫州市甌海旅游投資集團(tuán)有限公司下屬子公司招聘筆試參考題庫附帶答案詳解
- 2025年天津三源電力集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年上半年浙江嘉興桐鄉(xiāng)市水務(wù)集團(tuán)限公司招聘10人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年腹腔穿刺術(shù)課件 (1)2
- 重慶市2024-2025學(xué)年高一上學(xué)期期末聯(lián)考生物試卷(含答案)
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 物理試卷合集(含答案逐題解析)
- 2025年度智能倉儲管理系統(tǒng)軟件開發(fā)合同6篇
- 緊急疏散逃生方法
- 羊水栓塞護(hù)理應(yīng)急預(yù)案
- 2024年醫(yī)師定期考核臨床類考試題庫及答案(共500題)
評論
0/150
提交評論