



版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、.五邑大學實驗報告操作系統(tǒng)課程20162017年度第 1 學期實驗題目 :進程調(diào)度院系:計算機學院班級:140801學號:3114002472姓名:黃凱鑫.專業(yè) .專注.任課教師 :白明成績評定 :實驗二題目 :進程調(diào)度完成日期 :2016 年 12 月 11 日1、實驗目的( 1 ) 設計一個有 n 個進程工行的進程調(diào)度程序 。 每個進程由一個進程控制塊( PCB)表示 。 進程控制塊通常應包含下述信息:進程名 、進程優(yōu)先數(shù) 、進程需要運行的時間 、占用 CPU 的時間以及進程的狀態(tài)等,且可按調(diào)度算法的不同而增刪。( 2)調(diào)度程序應包含 23 種不同的調(diào)度算法 ,運行時可任意選一種 ,以利于
2、各種算法的分析比較 。( 3)系統(tǒng)應能顯示或打印各進程狀態(tài)和參數(shù)的變化情況 ,便于觀察諸進程的調(diào)度過程2、實驗內(nèi)容( 1)編制和調(diào)試示例給出的進程調(diào)度程序 ,并使其投入運行 。( 2)自行設計或改寫一個進程調(diào)度程序 ,在相應機器上調(diào)試和運行該程序 ,其.專業(yè) .專注.功能應該不亞于示例 。( 3)直觀地評測各種調(diào)度算法的性能。3、算法設計算法 :(1) 優(yōu)先數(shù)法 。進程就緒鏈按優(yōu)先數(shù)大小從高到低排列,鏈首進程首先投入運行。每過一個時間片 ,運行進程所需運行的時間片數(shù)減1,說明它已運行了一個時間片,優(yōu)先數(shù)也減3,理由是該進程如果在一個時間片中完成不了,優(yōu)先級應該降低一級。 接著比較現(xiàn)行進程和就緒
3、鏈鏈首進程的優(yōu)先數(shù),如果仍是現(xiàn)行進程高或者相同 ,就讓現(xiàn)行進程繼續(xù)進行,否則,調(diào)度就緒鏈鏈首進程投入運行。原運行進程再按其優(yōu)先數(shù)大小插入就緒鏈,且改變它們對應的進程狀態(tài),直至所有進程都運行完各自的時間片數(shù)。(2) 簡單輪轉(zhuǎn)法 。進程就緒鏈按各進程進入的先后次序排列,進程每次占用處理機的輪轉(zhuǎn)時間按其重要程度登入進程控制塊中的輪轉(zhuǎn)時間片數(shù)記錄項(相當于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項位置 )。每過一個時間片 ,運行進程占用處理機的時間片數(shù)加1 ,然后比較占用處理機的時間片數(shù)是否與該進程的輪轉(zhuǎn)時間片數(shù)相等,若相等說明已到達輪轉(zhuǎn)時間 ,應將現(xiàn)運行進程排到就緒鏈末尾,調(diào)度鏈首進程占用處理機,且改變它們的進程狀態(tài)
4、,直至所有進程完成各自的時間片。實驗源代碼 :#include <stdio.h>.專業(yè) .專注.#include <dos.h>#include <stdlib.h>#include <conio.h>#include <iostream.h>#include <time.h>enum state/ 進程的狀態(tài)Ready,Working,Finish;struct pcb/PCB 數(shù)據(jù)結構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ù)算法 - 輸入進程個數(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);/ 初始化隨機數(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;/ 利用隨機數(shù)生成進程信息if (i=0)p=q;t=q;elset->next=q;t=q;/ 尾插法建立PCB 節(jié)點i+; /while return p;.專業(yè) .專注.voiddisplay(pcb *p)/ 優(yōu)先數(shù)算法結果輸出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)/ 判斷是否所有進程都已完成,是則返回1int bl=1;while(bl&&q)bl=bl&&q->needtime=0;q=q->next;return bl;void cpuexe(pcb *q)/ 優(yōu)先數(shù)算法模擬進程執(zhí)行函數(shù)pcb *t=q;int tp=-1;while(q).專業(yè) .專注.if (q->process!=Finish)/ 未完成的進程置Ready ,完成的進程置Finishq->process=Rea
11、dy;if(q->needtime=0)q->process=Finish;if(tp<q->priority&&q->process!=Finish)/ 找到下一個優(yōu)先數(shù)最高且未完成的進程tp=q->priority;t=q;q=q->next;if(t->needtime!=0)/ 修改正在執(zhí)行的進程的信息,并置其狀態(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)/ 當不是所有進程都完成時不斷執(zhí)行進程并顯示信息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ù)及 CPU 時間片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);/ 初始化隨機數(shù)種子發(fā)生器whil
16、e (i<proc)q=(struct pcb *)malloc(sizeof(pcb);/ 利用隨機數(shù)建立進程信息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é)點p=q;t=q;.專業(yè) .專注.elset->next=q;t=q;i+; /while return p;void cpu_round(pcb *p,pcb *q)/ 時間片算法模擬進程執(zhí)行函數(shù)w
17、hile(p)if (p->needtime=0)/ 完成的進程置Finish ,其它置 Readyp->process=Finish;if (p->process=Working)p->process=Ready;p=p->next;q->cputime+=timepiece;/ 修改正在執(zhí)行進程的信息,并置其狀態(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)/ 得到下一個應執(zhí)行的進程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)/ 時間片算法輸出結果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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶園農(nóng)業(yè)科技研究與承包經(jīng)營合同
- 智能家居設備抵押貸款合同范本
- 交通運輸項目場地調(diào)研與建設合同
- 成品油市場拓展與品牌授權購銷合同
- 汽車租賃公司車輛贈與協(xié)議范本
- 學校部門考勤管理制度
- 博羅工地食堂管理制度
- 農(nóng)業(yè)綜合開發(fā)土地治理項目施工組織設計
- 安全生產(chǎn)的措施
- 【課件】有理數(shù)的加法法則(第2課時)課件++2024-2025學年+人教版(2024)七年級數(shù)學上冊+
- 2025年全國I卷英語 高考真題
- AIDS合并馬爾尼菲青霉菌病(李勇)
- 小學英語課堂練習設計的有效性初探 論文
- 第二節(jié)細菌性痢疾病人的護理
- 管理處干部職工廉潔從業(yè)行為規(guī)范
- 果蔬脆片生產(chǎn)工藝1課件
- 中暑預防及急救課件
- GB-T 1040.3-2006 塑料 拉伸性能的測定 第3部分:薄塑和薄片的試驗條件
- 事業(yè)單位招聘人員體檢表
- 成品交付檢驗記錄表
- 2022年水穩(wěn)購銷合同范本
評論
0/150
提交評論