1. 程式人生 > >將計算機思維故事化——之操作系統典型調度算法

將計算機思維故事化——之操作系統典型調度算法

階段 時間片 運行時 pan 滿足 此外 第六天 方案 clas

在計算機正常工作中,後臺有大量的進程在執行,但彼此“不爭吵不爭奪”,這歸功於操作系統中的調度算法


通常。大多數進程的執行能夠簡單的分為兩步走

第一步,將須要運行的進程從外存(比如,電腦的硬盤)中選出來,送至內存“候旨”,準備讓CPU來運行;

第二步,CPU從那些在內存“候旨”的若幹進程中選出一個。開始運行。


簡單的說,調度就是選擇的辦法

【調度是多道程序操作系統的基礎,是操作系統設計的核心基礎。上述“兩步走”中。第一步中的選擇。這次調度稱為“作業調度”;第二步中的選擇,這次調度稱為“進程調度”。】


在計算機發展過程以來,漸漸形成了多種選擇的辦法,當中有的選擇辦法適用於“第一步”階段,有的適用於“第二步”階段,有的兩者都適用。

【在操作系統中存在多種調度算法,當中的有的調度算法適用於作業調度。有的調度算法適用於進程調度,有的調度算法兩者都適合。】


當中有六種辦法比較經典,為了仔細描寫敘述這六種辦法。引入一個情境——“小島取水”


話說,一群人來到一個小島上。決定在小島上生活一段時間。生活期間須要水,而小島上僅僅有一個水源,幸好是源源不斷的。

一群人蜂擁而至地取水,不但秩序亂,還會引發危急。於是大家商議著辦法。定出一個制度來保證取水的秩序。非常快。秩序的若幹方案提出來了,各有優勢又各有劣勢,於是決定開始試行。


第一天,開始試行方案一:誰先到誰先取水。剩下的排隊。於是。每次水源前排著長長的隊伍,人們安靜地等待輪到自己的機會。

非常快。問題出現了。有的人用桶取水洗澡,有的人用杯取水僅僅是為了喝,因為先到先得的制度。打水喝的人為了打到一杯水,不得不等上幾十分鐘,等前面的人都結束才輪到自己。漸漸地,大家發現這個方法看上去比較公平,卻過於死板,應該改進。

非常好的是,這個方法提出了這樣的先到先得的思維,而這樣的思維能夠融合在其它方案之中

【這樣的調度算法叫作“先來先服務調度算法”(FCFS),該算法特點是算法簡單。但效率低,平均等待時間過長。對長作業比較有利,但對短作業不利;但它常被結合在其它調度算法中使用。


第二天,為了彌補方案一的漏洞。大家決定試試方案二:讓須要水較少的先打,須要多的往後排

這使得大家很熱衷於“頻取少取”,由於一次須要的少,就能夠往前面排隊,不分先後抵達。

到了中午猛然發現,隊伍中有一人已經等了整個上午,由於他用桶取水,須要的多。理應排在後面,好不easy看著前面的人越來越少。又來了一群用杯打水的。由於須要的少所以能夠“插隊”,結果到天黑也沒打到水。

所以,大家慢慢地所有換成杯子打水,並且杯子越換越小,甚至出現用勺子取水的另類。

【這樣的調度算法叫作“短作業優先調度算法”(SJF),該算法雖使得平均等待時間大大縮短,但對長作業不利。甚至出現某些長作業永遠得不到執行(“饑餓”現象)。

此外,當用戶人為地縮短執行時間時,該算法不一定真正做到短作業優先。】


第三天,大家開始運行方案三:依照緊迫程度順序排隊打水制定了文件來描寫敘述日常的每件事的緊迫程度,用優先級來描寫敘述須要水的緊迫程度。

大家每次來打水時,先匯報自己打水是為了幹什麽。依據優先級來決定先後。可是發現這樣的優先級文件難以制定,當中有一項“打水洗手”,將此項的緊迫程度規定得很低(理由是:小島周圍都是水。用海水洗手就能夠了),於是,有個小孩想洗手。不管怎麽等,就是輪不到自己去取水。而那些滿足最高優先級取水的人。總是重復來取水,高優先級似乎成了這些人的特權,而導致怨聲載道。到了下午。開始有了改善。採用調整優先級策略。僅僅要是取過一次水。優先級自降一級,理論上給了那些非緊迫程度的人取水的機會,這一天勉強結束了。

【這樣的調度算法叫作“優先級調度算法”。該算法相同會引起“饑餓”現象,使得有些作業永遠得不到運行。為了解決問題,能夠將該算法分為“靜態優先級”和“動態優先級”,通過動態調整優先級來解決“饑餓”現象(該舉措稱為“老化”)。】


第四天,運行方案四:結合方案一和方案二,即同一時候到的。須要少的先打;須要同樣量的,先到的先打由於方案四平衡了方案一和方案二,得到了穩定地運行,用杯子打水的由於須要的少,不須要等太久;用桶打水的。須要的多,但僅僅要去得早排個好隊,一樣可以打到水從根本上攻克了某些人永遠打不到水的情況。

這樣的調度算法叫作“高響應比優先調度算法”,該算法主要用於作業調度,響應比=(等待時間+運行時間)/運行時間。有利於短作業。也兼顧了長作業,克服了“饑餓”現象。】


第五天,大家認為第四天過得挺穩定。或許還能發現更好的方案,於是運行了方案五:大家聚集在一起。由一個人循環地平均分水,一直循環到滿足全部人的需求大家認為這個方法非常公平。對每一個人都同等對待。一天下來,大家都沒有怨氣。但分水的人不幹了。由於分水工作太難做。不知道一次分水量多少比較合適——一次分得太少了,就須要循環非常多次,太麻煩;一次分得太多了,還不如讓他們直接去水源取水更方便

【這樣的調度算法叫作“時間片輪轉調度算法”,在該算法中,時間片的大小對系統性能的影響非常大。時間片過小,CPU頻繁切換,開銷太大;時間片過大,該算法退化成先來先服務調度算法。】


第六天,運行者們消失了一天,或許他們去度假了。或許他們想辦法去了…


第七天,他們興高採烈的回來了。開始運行方案六:讓前來打水的人們依照先後排成隊伍,依舊安排一個人來循環平均分水。

但這次分水量有了改進——第一輪每一個人分一杯,須要一杯的人得到一杯水愜意的離開了。還須要的由於不夠繼續留在隊伍裏;第二輪每一個人分兩杯。相同,滿足的人愜意地離開。仍然須要的人繼續留下……以此類推。

這樣,隊伍的人數越來越少,並且大家沒有不論什麽怨言,更關鍵的是。方案規定,對剛到的人先分水一杯,失去是留,他會依據自己須要決定,而不會陷入無盡的等待。這樣,便兼顧了非常多方面,需求少的人取了一杯水立刻就行滿足。縮短了大家的平均等待時間,並且也不須要匯報打水是為了幹什麽,同一時候也避免了永遠打不到水的情況。

【這樣的調度算法叫作“多級反饋隊列調度算法”,在該算法是時間片輪轉調度算法和優先級調度算法的綜合和發展優先級,兼顧了短作業優先而等待時間短和長作業部分運行而避免“饑餓”現象。


以上就是操作系統六種經典的調度算法(先來先服務調度算法、短作業優先調度算法、優先級調度算法、高響應比優先調度算法、時間片輪轉調度算法、多級反饋隊列調度算法),各有利弊,不同的操作系統則依據自己側重的方面不同而選擇不同進程調度算法。反過來。不同的調度算法適用於不同需求的操作系統。



* 思維碰撞,不要忘了與好友分享!未來將推出“將計算機思維故事化”系列,謝謝大家的關註!

*










將計算機思維故事化——之操作系統典型調度算法