- 本博客轉載自http://blog.csdn.net/houchaoqun_xmu/article/details/55539362請尊重版權完整
操作系統系列
學習至此,發現很多學了但很久沒用的知識,久而久之,慢慢遺忘。等哪天還需要的話,卻發現已經忘得差不多了,即使整理了文檔(word等),還是得從頭再學一遍。讀研第一學期,發現很多東西都可以從博客上學習到,也有不少博主嘔心瀝血整理了挺多有用的博文。於是,本人藉此契機,也慢慢開始整理一些博文,不斷改進完善中。整理博文(IT)有如下目的:
- 首要目的:記錄“求學生涯”的所學所悟,不斷修改,不斷更新!(有讀者的互動)
- 其次目的:在這“開源”的時代,整理並分享所學所悟是一種互利的行爲!
博文系列:操作系統課程的相關實驗
6個實驗相關的代碼下載地址:http://download.csdn.net/detail/houchaoqun_xmu/9865648
-------------------------------
先來先服務FCFS和短作業優先SJF進程調度算法
一、概念介紹和案例解析
FCFS調度算法
先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於作業調度,也可用於進程調度。當在作業調度中採用該算法時,每次調度都是從後備作業隊列中選擇一個或多個最先進入該隊列的作業,將它們調入內存,爲它們分配資源、創建進程,然後放入就緒隊列。在進程調度中採用FCFS算法時,則每次調度是從就緒隊列中選擇一個最先進入該隊列的進程,爲之分配處理機,使之投入運行。該進程一直運行到完成或發生某事件而阻塞後才放棄處理機。
- 案例剖析:
- 案例剖析2:採用FCFS調度算法時的調度性能
- SJF調度算法:
- 該算法對長作業不利,如作業C的週轉時間由10增至16,其帶權週轉時間由2增至3.1。更嚴重的是,如果有一長作業(進程)進入系統的後備隊列(就緒隊列),由於調度程序總是優先調度那些(即使是後進來的)短作業(進程),將導致長作業(進程)長期不被調度。
- 該算法完全未考慮作業的緊迫程度,因而不能保證緊迫性作業(進程)會被及時處理。
- 由於作業(進程)的長短只是根據用戶所提供的估計執行時間而定的,而用戶又可能會有意或無意地縮短其作業的估計運行時間,致使該算法不一定能真正做到短作業優先調度。
二、實驗介紹
- 問題描述:
設計程序模擬進程的先來先服務FCFS和短作業優先SJF調度過程。假設有n個進程分別在T1,… ,Tn時刻到達系統,它們需要的服務時間分別爲S1,… ,Sn。分別採用先來先服務FCFS和短作業優先SJF進程調度算法進行調度,計算每個進程的完成時間、週轉時間和帶權週轉時間,並且統計n個進程的平均週轉時間和平均帶權週轉時間。
- 程序要求:
---- 進程個數n;每個進程的到達時間T1, … ,Tn和服務時間S1, … ,Sn;選擇算法1-FCFS,2-SJF。
---- 要求採用先來先服務FCFS和短作業優先SJF分別調度進程運行,計算每個進程的週轉時間和帶權週轉時間,並且計算所有進程的平均週轉時間和帶權平均週轉時間。
---- 輸出:要求模擬整個調度過程,輸出每個時刻的進程運行狀態,如“時刻3:進程B開始運行”等等。
---- 輸出:要求輸出計算出來的每個進程的週轉時間、帶權週轉時間、所有進程的平均週轉時間以及帶權平均週轉時間。
三、程序設計和開發
- 程序設計:
- Initial()進行初始化。
- input()對到達時間和服務時間進行輸入。
- get_firstProcess()獲得第一個進程,FCFS和SJF算法的實現相同。
- FCFS()對算法進行處理。
- SJF()對算法進行處理。
- choose_Algorithm();對實現算法的類別進行選擇:具有容錯性特徵。
- FCFS:
- SJF:
四、實驗結果分析
- FCFS算法:
- SJF算法: