深圳大學(xué) 操作系統(tǒng) 實驗二 進程調(diào)度.doc_第1頁
深圳大學(xué) 操作系統(tǒng) 實驗二 進程調(diào)度.doc_第2頁
深圳大學(xué) 操作系統(tǒng) 實驗二 進程調(diào)度.doc_第3頁
深圳大學(xué) 操作系統(tǒng) 實驗二 進程調(diào)度.doc_第4頁
深圳大學(xué) 操作系統(tǒng) 實驗二 進程調(diào)度.doc_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

深 圳 大 學(xué) 實 驗 報 告 課程名稱: 操作系統(tǒng) 實驗項目名稱: CPU調(diào)度 學(xué)院: 計算機與軟件學(xué)院 專業(yè): 軟件工程 指導(dǎo)教師: 梁正平 報告人: 學(xué)號: 班級: 2 實驗時間: 實驗報告提交時間: 教務(wù)處制一、實驗?zāi)康呐c完成說明: 實驗一:實現(xiàn)CPU調(diào)度的先來先服務(wù)算法,調(diào)度對象是進程,包含屬性:名稱、到達時間、運行時間,對象屬性可根據(jù)不同算法可自行添加。本算法以進程的到達時間最早為優(yōu)先,要求用一個函數(shù)來實現(xiàn),不要寫在main函數(shù)中。 實驗二:實現(xiàn)CPU調(diào)度的短作業(yè)優(yōu)先算法,調(diào)度對象是進程,包含屬性:名稱、到達時間、運行時間等,對象屬性根據(jù)不同算法可自行添加。以進程的運行時間最短為優(yōu)先,調(diào)度算法不要寫在main函數(shù)中,要另外定義一個函數(shù)SJF來實現(xiàn)。 實驗三:實現(xiàn)CPU調(diào)度的高響應(yīng)比優(yōu)先算法,調(diào)度對象是進程,包含屬性:名稱、到達時間、運行時間等,對象屬性根據(jù)不同算法可自行添加。算法分析:本題目不能夠簡單地把所有程序的運行時間進行排序,在每一輪先檢查是否有程序到達且未執(zhí)行,如果符合條件只有一個,就直接調(diào)度;如果有多個,計算程序的響應(yīng)比,最大的程序獲得調(diào)度。 實驗四:實現(xiàn)CPU調(diào)度的時間片輪轉(zhuǎn)算法,調(diào)度對象是進程,包含屬性:名稱、到達時間、運行時間等,對象屬性根據(jù)不同算法可自行添加。算法分析:該算法按照先來先服務(wù)的思想分配一個時間片給進程,如果進程在時間片內(nèi)沒有完成,則排到隊列末尾等待重新分配。注意:如果進程在一個時間片內(nèi)完成且時間片未用完,那么把剩余時間送給下一個進程。例如一個進程還需要CPU運行1秒,時間片為3,當分配一個時間給它,它運行1秒后完成,就把剩余的2秒送給下一個進程,因此下一個進程有5秒運行。 實驗五:實現(xiàn)CPU調(diào)度的多級反饋隊列算法,調(diào)度對象是進程,包含屬性:名稱、到達時間、運行時間等,對象屬性根據(jù)不同算法可自行添加。二、主要思路與方法:一:void FCFS:timesSort(int num) int i = 0, j = 0; for(i = 0; inext ; Process* q = p-next ; for(j = 0; jarriveTimearriveTime) if(q-next) h = p; p = q; q = q-next; else h-next = q; p-next = q-next; q-next = p; if(q-next) h = p; p = q; q = q-next; 二:void SJF(int a10,int b10 ,char x10,int n) int ii,flag10,tnum=0,timer=10000; int i,temp=10000,temp1; float rt10,gt10; float xx; char zm10; for(i=0;in;i+) flagi=0; for(i=0;iai) timer=ai; while(n-tnum) ii=-1,temp1=10000;/標識下當前時刻是否有進程 for(i=0;iai&flagi=0)/判斷現(xiàn)在時間與到達的程序 /cout afbi)/找出最小執(zhí)行時間的程序 temp1=bi; ii=i;/保存該序號 /cout ii; if(ii!=-1&flagii=0) /coutasdsdggsgendl; zmtnum=xii; gttnum=aii; rttnum=bii; timer =timer+bii; flagii=1; tnum=tnum+1; else timer=timer+1; /coutdfagagggaendl; for(i=0;in;i+) coutzmi ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutxx ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutxx-gti ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutfixedsetprecision(2)(xx-gti)/rti ; 三:void FPF:getSort() while(1) int i = 0; for(i = 0; imax; i+) if(processi.flag=false&processi.arriTimenow) processi.rp = (now-processi.arriTime+processi.serriTime)/processi.serriTime; int rpMax = 0; for(i = 1; imax; i+) if(processrpMax.rpprocessi.arriTime) rpMax = i; if(processrpMax.flag = true) break; if(getTime(rpMax)=0) break; 實驗四:void FPF:getSort() qWork.push(processhav); now = qWork.front().arriTime; while(!qWork.empty() Process p = qWork.front(); if(p.serriTime=p.serriTime) if(hav+1processhav+1.arriTime) isNewProcess(); else if(hav+1max&(p.serriTime+now)=processhav+1.arriTime) now = p.serriTime+now; p.finishTime = now; finishProcessfinish=p; finish+; hav+; qWorkqhav.pop(); qhav = 0; now = processhav.arriTime; processhav.flag = true; qWorkqhav.push(processhav); else /不被搶占,完成p進程 now = now+p.serriTime; p.finishTime = now; qWorkqhav.pop(); finishProcessfinish = p; finish+; while(qhav4&qWorkqhav.empty() qhav+; if(qhav=4&hav+1max) hav+; qhav = 0; now = processhav.arriTime; processhav.flag = true; qWorkqhav.push(processhav); else if(hav+1processhav+1.arriTime) isNewProcess(); else p.serriTime = p.serriTime -Tqhav+p.serriveTime; now = now+(Tqhav-p.serriveTime); p.serriveTime = 0; qWorkqhav.pop(); qWorkqhav+1.push(p); if(now=processhav+1.arriTime) newProcess(); while(qWorkqhav.empty()&qhav4) qhav+; 三實驗程序或內(nèi)容:實驗一:#include#includeusing namespace std;class Processpublic:char processName;int arriveTime;float serviceTime;int startTime;int finishTime;float turnaroundTime;float timeWithWeight;Process* next;Process()next=NULL,arriveTime=0;serviceTime=0;startTime=0;finishTime=0;turnaroundTime=0;timeWithWeight=0;class FCFSprotected:Process* head;Process* current;void timesSort(int num);int processNum;public:FCFS(); void createList();void getTimes();void display();int isOhterProcess();FCFS:FCFS()head = new Process();current = new Process();head-next = current;void FCFS:createList()int getNum, i = 0;cingetNum;processNum = getNum;cincurrent-processName;for(i = 1; iq-processName;if(i=getNum) break;else current-next = q;current = q;current = head-next;cincurrent-arriveTime;Process* p = current;for(i = 1; inext;cinp-arriveTime;if(p-next) current-next = p;current = p;else break;current = head-next;cincurrent-serviceTime;p = current;for(i = 1; inext;cinp-serviceTime;if(p-next) current-next = p;current = p;else break;timesSort(getNum);void FCFS:timesSort(int num)int i = 0, j = 0;for(i = 0; inext ;Process* q = p-next ;for(j = 0; jarriveTimearriveTime)if(q-next) h = p;p = q;q = q-next;elseh-next = q;p-next = q-next;q-next = p;if(q-next) h = p;p = q;q = q-next;void FCFS:getTimes()current = head-next;current-startTime = current-arriveTime;current-finishTime = current-startTime+current-serviceTime;current-turnaroundTime = current-finishTime-current-arriveTime;current-timeWithWeight = current-turnaroundTime/current-serviceTime; while(current-next)Process* p = current-next;p-startTime = current-finishTime;p-finishTime = p-startTime+p-serviceTime;p-turnaroundTime = p-finishTime-p-arriveTime;p-timeWithWeight = p-turnaroundTime/p-serviceTime;current = current-next;if(current-next =NULL) break;int FCFS:isOhterProcess()coutis other process?p-arriveTimep-serviceTime;current = head-next;while(current-next)current = current-next;current-next = p;if(p-arriveTimecurrent-finishTime)p-startTime = p-arriveTime;elsep-startTime = current-finishTime;p-finishTime = p-startTime+p-serviceTime;p-turnaroundTime = p-finishTime-p-arriveTime;p-timeWithWeight = p-turnaroundTime/p-serviceTime;return 0;void FCFS:display()current = head-next;while(1)coutprocessNamenext)current = current-next;else break;coutnext;while(1)coutfinishTimenext)current = current-next;else break;coutnext;while(1)coutturnaroundTimenext)current = current-next;else break;coutnext;while(1)coutfixedsetprecision(2)timeWithWeightnext)current = current-next;else break;coutendl;int main()FCFS fcfs;fcfs.createList();fcfs.getTimes();fcfs.display();return 0;實驗二:#include #include using namespace std;void SJF(int a10,int b10 ,char x10,int n)int ii,flag10,tnum=0,timer=10000;int i,temp=10000,temp1;float rt10,gt10;float xx;char zm10;for(i=0;in;i+)flagi=0;for(i=0;iai)timer=ai;while(n-tnum)ii=-1,temp1=10000;/標識下當前時刻是否有進程for(i=0;iai&flagi=0)/判斷現(xiàn)在時間與到達的程序 /cout afbi)/找出最小執(zhí)行時間的程序temp1=bi;ii=i;/保存該序號/cout ii;if(ii!=-1&flagii=0) /coutasdsdggsgendl;zmtnum=xii;gttnum=aii;rttnum=bii;timer =timer+bii;flagii=1;tnum=tnum+1;elsetimer=timer+1;/coutdfagagggaendl;for(i=0;in;i+)coutzmi ;coutendl;for(i=0,xx=gti;in;i+) xx+=rti;coutxx ;coutendl;for(i=0,xx=gti;in;i+)xx+=rti;coutxx-gti ;coutendl;for(i=0,xx=gti;in;i+)xx+=rti;coutfixedsetprecision(2)(xx-gti)/rtin;for(i=0;ixi;for(i=0;iai;for(i=0;ibi;SJF(a,b,x,n);/coutfixedsetprecision(2)12.5678endl;return 0;實驗三:#include#includeusing namespace std;class Process public:float arriTime,serriTime,finishTime,startTime;bool flag;float timeOfOver,timeWithWeight,rp;int sort;char ch;Process()arriTime = 0;serriTime = 0;finishTime = 0;timeOfOver = 0;timeWithWeight = 0;flag = false;class FPFprotected:Process process100;int now;int max;int num;public:FPF();void createProcess();int getTime(int n);void getSort();void display();FPF:FPF()cinmax;now = 0;num = 0;void FPF:createProcess()int i = 0;for(i = 0; iprocessi.ch;for(i = 0; iprocessi.arriTime;for(i = 0; iprocessi.serriTime;int minArrive = 0;for(i = 1; iprocessi.arriTime)minArrive = i;now = processminArrive.arriTime;getTime(minArrive);getSort();int FPF:getTime(int n)processn.sort = num;num+;processn.flag = true;processn.rp = 0;processn.startTime = now;now = now+processn.serriTime;processn.finishTime = now;processn.timeOfOver = now-processn.arriTime;processn.timeWithWeight = processn.timeOfOver/processn.serriTime;int i = 0;for(i = 0; imax; i+)if(processi.flag = false) return 1;return 0;void FPF:getSort()while(1)int i = 0;for(i = 0; imax; i+)if(processi.flag=false&processi.arriTimenow)processi.rp = (now-processi.arriTime+processi.serriTime)/processi.serriTime;int rpMax = 0;for(i = 1; imax; i+)if(processrpMax.rpprocessi.arriTime)rpMax = i;if(processrpMax.flag = true) break;if(getTime(rpMax)=0) break;void FPF:display() int i = 0, j = 0;int sort100;for(j = 0; jmax; j+)for(i = 0; imax; i+)if(j=processi.sort)sortj = i;for(i = 0; imax; i+)coutprocesssorti.ch ;coutendl;for(i = 0; imax; i+)coutprocesssorti.finishTime ;coutendl;for(i = 0; imax; i+)coutprocesssorti.timeOfOver ;coutendl;for(i = 0; imax; i+)coutfixedsetprecision(2)processsorti.timeWithWeight ;coutendl;int main()FPF fpf;fpf.createProcess();fpf.display();return 0;實驗四:#include#include#includeusing namespace std;class Process public:float arriTime,serriTime,finishTime,startTime,serriveTime;bool flag;float timeOfOver,timeWithWeight,rp;char ch;Process()arriTime = 0;serriTime = 0;serriveTime = 0;finishTime = 0;timeOfOver = 0;timeWithWeight = 0;flag = false;class FPFprotected:Process process100;Process finishProcess100;int now;int max;int hav;int T;int finish;int moreTime;queue qWork;public:FPF();void createProcess();void FCFS();int getTime(Process& p);void getSort();void display();int isNewProcess();FPF:FPF()cinmax;cinT;now = 0;hav = 0;finish = 0;moreTime = 0;void FPF:createProcess()int i = 0

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論