
進階的行程管理
|
193
行程,不管被分配到的處理器時間比例是多少,至少會運行最小粒度所規定的時間(直
到遭阻擋)。這有助於確保不會導致不可接受的切換成本。也就是,當最小粒度起作用
時,會違反公平性。為目標等待時間及最小粒度使用典型值時,在可運行行程具有合理
數量的常見情況下,不適用最小粒度,但滿足目標等待時間,可維持公平性。
透過把時段的分配從固定改為處理器時間的比例,CFS 能夠維持排班的公平性:每個行
程可以公平分享處理器的時間。此外,CFS 能夠維護一個可設定的排班等待時間,因為
使用了可以設定的目標等待時間。在傳統的 Unix 排班器上,行程會運行一個固定的時
段(先驗的),但是排班等待時間(多久運行一次)是未知的。在 CFS 上,行程會按處
理器時間的比例運行,而且知道等待時間(先驗的),但是時段是動態的,它是系統上
可運行行程之數量的一個函數。它用於處理行程排班的方式明顯不同,但解決了互動及
I/O 密集行程困擾著傳統行程排班器的許多問題。
讓出處理器
儘管 Linux 是一個先佔式多任務作業系統,不過它也提供了一個系統呼叫,讓行程得以
主動讓出執行權,以及指示排班器選出並運行一個新的行程:
#include <sched.h>
int sched_yield (void);
呼叫
sched_yield()
的結果是暫停當前正在運行的行程,於是行程排班器會選出並運行
一個新的行程,這就好像是核心自己先佔當前正在運行之行程的執行權,以便執行一個
新的行程。注意,如果不存在任何其他的可運行行程,這是經常發生的情況,則讓出執 ...