操作系統(tǒng)實(shí)驗(yàn)報(bào)告進(jìn)程調(diào)度_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告進(jìn)程調(diào)度_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告進(jìn)程調(diào)度_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告進(jìn)程調(diào)度_第4頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.五邑大學(xué)實(shí)驗(yàn)報(bào)告操作系統(tǒng)課程20162017年度第 1 學(xué)期實(shí)驗(yàn)題目 :進(jìn)程調(diào)度院系:計(jì)算機(jī)學(xué)院班級(jí):140801學(xué)號(hào):3114002472姓名:黃凱鑫.專業(yè) .專注.任課教師 :白明成績(jī)?cè)u(píng)定 :實(shí)驗(yàn)二題目 :進(jìn)程調(diào)度完成日期 :2016 年 12 月 11 日1、實(shí)驗(yàn)?zāi)康模?1 ) 設(shè)計(jì)一個(gè)有 n 個(gè)進(jìn)程工行的進(jìn)程調(diào)度程序 。 每個(gè)進(jìn)程由一個(gè)進(jìn)程控制塊( PCB)表示 。 進(jìn)程控制塊通常應(yīng)包含下述信息:進(jìn)程名 、進(jìn)程優(yōu)先數(shù) 、進(jìn)程需要運(yùn)行的時(shí)間 、占用 CPU 的時(shí)間以及進(jìn)程的狀態(tài)等,且可按調(diào)度算法的不同而增刪。( 2)調(diào)度程序應(yīng)包含 23 種不同的調(diào)度算法 ,運(yùn)行時(shí)可任意選一種 ,以利于

2、各種算法的分析比較 。( 3)系統(tǒng)應(yīng)能顯示或打印各進(jìn)程狀態(tài)和參數(shù)的變化情況 ,便于觀察諸進(jìn)程的調(diào)度過(guò)程2、實(shí)驗(yàn)內(nèi)容( 1)編制和調(diào)試示例給出的進(jìn)程調(diào)度程序 ,并使其投入運(yùn)行 。( 2)自行設(shè)計(jì)或改寫(xiě)一個(gè)進(jìn)程調(diào)度程序 ,在相應(yīng)機(jī)器上調(diào)試和運(yùn)行該程序 ,其.專業(yè) .專注.功能應(yīng)該不亞于示例 。( 3)直觀地評(píng)測(cè)各種調(diào)度算法的性能。3、算法設(shè)計(jì)算法 :(1) 優(yōu)先數(shù)法 。進(jìn)程就緒鏈按優(yōu)先數(shù)大小從高到低排列,鏈?zhǔn)走M(jìn)程首先投入運(yùn)行。每過(guò)一個(gè)時(shí)間片 ,運(yùn)行進(jìn)程所需運(yùn)行的時(shí)間片數(shù)減1,說(shuō)明它已運(yùn)行了一個(gè)時(shí)間片,優(yōu)先數(shù)也減3,理由是該進(jìn)程如果在一個(gè)時(shí)間片中完成不了,優(yōu)先級(jí)應(yīng)該降低一級(jí)。 接著比較現(xiàn)行進(jìn)程和就緒

3、鏈鏈?zhǔn)走M(jìn)程的優(yōu)先數(shù),如果仍是現(xiàn)行進(jìn)程高或者相同 ,就讓現(xiàn)行進(jìn)程繼續(xù)進(jìn)行,否則,調(diào)度就緒鏈鏈?zhǔn)走M(jìn)程投入運(yùn)行。原運(yùn)行進(jìn)程再按其優(yōu)先數(shù)大小插入就緒鏈,且改變它們對(duì)應(yīng)的進(jìn)程狀態(tài),直至所有進(jìn)程都運(yùn)行完各自的時(shí)間片數(shù)。(2) 簡(jiǎn)單輪轉(zhuǎn)法 。進(jìn)程就緒鏈按各進(jìn)程進(jìn)入的先后次序排列,進(jìn)程每次占用處理機(jī)的輪轉(zhuǎn)時(shí)間按其重要程度登入進(jìn)程控制塊中的輪轉(zhuǎn)時(shí)間片數(shù)記錄項(xiàng)(相當(dāng)于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項(xiàng)位置 )。每過(guò)一個(gè)時(shí)間片 ,運(yùn)行進(jìn)程占用處理機(jī)的時(shí)間片數(shù)加1 ,然后比較占用處理機(jī)的時(shí)間片數(shù)是否與該進(jìn)程的輪轉(zhuǎn)時(shí)間片數(shù)相等,若相等說(shuō)明已到達(dá)輪轉(zhuǎn)時(shí)間 ,應(yīng)將現(xiàn)運(yùn)行進(jìn)程排到就緒鏈末尾,調(diào)度鏈?zhǔn)走M(jìn)程占用處理機(jī),且改變它們的進(jìn)程狀態(tài)

4、,直至所有進(jìn)程完成各自的時(shí)間片。實(shí)驗(yàn)源代碼 :#include <stdio.h>.專業(yè) .專注.#include <dos.h>#include <stdlib.h>#include <conio.h>#include <iostream.h>#include <time.h>enum state/ 進(jìn)程的狀態(tài)Ready,Working,Finish;struct pcb/PCB 數(shù)據(jù)結(jié)構(gòu)int pid;int priority;int cputime;int needtime;int round;state proce

5、ss;pcb *next;.專業(yè) .專注.;int timepiece;pcb *get_process()/ 優(yōu)先數(shù)算法 - 輸入進(jìn)程個(gè)數(shù)int proc;pcb *q;pcb *t;pcb *p;int i=0;cout << "Input Process Number(1-10): "cin >> proc;while (proc<1 | proc>10)cout<<endl<<"IllegalInput!"<<endl<<endl<<"Inp

6、utProcessNumber(1-10): "cin>>proc;/cout << endl << endl<< "Start Scheduling!nn"getch();srand(unsigned)time(NULL);/ 初始化隨機(jī)數(shù)種子發(fā)生器.專業(yè) .專注.while (i<proc)q=(struct pcb *)malloc(sizeof(pcb);q->pid=rand()%10000;q->needtime=rand()%10+1;q->cputime=0;q->pri

7、ority=rand()%100;q->process=Ready;q->next=NULL;/ 利用隨機(jī)數(shù)生成進(jìn)程信息if (i=0)p=q;t=q;elset->next=q;t=q;/ 尾插法建立PCB 節(jié)點(diǎn)i+; /while return p;.專業(yè) .專注.voiddisplay(pcb *p)/ 優(yōu)先數(shù)算法結(jié)果輸出cout<<"ProcessID"<<""<<"Cputime"<<""<<"Needtime&quo

8、t;<<""<<"Priority"<<""<<"State"<<endl;while(p)cout<<""<< p->pid;cout<<"tt"cout<<p->cputime;cout<<"t"cout<<p->needtime;cout<<"t"if(p->nee

9、dtime=0)cout<<"Done"elsecout<<p->priority;cout<<"tt"switch(p->process)case Ready:cout<<"Ready"<<endl;break;case Working:cout<<"bb->Working<-"<<endl;break;case Finish:cout<<"Finish"<<en

10、dl;break;.專業(yè) .專注.p=p->next;int process_finish(pcb *q)/ 判斷是否所有進(jìn)程都已完成,是則返回1int bl=1;while(bl&&q)bl=bl&&q->needtime=0;q=q->next;return bl;void cpuexe(pcb *q)/ 優(yōu)先數(shù)算法模擬進(jìn)程執(zhí)行函數(shù)pcb *t=q;int tp=-1;while(q).專業(yè) .專注.if (q->process!=Finish)/ 未完成的進(jìn)程置Ready ,完成的進(jìn)程置Finishq->process=Rea

11、dy;if(q->needtime=0)q->process=Finish;if(tp<q->priority&&q->process!=Finish)/ 找到下一個(gè)優(yōu)先數(shù)最高且未完成的進(jìn)程tp=q->priority;t=q;q=q->next;if(t->needtime!=0)/ 修改正在執(zhí)行的進(jìn)程的信息,并置其狀態(tài)為Workingt->priority-=3;if(t->priority<0) t->priority=0;t->needtime-;t->process=Working;t

12、->cputime+;.專業(yè) .專注.void priority_cal()/ 優(yōu)先數(shù)算法主控函數(shù)pcb *p;system("cls");p=get_process();int cpu=0;char key;system("cls");cout<<"CPUTime:"<<cpu<<endl;display(p);cout<<endl;getch();while(!process_finish(p)/ 當(dāng)不是所有進(jìn)程都完成時(shí)不斷執(zhí)行進(jìn)程并顯示信息cpu+;cout<<&

13、quot;CPUTime:"<<cpu<<endl;cpuexe(p);display(p);cout<<endl;.專業(yè) .專注.key=getch();if(key='q') exit(0);printf("All processes are finished!");getch();pcb *get_process_round()/ 時(shí)間片算法 - 輸入進(jìn)程個(gè)數(shù)及 CPU 時(shí)間片int proc;pcb *q;pcb *t;pcb *p;int i=0;cout<<"Input Proc

14、ess Number(1-10): "cin>>proc;while(proc<1 | proc>10)cout<<endl<<"Yourprocessisoutoforder,pleasetryagain!"<<endl<<endl<<"Input Process Number(1-10): "cin>>proc;.專業(yè) .專注.cout<<"CPU TimePiece(1-5)?"cin>>timepi

15、ece;while(timepiece<1 | timepiece>5)cout<<endl<<"Illegal Input!"<<endl<<endl<<"CPU TimePiece(1-5)?"cin>>timepiece;/cout<< endl << endl << "Start Scheduling!nn"getch();srand(unsigned)time(NULL);/ 初始化隨機(jī)數(shù)種子發(fā)生器whil

16、e (i<proc)q=(struct pcb *)malloc(sizeof(pcb);/ 利用隨機(jī)數(shù)建立進(jìn)程信息q->pid=rand()%10000;q->needtime=rand()%10+1;q->cputime=0;q->round=0;q->process=Ready;q->next=NULL;if (i=0)/ 尾插法建立PCB 節(jié)點(diǎn)p=q;t=q;.專業(yè) .專注.elset->next=q;t=q;i+; /while return p;void cpu_round(pcb *p,pcb *q)/ 時(shí)間片算法模擬進(jìn)程執(zhí)行函數(shù)w

17、hile(p)if (p->needtime=0)/ 完成的進(jìn)程置Finish ,其它置 Readyp->process=Finish;if (p->process=Working)p->process=Ready;p=p->next;q->cputime+=timepiece;/ 修改正在執(zhí)行進(jìn)程的信息,并置其狀態(tài)為Working.專業(yè) .專注.q->needtime-=timepiece;if(q->needtime<0) q->needtime=0;q->round+;q->process=Working;pcb *

18、get_next(pcb *k,pcb *head)/ 得到下一個(gè)應(yīng)執(zhí)行的進(jìn)程pcb *t;t=k;dot=t->next;while (t && t->process=Finish);if(t=NULL)t=head;.專業(yè) .專注.while (t!=k && t->process=Finish)t=t->next;return t;void display_round(pcb *p)/ 時(shí)間片算法輸出結(jié)果cout<<"ProcessID"<<""<<&quo

19、t;Cputime"<<""<<"Needtime"<<""<<"Round"<<""<<"State"<<endl;while(p)cout<<""<<p->pid;cout<<"tt"cout<<p->cputime;cout<<"t"cout<

20、;<p->needtime;cout<<"t"cout<<p->round;cout<<"t"switch(p->process)case Ready:cout<<"Ready"<<endl;break;.專業(yè) .專注.case Working:cout<<"bb->Working<-"<<endl;break;case Finish:cout<<"Finish"&

21、lt;<endl;break;p=p->next;void round_cal()pcb * p;pcb * r;system("cls");p=get_process_round();int cpu=0;char key;system("cls");cout<<"CPUTime:"<<cpu<<endl;display_round(p);cout<<endl;getch();r=p;while(!process_finish(p).專業(yè) .專注.cpu+=timepiece

22、;cpu_round(p,r);r=get_next(r,p);cout<<"CPUTime:"<<cpu<<endl;display_round(p);cout<<endl;key=getch();if(key='q') exit(0);void display_menu()cout<<"1 Priority"<<endl;cout<<"2 Round Robin"<<endl;cout<<"3 Exit"<<endl;cout<<"Choice: "int main()char key;display_menu();cin >> key;.專業(yè) .專注.switch(key)case '1':priority_cal();break;case '2':round_cal();break;case '3':exi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論