1. 程式人生 > 其它 >程序排程演算法小結

程序排程演算法小結

程序排程演算法,說白了在有限的CPU資源下,如何充分的利用CPU 高效的為各個程序服務。

村裡新開了一個網咖 類比一臺機器

網咖裡有一臺可供上網的電腦 類比單核CPU

來了一群小學生興高采烈的想上網 類比一堆程序等著CPU來執行

網咖的老闆 類比作業系統的程序排程器

OK 到這裡,一堆程序搶著一個單核CPU執行 被我們類比成了一群小學生去網咖搶一臺電腦上網。

非搶佔式時代

(任何一個小學生上機了,其他人必須等他玩夠了才能上,他沒玩夠都只能在旁邊看著)

1.先來先服務演算法

很好理解了,按照小學生們進入網咖的順序排隊,一個一個的玩,上一個玩夠了 下一個才能上。

問題:來的晚的小明同學就很氣,明明自己就想上網看一下拼嘻嘻買的練習冊郵到哪了,五分鐘都用不上的事,硬是要等前面的張三同學打一局50分鐘還不投的LOL排位

對於執行時間短來的晚的程序很不友好,執行時間長的程序排在前面會導致後面的程序響應時間大大增長

2.短任務優先演算法

也很好理解,不論小學生們什麼時候進的網咖,每次都按每個小學生想上網的時間排序,再按順序上網

問題:愛學習的小明同學早早的就能占上電腦,但是張三同學就很惱火,從早上八點來的想打一局LOL 排到晚上還沒排到,後來的小馬晚上五點來的都能排在他前邊

很容易使執行時間長的程序排在後面長時間飢餓

3.高響應比優先演算法

既然光靠進網咖順序排序不公平,光靠佔用電腦上網時間排序也不中,那不如二者結合一下

響應比 = (等待時間+要求服務時間)/ 要求服務時間 根據響應比排序,這下小學生們都覺得公平多了。

完全序列執行,使用者體驗不好,多個程序不能並行執行

搶佔式時代

(不需要等上一個小學生玩夠,根據網管的規則可以直接讓下一個小學生上去爽一爽)

搶佔式相比較非搶佔式,就是一天網咖老闆來了,發現小學生們規規矩矩的排隊,無論按什麼規則,總有排在後面的小學生默默落淚

網咖老闆心裡不是滋味,於是想辦法打破之前的規則,制定新的規則,不需要上一個小學生玩夠就可以根據規則,讓下一個小學生上去爽一會,再輪給下一個小學生。沒辦法,一臺電腦大家擠一擠嘛。

4.時間片輪轉演算法

小學生還是按照進網咖的先後順序排隊,網咖老闆拿出一塊秒錶,每個小學生上機就開始計時,到了規定的時間就讓下一個小學生上。

問題: 老闆如果把秒錶設定十秒,結果每個小學生上機後光是開機+關機就要用掉5秒,那他孃的輪來輪去時間都浪費在開機關機上了。

時間片設計的過端會導致CPU頻繁的上下文切換,會浪費資源

5.優先順序排程演算法

老闆根據想上網時間,來網咖順序,以及家裡有沒有背景(是否是核心程序)來綜合考慮,發給每個小學生髮一張數字卡片,拿到的數字越小代表優先順序越高

然後根據優先順序排序,順序讓小學生們上機

老闆還會動態的更新小學生手裡的數字卡片,最大努力的保證公平,也最大努力的讓家裡有背景的同學贏在起跑線上。

最後看一下程序排程切換的實現