FCFS和SJF進程調度算法實驗報告_第1頁
FCFS和SJF進程調度算法實驗報告_第2頁
FCFS和SJF進程調度算法實驗報告_第3頁
FCFS和SJF進程調度算法實驗報告_第4頁
FCFS和SJF進程調度算法實驗報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、fcfs和sjf進程調度算法實驗報告【實驗題目】:編寫程序,實現(xiàn)fcfs和sjf算法,模擬作業(yè)調度過程,加深對作業(yè)調度的理解。【實驗內容】實現(xiàn)fcfs和sjf調度算法。 數(shù)據(jù)結構設計(jcb,后備作業(yè)隊列) 算法實現(xiàn)與模擬(排序、調度) 輸出調度結果,展示調度過程并解釋【實驗要求】1. 設計作業(yè)控制塊(jcb)的數(shù)據(jù)結構 應包含實驗必須的數(shù)據(jù)項,如作業(yè)id、需要的服務時間、進入系統(tǒng)時間、完成時間,以及實驗者認為有必要的其他數(shù)據(jù)項。2. 實現(xiàn)排序算法(將作業(yè)排隊) 策略1:按“進入系統(tǒng)時間”對作業(yè)隊列排序(fcfs) 策略2:按“需要的服務時間”對作業(yè)隊列排序(sjf)3. 實現(xiàn)調度過程模擬(1

2、) 每個作業(yè)用一個jcb表示,如果模擬fcfs,按策略1將作業(yè)排隊,如果模擬sjf,按策略2將作業(yè)排隊(2)選擇隊首的作業(yè),將其從后備隊列移出(3) (作業(yè)運行過程,在本實驗中,無需實現(xiàn),可認為后備隊列的作業(yè)一但被調度程序選出,就順利運行完畢,可以進入第4步)(4) 計算選中作業(yè)的周轉時間(5) 進行下一次調度(去往第2步)4.實現(xiàn)結果輸出 輸出作業(yè)狀態(tài)表,展示調度過程 初始作業(yè)狀態(tài)(未調度時) 每次調度后的作業(yè)狀態(tài)設計作業(yè)控制塊(jcb)的數(shù)據(jù)結構 每個作業(yè)由一個作業(yè)控制塊jcb表示,jcb可以包含如下信息:作業(yè)名、提交時間、所需的運行時間、所需的資源、作業(yè)狀態(tài)、鏈指針等等。具體結構如下:t

3、ypedefstructjcbcharname10;/*作業(yè)名*/ charstate;/*作業(yè)狀態(tài)*/intts;/*提交時間*/floatsuper;/*優(yōu)先權*/inttb;/*開始運行時間*/inttc;/*完成時間*/floatti;/*周轉時間*/floatwi;/*帶權周轉時間*/intntime;/*作業(yè)所需運行時間*/charresource10;/*所需資源*/structjcb*next;/*結構體指針*/jcb;jcb*p,*tail=null,*head=null; 作業(yè)的狀態(tài)可以是等待w(wait)、運行r(run)和完成f(finish)三種狀態(tài)之一。每個作業(yè)的最

4、初狀態(tài)總是等待w。,組成一個后備隊列等待,總是首先調度等待隊列中隊首的作業(yè)。本實驗采用鏈表的形式存放各后備隊列當中的作業(yè)控制塊,各個等待的作業(yè)按照提交時刻的先后次序排隊。當一個作業(yè)進入系統(tǒng)時,就為其動態(tài)建立一作業(yè)控制塊(jcb),掛入后備隊列尾部。當作業(yè)調度時,從后備隊列中按某種調度算法選擇一作業(yè),讓其進入主存以便占用cpu執(zhí)行。每個作業(yè)完成后要打印該作業(yè)的開始運行時刻、完成時刻、周轉時間和帶權周轉時間,這一組作業(yè)完成后要計算并打印這組作業(yè)的平均周轉時間、帶權平均周轉時間。程序代碼:#include#include#define number 5void main() int n;int da

5、odanumber,fuwunumber,i;cout請依次輸入各個進程的到達時間并以空格間隔:; for(i=0;idaodai; cout請依次輸入各個進程的服務時間,并以空格間隔:; for(i=0;ifuwui;coutn;while(n3)coutn;struct statedd /聲明結構 bool donef,dones; int daoda,fuwu; float wancheng,zhouzhuan,daiquan,wan,zhou,dai;statedd processnumber;/聲明結構變量,這里為數(shù)組int timeflyf=0,timeflys=0;/定義兩個類似

6、于秒表的變量int j,k,l,nextprof,nextpros;/ 獲取數(shù)據(jù)for(i=0;inumber;i+)processi.donef = false;processi.dones = false;processi.wancheng = 0;processi.zhouzhuan = 0;processi.daiquan = 0;processi.wan = 0;processi.zhou = 0;processi.dai =0;processi.daoda = daodai;processi.fuwu = fuwui;/ 獲取最先到達的進程下標firstint first=0;l=

7、first;for(i=1;idaodai)first=i;processfirst.donef=true;processfirst.dones=true;processfirst.wancheng = processfirst.fuwu + processfirst.daoda;processfirst.wan = processfirst.fuwu + processfirst.daoda;timeflyf += processfirst.daoda+processfirst.fuwu;timeflys += processfirst.daoda+processfirst.fuwu;/ 接

8、下去到達的進程/*/ fcfs *for(j=1;jnumber;j+)nextprof = number+1;for(k =0 ; knumber; k+ )if( !processk.donef )if( processk.daoda processk.daoda ) nextprof = k; /獲取到達時刻最先的進程/else/if2/if1/for/ 處理processnextprof.wancheng = processnextprof.fuwu + timeflyf;timeflyf += processnextprof.fuwu;processnextprof.donef=tr

9、ue; / circle2/ sjf *for(j=1;jnumber;j+)nextpros = number+1;for(k=0 ; knumber; k+ )if(!processk.dones)if( processk.daoda processk.fuwu ) nextpros = k; /獲取服務時間最小的進程/else/if2/if1/for/ 處理processnextpros.wan = processnextpros.fuwu + timeflys;timeflys += processnextpros.fuwu;processnextpros.dones=true; /

10、circle2/*float fz=0,fdq=0,sz=0,sdq=0;/for(i=0;inumber;i+) /-processi.zhouzhuan=processi.wancheng-processi.daoda; fz += processi.zhouzhuan;processi.daiquan=processi.zhouzhuan/processi.fuwu;fdq += processi.daiquan;/-processi.zhou=processi.wan-processi.daoda;sz += processi.zhou;processi.dai=processi.zh

11、ou/processi.fuwu;sdq += processi.dai;/=輸出=/-if(n=1|n=3)couttendl;coutfcfs:endl;for(i=0;inumber;i+)if(i1)cout時刻l:進程i+1在運行endl;elsecout時刻processi-1.wancheng:進程i+1在運行endl;coutsetw(10)進程id ;coutsetw(10)完成時間 ;coutsetw(10)周轉時間 ;coutsetw(10)帶權周轉時間 endl;for(i=0;inumber;i+)coutsetw(10)i+1 ;coutsetw(10)setios

12、flags(ios:fixed)setprecision(2)processi.wancheng ;coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.zhouzhuan ;coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.daiquan endl;cout平均周轉時間為: setiosflags(ios:fixed)setprecision(2)fz/numberendl;cout平均帶權周轉時間為:setiosflags(ios:fixed)setprecisi

13、on(2)fdq/numberendl;/-if(n=2|n=3)couttendl;coutsjf:endl;for(i=0;inumber;i+)if(i1)cout時刻l:進程i+1在運行endl;elsecout時刻processi-1.wan:進程i+1在運行endl;coutsetw(10)進程id ;coutsetw(10)完成時間 ;coutsetw(10)周轉時間 ;coutsetw(10)帶權周轉時間 endl;for(i=0;inumber;i+)coutsetw(10)i+1 ;coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.wan ;coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.zhou ;coutsetw(10)setiosflags(ios:fixed)setprecision(2)processi.dai endl;cout平均周轉時間為: setiosflags(ios:fixed)setprecision(2)sz/numberendl;cout平均帶

溫馨提示

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

評論

0/150

提交評論