將計算機思維故事化 之作業系統典型排程演算法

2021-06-26 11:49:21 字數 3325 閱讀 2687

在計算機正常工作中,後台有大量的程序在執行,但彼此「不爭吵不爭奪」,這歸功於作業系統中的排程演算法

通常,大多數程序的執行可以簡單的分為兩步走

第一步,將需要執行的程序從外存(例如,電腦的硬碟)中選出來,送至記憶體「候旨」,準備讓cpu來執行;

第二步,cpu從那些在記憶體「候旨」的若干程序中選出乙個,開始執行。

簡單的說,排程就是選擇的辦法

【排程是多道程式作業系統的基礎,是作業系統設計的核心基礎。

上述「兩步走」中,第一步中的選擇,這次排程稱為「作業排程」;第二步中的選擇,這次排程稱為「程序排程」。】

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

【在作業系統中存在多種排程演算法,其中的有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適合。】

其中有六種辦法比較經典,為了細緻描述這六種辦法,引入乙個情境——「小島取水」

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

一群人蜂擁而至地取水,不但秩序亂,還會引發危險。於是大家商量著辦法,定出乙個制度來保證取水的秩序。

很快,秩序的若干方案提出來了,各有優勢又各有劣勢,於是決定開始試行。

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

很快,問題出現了,有的人用桶取水洗澡,有的人用杯取水只是為了喝,由於先到先得的制度,打水喝的人為了打到一杯水,不得不等上幾十分鐘,等前面的人都結束才輪到自己。

漸漸地,大家發現這個方案看上去比較公平,卻過於死板,應該改進。很好的是,這個方案提出了這種先到先得的思維,而這種思維可以融合在其他方案之中

【這種排程演算法叫作「先來先服務排程演算法」(fcfs),該演算法特點是演算法簡單,但效率低,平均等待時間過長;

對長作業比較有利,但對短作業不利;但它常被結合在其他排程演算法中使用。】

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

這使得大家非常熱衷於「頻取少取」,因為一次需要的少,就可以往前面排隊,不分先後抵達。

到了中午猛然發現,隊伍中有一人已經等了整個上午,因為他用桶取水,需要的多,理應排在後面,好不容易看著前面的人越來越少,又來了一群用杯打水的,因為需要的少所以可以「插隊」,結果到天黑也沒打到水。

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

【這種排程演算法叫作「短作業優先排程演算法」(sjf),該演算法雖使得平均等待時間大大縮短,但對長作業不利,甚至出現某些長作業永遠得不到執行(「飢餓」現象)。

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

制定了檔案來描述日常的每件事的緊迫程度,用優先順序來描述需要水的緊迫程度。大家每次來打水時,先匯報自己打水是為了幹什麼,根據優先順序來決定先後。

但是發現這種優先順序檔案難以制定,其中有一項「打水洗手」,將此項的緊迫程度規定得非常低(理由是:小島周圍都是水,用海水洗手就可以了),

於是,有個小孩想洗手,無論怎麼等,就是輪不到自己去取水。而那些滿足最高優先順序取水的人,總是反覆來取水,高優先順序似乎成了這些人的特權,而導致怨聲載道。

到了下午,開始有了改善,採用調整優先順序策略,只要是取過一次水,優先順序自降一級,理論上給了那些非緊迫程度的人取水的機會,這一天勉強結束了。

【這種排程演算法叫作「優先順序排程演算法」,該演算法同樣會引起「飢餓」現象,使得有些作業永遠得不到執行。

為了解決這個問題,可以將該演算法分為「靜態優先順序」和「動態優先順序」,通過動態調整優先順序來解決「飢餓」現象(該舉措稱為「老化」)。】

第四天,執行方案四:結合方案一和方案二,即同時到的,需要少的先打;需要相同量的,先到的先打

因為方案四平衡了方案一和方案二,得到了穩定地執行,用杯子打水的因為需要的少,不需要等太久;用桶打水的,需要的多,但只要去得早排個好隊,一樣能夠打到水

從根本上解決了某些人永遠打不到水的情況。 【

這種排程演算法叫作「高響應比優先排程演算法」,該演算法主要用於作業排程,

響應比=(等待時間+執行時間)/執行時間,有利於短作業,也兼顧了長作業,克服了「飢餓」現象。】

第五天,大家覺得第四天過得挺穩定,也許還能發現更好的方案,於是執行了方案五:大家聚集在一起,由乙個人迴圈地平均分水,一直迴圈到滿足所有人的需求

大家覺得這個方案非常公平,對每個人都同等對待。一天下來,大家都沒有怨氣,但分水的人不幹了。

因為分水工作太難做,不知道一次分水量多少比較合適——一次分得太少了,就需要迴圈很多次,太麻煩;一次分得太多了,還不如讓他們直接去水源取水更方便

【這種排程演算法叫作「時間片輪轉排程演算法」,在該演算法中,時間片的大小對系統效能的影響很大,

時間片過小,cpu頻繁切換,開銷太大;時間片過大,該演算法退化成先來先服務排程演算法。】

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

第七天,他們興高采烈的回來了,開始執行方案六:讓前來打水的人們按照先後排成隊伍,依然安排乙個人來迴圈平均分水。但這次分水量有了改進——第一輪每個人分一杯,需要一杯的人得到一杯水滿意的離開了,還需要的因為不夠繼續留在隊伍裡;第二輪每個人分兩杯,同樣,滿足的人滿意地離開,仍然需要的人繼續留下……以此類推。這樣,隊伍的人數越來越少,而且大家沒有任何怨言,更關鍵的是,方案規定,對剛到的人先分水一杯,失去是留,他會根據自己需要決定,而不會陷入無盡的等待。

這樣,便兼顧了很多方面,需求少的人取了一杯水立馬就能夠滿足,縮短了大家的平均等待時間,而且也不需要匯報打水是為了幹什麼,同時也避免了永遠打不到水的情況。

【這種排程演算法叫作「多級反饋佇列排程演算法」,在該演算法是時間片輪轉排程演算法和優先順序排程演算法的綜合和發展優先順序,

兼顧了短作業優先而等待時間短和長作業部分執行而避免「飢餓」現象。】

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

* 思維碰撞,不要忘了與好友分享!

未來將推出「將計算機思維故事化」系列,

謝謝大家的關注!*

計算機作業系統 計算機概論之作業系統

作業系統 operating system,os 是管理計算機硬體與軟體資源的電腦程式,這組程式的關鍵在於管理計算機的所有活動及驅動系統中的所有硬體,如管理與配置記憶體 決定系統資源供需的優先次序 控制輸入與輸出裝置 操作網路與管理檔案系統等基本事務。早期計算機硬體介面並沒有如今這般統一,同時期也尚...

計算機作業系統

為什麼要有作業系統 計算機系統是乙個複雜的系統,如果每位程式設計師在程式設計時都必須掌握計算機系統的所有細節,就會嚴重影響程式設計師的開發效率 作業系統可以對計算機硬體加以管理和優化使用,為使用者程式提供更好的執行環境。作業系統以及其位置 作業系統組成 作業系統功能 應用程式直接與作業系統及其抽象打...

計算機作業系統

實驗一 熟悉linux作業系統 程序觀測 實驗目的 1 了解在linux作業系統中程序的特點和表現形式 2 掌握linux檢視程序的方式與方法 3 在乙個程序中建立另乙個程序的方法 4 掌握父程序和子程序的關係和fork的用法 實驗內容 1 編寫乙個簡單的程式,使用ps或top工具觀察該程序的的id...