2008/02/25

[Programming][Kernel] 程序的排程

一般排程演算法都是「根據程序優先序(priority-based)」來決定排程的方式。作法是:根據程序的價值和所需的處理器時間,將程序分成不同的等級。具有較高優先序的程序會比低優先序的程序先執行,而具有相同優先序的程序則會以 round-robin (一個接一個輪流,反覆這種過程) 的方式進行排程。在某些系統中(linux 也包含在內),高優先序的程序也會取得較長的執行時段。擁有可執行時段及最高優先的可執行程序總是會優先執行。使用者與系統都可以藉改變程序的優先序來影響系統的排程行為。 (賦予 nice 值)

基於這樣的想法, Linux 提出了「以動態優先序為基礎(dynamic priority-based)」的排程方案。它的概念是說,在一開始的時候賦予程序基本的優先序,然後讓排程器藉動態改變優先序的方式,來滿足想達成的排程目標。例如,如果某程序等待 I/O 的時間遠超過實際的執行時間,則這個程序明顯屬於 I/O 密集的類型。這時,按照 Linux 的做法,跟著的動作就是增加這個程序的優先序。反之,如果某程序總是一口氣就用完它被賦予的 timeslice ,則明顯是處於處理器密集的類型,跟著,它的優先序就會機動的減少。

# (優先序 nice 值,是愈低則分配到的 timeslice 會愈多,所以上文的優先序調高用的是「增加優先序(值)」而不是「調高優先序」,主要是因為中文裡頭的「高優先」,明顯是要先做,在文中容易引起歧義,故避免之。)

沒有留言:

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...