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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論