實驗一先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法_第1頁
實驗一先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法_第2頁
實驗一先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法_第3頁
實驗一先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法_第4頁
實驗一先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上實驗一 先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法 一:需求分析 程序設計的任務:設計程序模擬進程的先來先服務FCFS和短作業(yè)優(yōu)先SJF調度過程。假設有n個x進程分別在T1, ,Tn時刻到達系統(tǒng),它們需要的服務時間分別為S1, ,Sn。分別采用先來先服務FCFS和短作業(yè)優(yōu)先SJF進程調度算法進行調度,計算每個進程的完成時間、周轉時間和帶權周轉時間,并且統(tǒng)計n個進程的平均周轉時間和平均帶權周轉時間。通過這次實驗,加深對進程概念的理解,進一步掌握進程狀態(tài)的轉變、進程調度的策略及對系統(tǒng)性能的評價方法。(1) 輸入的形式和輸入值的范圍 為免去測試時候需要逐步輸入數(shù)據的麻

2、煩,輸入時采用輸入文件流方式將數(shù)據放在.txt文件中,第一行為進程個數(shù),第二行為進程到達時間(各個進程的到達時間之間用空格隔開),第三行為進程的服務時間(每個服務時間之間用空格隔開)。(2) 輸出的形式 模擬整個調度過程,輸出每個時刻的進程運行狀態(tài),同時輸出了每個進程的完成時間,并且按要求輸出了計算出來的每個進程的周轉時間、帶權周轉時間、所有進程的平均周轉時間以及帶權平均周轉時間。(3) 程序所能達到的功能 能夠模擬出進程的先來先服務FCFS算法和短作業(yè)優(yōu)先SJF算法的調度過程,輸入進程個數(shù)n;每個進程的到達時間T1, ,Tn和服務時間S1, ,Sn;選擇算法1-FCFS,2-SJF,3-退出

3、,用戶做出選擇即可輸出對應的算法調度過程或者退出程序。(4) 測試數(shù)據,包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果 測試數(shù)據及其輸出結果: 作業(yè) 算法進程名ABCDE平均到達時間01234服務時間43524 FCFS完成時間47121418周轉時間461011149帶權周轉時間1225.53.52.8SJF完成時間4918613周轉時間4816398帶權周轉時間12.673.21.52.252.1也可看下面截圖的測試結果 二:概要設計程序包括主函數(shù)、FCFS算法函數(shù)、SJF算法函數(shù)、輸出函數(shù);主函數(shù)流程:輸入文件中的數(shù)據顯示各進程數(shù)據選擇算法調用相應算法的函數(shù)輸出結果三:詳細設計算

4、法流程圖:FCFS先來先服務算法流程圖:開始按排好的順序第一個進程先進行判斷上一個進程的完成時間是否大于下一個進程的到達時間NY下一個進程的開始時間從上個進程的完成時間開始下一個進程的開始時間從它本身的到達時間開始更新各數(shù)據循環(huán)累加,求總的周轉時間,總的帶權周轉時間求平均周轉時間,帶權周轉時間輸出結果調用結束SJF算法流程圖:開始初始化數(shù)據利用一個for循環(huán)判斷是否找到短作業(yè)YN直接進入下一未完成進程并且FinishTimeShort=ArrivalTimeShort+ServiceTimeShortFinishTimeShort=Finish+ServiceTimeShortFinish=F

5、inishTimeShort計算周轉時間、帶權周轉時間計算總的周轉時間、總的帶權周轉時間計算平均周轉時間、平均帶權周轉時間調用結束四:調試分析(1) :調試過程中遇到的問題以及解決方法,設計與實現(xiàn)的回顧討論和分析;開始的時候沒有判斷進程是否到達,導致短進程優(yōu)先算法運行結果錯誤,后來加上了判斷語句后就解決了改問題。(2):算法的性能分析及其改進設想;即使用戶輸入的進程到達時間沒有先后順序也能準確的計算出結果。(加循環(huán),判斷各個進程的到達時間先后,組成一個有序的序列)(3):經驗和體會。 通過本次實驗,深入理解了先來先服務和短進程優(yōu)先進程調度算法的思想,培養(yǎng)了自己的動手能力,通過實踐加深了記憶。五

6、:用戶使用說明在同一目錄下的.txt文件中按輸入要求輸入相關數(shù)據,并且根據提示選擇相應的算法。六:測試結果測試數(shù)據:輸出結果:七:附錄源程序:#include<iostream>#include<iomanip>/格式化輸出結果#include<sstream>/讀取文件#include<fstream>/讀取文件using namespace std;const int MaxNum=100; int ArrivalTimeMaxNum; /到達時間int ServiceTimeMaxNum; /服務時間int FinishTimeMaxNum

7、; /完成時間int WholeTimeMaxNum;/周轉時間double WeightWholeTimeMaxNum;/帶權周轉時間double AverageWT_FCFS,AverageWT_SJF;/平均周轉時間double AverageWWT_FCFS,AverageWWT_SJF;/平均帶權周轉時間void FCFS(int n);/先來先服務void SJF(int n);/短作業(yè)優(yōu)先void print(int n,int array);void print(int n,double array);void printproceed(int n);/輸出FCFS進程運行狀態(tài)

8、void main()int n,i,j;/n:進程數(shù);i、j:循環(huán)計數(shù)變量ifstream in("text.txt");/讀文件string s;for(i=0;i<3,getline(in,s);i+)/當i=0讀入進程數(shù)n ;i=1讀入各進程到達時間 ;i=2讀入各進程服務時間istringstream sin(s);switch(i)case 0:sin>>n;break;case 1:for(j=0;j<n;j+)sin>>ArrivalTimej;break;case 2:for(j=0;j<n;j+)sin>&

9、gt;ServiceTimej;break;/顯示各進程數(shù)據cout<<setfill(' ')<<setw(7)<<"進程名"<<setw(1)<<""char ch='A'for(i=0;i<n;i+)cout<<setw(3)<<char(ch+i);cout<<endl<<"到達時間"for(i=0;i<n;i+)cout<<setw(3)<<Arriv

10、alTimei;cout<<endl<<"服務時間"for(i=0;i<n;i+)cout<<setw(3)<<ServiceTimei;cout<<endl;/選擇算法:先來先服務FCFS->1 短作業(yè)優(yōu)先SJF->2 關閉->0cout<<"請選擇算法: FCFS->1 SJF->2 退出->0"<<endl<<"選擇:"int choice;cin>>choice;while(ch

11、oice!=0)/直到輸入值為0跳出循環(huán),結束程序while(choice!=1 && choice !=2 && choice!=0 )cout<<"Please enter 0, 1 or 2!"<<endl;cin>>choice;if(choice=0)return;if(choice=1)FCFS(n);/進行先來先服務FCFS算法elseSJF(n);/進行短作業(yè)優(yōu)先服務SJF算法cout<<endl<<"請選擇: FCFS->1 SJF->2 退出

12、->0"<<endl<<"選擇:"cin>>choice;return;/-先來先服務-void FCFS(int n)/第一個進程先服務FinishTime0=ArrivalTime0+ServiceTime0;WholeTime0=FinishTime0-ArrivalTime0;WeightWholeTime0=double(WholeTime0)/double(ServiceTime0);for(int i=1;i<n;i+)if(FinishTimei-1>ArrivalTimei)FinishTim

13、ei=FinishTimei-1+ServiceTimei;/如果上一個進程的完成時間大于下一個進程的到達時間,/那么下一個進程的開始時間從上一個進程的完成時間開始elseFinishTimei=ArrivalTimei+ServiceTimei;/否則,下一個進程的開始時間從它本身的到達時間開始WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=double(WholeTimei)/double(ServiceTimei);double totalWT=0,totalWWT=0;for(int j=0;j<n;j+)/循環(huán)累加,求總

14、的周轉時間,總的帶權周轉時間totalWT+=WholeTimej;totalWWT+=WeightWholeTimej;AverageWT_FCFS=totalWT/double(n);AverageWWT_FCFS=totalWWT/double(n);/輸出各結果cout<<"-先來先服務FCFS-"<<endl;cout<<"完成時間分別為:"print(n,FinishTime);cout<<"周轉時間分別為:"print(n,WholeTime);cout<<&q

15、uot;帶權周轉時間分別為:"print(n,WeightWholeTime);cout<<"平均周轉時間:"<<AverageWT_FCFS<<endl;cout<<"平均帶權周轉時間:"<<AverageWWT_FCFS<<endl;printproceed(n);/-短作業(yè)優(yōu)先-void SJF(int n)intShort;/存放當前最短作業(yè)的序號int Finish=0;/存放當前完成時間double totalWT=0,totalWWT=0;for(int a=

16、0;a<n;a+)/初始化完成時間為0FinishTimea=0;int i;/循環(huán)計數(shù)累加變量for(i=0;i<n;i+)int tag=0;/用于標記當前完成時間內,是否找到短作業(yè) int Max=10000;for(int j=0;j<n;j+)if(FinishTimej=0 && ArrivalTimej<=Finish && ServiceTimej<=Max)Max=ServiceTimej;Short=j;tag=1;if(tag=1)/找到短作業(yè)FinishTimeShort=Finish+ServiceTime

17、Short;if(tag=0)/未找到for(int k=0;k<n,FinishTimek=0;k+)/直接進入下一未完成進程Short=k;break;FinishTimeShort=ArrivalTimeShort+ServiceTimeShort;Finish=FinishTimeShort;for(i=0;i<n;i+)/計算周轉時間、帶權周轉時間WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=double(WholeTimei)/double(ServiceTimei);for(int j=0;j<n;j+

18、)/計算總的周轉時間、總的帶權周轉時間totalWT+=WholeTimej;totalWWT+=WeightWholeTimej;AverageWT_FCFS=totalWT/double(n);AverageWWT_FCFS=totalWWT/double(n);/輸出各值cout<<"-短作業(yè)優(yōu)先SJF-"<<endl;cout<<"完成時間:"print(n,FinishTime);cout<<"周轉時間:"print(n,WholeTime);cout<<"帶權周轉時間:"print(n,WeightWholeTime);cout<<"平均周轉時間:"<<AverageWT_FCFS<<endl;cout<<"平均帶權周轉時間:"<<AverageWWT_FCFS<<endl;p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論