作業系統 實驗二 作業排程模擬程式

2022-04-03 10:58:19 字數 3628 閱讀 8904

1.實驗目的

(1)加深對作業排程演算法的理解;

(2)進行程式設計的訓練。

2.實驗要求

用高階語言編寫乙個或多個作業排程的模擬程式。

單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執行的時間等因素。

作業排程演算法:

1)  採用先來先服務(fcfs)排程演算法,即按作業到達的先後次序進行排程。總是首先排程在系統中等待時間最長的作業。

2)  短作業優先 (sjf) 排程演算法,優先排程要求執行時間最短的作業。

每個作業由乙個作業控制塊jcb表示,jcb可以包含以下資訊:作業名、提交(到達)時間、所需的執行時間、所需的資源、作業狀態、鏈指標等等。

作業的狀態可以是等待w(wait)、執行r(run)和完成f(finish)三種之一。每個作業的最初狀態都是等待w。

一、模擬資料的生成

1.   允許使用者指定作業的個數(2-24),預設值為5。

2.   允許使用者選擇輸入每個作業的到達時間和所需執行時間。

3.  (**)從檔案中讀入以上資料。

4.  (**)也允許使用者選擇通過偽隨機數指定每個作業的到達時間(0-30)和所需執行時間(1-8)。

二、模擬程式的功能

1.  按照模擬資料的到達時間和所需執行時間,執行fcfs, sjf和hrrn排程演算法,程式計算各作業的開始執行時間,各作業的完成時間,周轉時間和帶權周轉時間(周轉係數)。

2.   動態演示每排程一次,更新現在系統時刻,處於執行狀態和等待各作業的相應資訊(作業名、到達時間、所需的執行時間等)對於hrrn演算法,能在每次排程時顯示各作業的響應比r情況。

3. (**)允許使用者在模擬過程中提交新作業。

4. (**)編寫並排程乙個多道程式系統的作業排程模擬程式。 只要求作業排程演算法:採用基於先來先服務的排程演算法。 對於多道程式系統,要假定系統中具有的各種資源及數量、排程作業時必須考慮到每個作業的資源要求。

三、模擬資料結果分析

1.  對同乙個模擬資料各演算法的平均周轉時間,周轉係數比較。

2. (**)用曲線圖或柱形圖表示出以上資料,分析演算法的優點和缺點。

四、實驗準備

序號

準備內容

完成情況

什麼是作業?

乙個作業具備什麼資訊?

為了方便模擬排程過程,作業使用什麼方式的資料結構存放和表示?jcb

作業系統中,常用的作業排程演算法有哪些?

如何程式設計實現作業排程演算法?

模擬程式的輸入如何設計更方便、結果輸出如何呈現更好?

五、其他要求

1.  完成報告書,內容完整,規格規範。

2.  實驗須檢查,回答實驗相關問題。

注:帶**號的條目表示選做內容。

根據指定的實驗課題,完成設計、編碼和除錯工作,完成實驗報告。

可以採用tc,也可以選用windows下的利用各種控制項較為方便的vb,vc等視覺化環境。也可以自主選擇其他實驗環境。

單道fcfs演算法:

源**

#include#include

struct

job;

void fcfs(job jobs,int temp[100],int jobnum);//

先到先服務演算法

void sjf(job jobs[10],int jobnum);//

短作業優先演算法

void hrrf(job jobs[10],int jobnum);//

最高響應比優先演算法

int main(void

)

//按到達系統時間排序

for(x=0;x)}}

printf("\n

");printf(

"按到達系統時間排序:\n");

for(i=0;i)

//呼叫先到先服務演算法

//fcfs(jobs,temp,jobnum);

//呼叫短作業優先演算法

//sjf(jobs,jobnum);

while(choice!=0

)

else

if(choice==2

)

else

if(choice==3

)

}return0;

}/*先到先服務演算法

*/void fcfs(job jobs[10],int temp[100],int

jobnum)

printf(

"\n\n");

printf(

"呼叫先到先服務演算法:\n\n");

printf(""

);

for(i=0;i)

}/*短作業優先演算法

*/void sjf(job jobs[10],int

jobnum)

for(i=0;i)}}

jobs[temps[

0]].startime=jobs[temps[0

]].arrtime;

jobs[temps[

0]].finitime=jobs[temps[0]].arrtime+jobs[temps[0

]].reqtime;

jobs[temps[

0]].zhouzhuan=jobs[temps[0]].finitime-jobs[temps[0

]].arrtime;

for(i=1;i)

printf(

"\n\n");

printf(

"呼叫最短作業優先演算法:\n\n");

printf(""

);

for(i=0;i)

}/*最高響應比優先演算法

*/void hrrf(job jobs[10],int

jobnum)

執行截圖

輸入1使用先到先服務演算法

輸入2使用短作業優先演算法

輸入0退出排程演算法程式

作業系統 實驗二 作業排程模擬程式

1.實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。2 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執行的時間等因素。作業排程演算...

作業系統 實驗二 作業排程模擬程式

實驗 二 作業排程模擬程式 一 實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。二 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執...

作業系統實驗二作業排程模擬程式

實驗二作業排程模擬程式 1.實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。2 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執行的...