




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗一先來先服務FCFS和短作業優先SJF進程調度算法一:需求分析程序設計的任務: 設計程序模擬進程的先來先服務FCFS和短作業優先 SJF調度過程。假設有n個x進程分別在T1,,Tn時刻到達系統,它們需要的服務時間分別為S1,,Sn分別采用先來先服務 FCFS和短作業優先SJF進程調度算法進行調度,計算每個進程的完成時間、周轉時間和帶權周轉時間,并且統計n個進程的平均周轉時間和平均帶權周轉時間。通過這次實驗,加深對進程概念的理解,進一步掌握進程狀態的轉變、進程調度的策略及對系統性能的評價方法。(1)輸入的形式和輸入值的范圍為免去測試時候需要逐步輸入數據的麻煩,輸入時采用輸入文件流方式將數據放
2、在.txt文件中,第一行為進程個數,第二行為進程到達時間(各個進程的到達時間之間用空格隔開),第三行為進程的服務時間(每個服務時間之間用空格隔開)。(2)輸出的形式模擬整個調度過程,輸出每個時刻的進程運行狀態,同時輸出了每個進程的完成時間,并且按要求輸出了 計算出來的每個進程的周轉時間、帶權周轉時間、所有進程的平均周轉時間以及帶權平均周轉時間。(3)程序所能達到的功能能夠模擬出進程的先來先服務FCFS算法和短作業優先 SJF算法的調度過程,輸入進程個數n;每個進程的到達時間T1,,Tn和服務時間S1,,Sn選擇算法1-FCFS, 2-SJF, 3-退出,用戶做出選擇即可輸出對應的算 法調度過程
3、或者退出程序。(4)測試數據,包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果測試數據及其輸出結果:作業7法進程名ABCDE平均到達時間01234服務時間43524FCFS完成時間47121418周轉時間461011149帶權周轉時間1225.53.52.8SJF完成時間4918613周轉時間4816398帶權周轉時間12.673.21.52.252.1也可看下面截圖的測試結果二:概要設計程序包括主函數、FCFS算法函數、SJF算法函數、輸出函數;主函數流程:輸入文件中的數據一顯示各進程數據一選擇算法一調用相應算法的函數一輸出結果 三:詳細設計SJF算法流程圖:開始調用結束初始化數據N直
4、接進入下一未完成進程并且利用一個for循環判斷 是否找到短作業FinishTimeShort=ArrivalTimeShort+ServiceTimeShortFinish=FinishTimeSW轉時間、帶 敕篇照寸胤周轉時 間、總的帶權周轉 計算平均周轉時FinishTimeShort=Finish+ServiceTi meShort四:調試分析(1):調試過程中遇到的問題以及解決流用醐*t現的回顧討論和分析;開始的時候沒有判斷進程是否到達,導致短進程優先算法運行結果錯誤,后來加上了判斷語句后就解決了改問題。(2):算法的性能分析及其改進設想;即使用戶輸入的進程到達時間沒有先后順序也能準確
5、的計算出結果。組成一個有序的序列)(加循環,判斷各個進程的到達時間先后,(3):經驗和體會。通過本次實驗,深入理解了先來先服務和短進程優先進程調度算法的思想,培養了自己的動手能力, 通過實踐加深了記憶。五:用戶使用說明在同一目錄下的.txt文件中按輸入要求輸入相關數據,并且根據提示選擇相應的算法。 六:測試結果測試數據: 輸出結果: 七:附錄 源程序:4- 43 22 5135 0 4#include<iostream>#include<iomanip>#lnclude<sstream>#include<fstream>格式化輸出結果讀取文件讀取
6、文件using namespace std;const int MaxNum=100;int ArrivalTimeMaxNum;int ServiceTimeMaxNum;int FinishTimeMaxNum;int WholeTimeMaxNum;double WeightWholeTimeMaxNum;double AverageWT_FCFS,AverageWT_SJF;double AverageWWT_FCFS,AverageWWT_SJF;到達時間服務時間完成時間周轉時間帶權周轉時間平均周轉時間平均帶權周轉時間void FCFS(int n);/先來先服務void SJF(i
7、nt n);/短作業優先void print(int n,int array);void print(int n,double array);void printproceed(int n);輸出 FCFS 進程運行狀態void main() (int n,i,j;/n:進程數;i、j:循環計數變量ifstream in("text.txt");/ 讀文件string s;for(i=0;i<3,getline(in,s);i+) 當i=0讀入進程數n ; i=1讀入各進程到達時間;i=2讀入各進程服務時間istringstream sin(s);switch(i)c
8、ase 0:sin>>n;break;case 1:for(j=0;j<n;j+)sin>>ArrivalTimej;break;case 2:for(j=0;j<n;j+)sin>>ServiceTimej;break;顯示各進程數據cout<<setfill('')<<setw(7)<<"進程名"<<setw(1)<<""char ch='A'for(i=0;i<n;i+)cout<<setw(
9、3)<<char(ch+i);cout<<endl<<"到達時間"for(i=0;i<n;i+)cout<<setw(3)<<ArrivalTimei;cout<<endl<<"服務時間"for(i=0;i<n;i+)cout<<setw(3)<<ServiceTimei;cout<<endl;選擇算法:先來先服務FCFS->1 短作業優先SJF->2 關閉>0cout<<”請選擇算法:FCFS
10、->1 SJF->2退出->0”<<endl<<"選擇:";int choice;cin>>choice;while(choice!=0)直到輸入值為0跳出循環,結束程序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
11、);/進行先來先服務 FCFS算法else SJF(n);/進行短作業優先服務 SJF算法cout<<endl<<”請選擇:FCFS->1 SJF->2 退出->0”<<endl<<"選擇:"; cin>>choice; return; / 先來先服務void FCFS(int n) 第一個進程先服務 FinishTime0=ArrivalTime0+ServiceTime0; WholeTime0=FinishTime0-ArrivalTime0; WeightWholeTime0=double
12、(WholeTime0)/double(ServiceTime0); for(int i=1;i<n;i+) if(FinishTimei-1>ArrivalTimei)FinishTimei=FinishTimei-1+ServiceTimei;/如果上一個進程的完成時間大于下一個進程的到達時間, 那么下一個進程的開始時間從上一個進程的完成時間開始 elseFinishTimei=ArrivalTimei+ServiceTimei;/ 否則,下一個進程的開始時間從它本身的到達時間開 始 WholeTimei=FinishTimei-ArrivalTimei; WeightWhol
13、eTimei=double(WholeTimei)/double(ServiceTimei); double totalWT=0,totalWWT=0; for(int j=0;j<n;j+) 循環累加,求總的周轉時間,總的帶權周轉時間totalWT+=WholeTimej; totalWWT+=WeightWholeTimej; AverageWT_FCFS=totalWT/double(n); AverageWWT_FCFS=totalWWT/double(n); 輸出各結果 cout<<"先來先服務 FCFS"<<endl;cout<
14、;<"完成時間分別為:”; print(n,FinishTime); cout<<"周轉時間分別為:"; print(n,WholeTime); cout<<"帶權周轉時間分別為:”; print(n,WeightWholeTime); cout<<"平均周轉時間:"<<AverageWT_FCFS<<endl; cout<<"平均帶權周轉時間:"<<AverageWWT_FCFS<<endl; printproc
15、eed(n);)/ 短作業優先void SJF(int n)(int Short;int Finish=0;double totalWT=0,totalWWT=0;for(int a=0;a<n;a+)FinishTimea=0;int i;for(i=0;i<n;i+)(int tag=0;int Max=10000;for(int j=0;j<n;j+)(/存放當前最短作業的序號存放當前完成時間初始化完成時間為 0循環計數累加變量/用于標記當前完成時間內,是否找到短作業if(FinishTimej=0 && ArrivalTimej<=Finish
16、&& ServiceTimej<=Max) (Max=ServiceTimej;Short=j;tag=1;)if(tag=1)/找到短作業FinishTimeShort=Finish+ServiceTimeShort;)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+)計算周轉時間、帶權周轉
17、時間WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=double(WholeTimei)/double(ServiceTimei);for(int j=0;j<n;j+)計算總的周轉時間、總的帶權周轉時間totalWT+=WholeTimej;totalWWT+=WeightWholeTimej;AverageWT_FCFS=totalWT/double(n);AverageWWT_FCFS=totalWWT/double(n);輸出各值cout<<"短作業優先 SJF"<<endl;c
18、out<<”完成時間:”;print(n,FinishTime);cout<<"周轉時間:”;print(n,WholeTime);cout<<"帶權周轉時間:";print(n,WeightWholeTime);cout<<"平均周轉時間:"<<AverageWT_FCFS<<endl;cout<<"平均帶權周轉時間:"<<AverageWWT_FCFS<<endl; printproceed(n);void print(int n,int array口)/打印int型數組for(int i=0;i<n;i+)cout<<arrayi<<""cout<<endl;void print(int n,double array) 打印double型數組for(int i=0;i<n;i+)cout<<arrayi<<""cout<<endl;void printproceed(int n)打印各時刻各進程的運行情況char ch='A'for(int i=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中語文群文閱讀教學與學生批判性思維培養的關聯性分析論文
- 小學語文閱讀教學與寫作能力培養研究論文
- 芯片燒錄房管理制度
- 蘋果流程化管理制度
- 草根宣講員管理制度
- 《一年級下冊語文園地四》課件
- 萊鋼海綿鐵水再循環裝配計劃
- 超市連鎖-連鎖店的原理及其在零售業發展中的作用培訓教材 102
- 解析幾何基礎綜合-教師版教案
- 湖北省云學名校聯盟2024-2025學年高二下學期期中聯考生物試卷(有答案)
- 2025-2030中國伊利石行業運營效益及競爭策略展望分析報告
- 2025春季學期國開電大本科《管理英語3》一平臺機考真題及答案(第十套)
- 2024-2025學年八年級下冊道德與法治期末測試模擬卷(統編版)(含答案)
- 2025年社區工作者考試題目及答案
- 定額〔2025〕1號文-關于發布2018版電力建設工程概預算定額2024年度價格水平調整的通知
- 2023年貴州貴州貴安發展集團有限公司招聘筆試真題
- 2024年山東鐵投集團招聘筆試參考題庫含答案解析
- 供應商綠色環保環境管理體系評估表
- GB∕T 11344-2021 無損檢測 超聲測厚
- 外科無菌操作技術PPT學習教案
- 寶興縣中藥材生產現狀及發展思路
評論
0/150
提交評論