
進階的行程管理
|
199
處理器傾向
Linux 支援具多個處理器的單一系統。開機過程除外,支援多個處理器的大量工作由行
程排班器負責完成。在多處理器機器上,行程排班器必須決定每個 CPU 之上要運行哪
些行程。
有兩項挑戰源自此責任:排班器必須想辦法充分利用系統上所有處理器,因為當有一
個行程已備妥等待運行,卻有一個 CPU 閒置在一旁,這顯然沒有效率。然而,一個行
程一旦被安排上在某個 CPU 上運行,往後行程排班器也會將它安排在相同的 CPU 上運
行。這是有益的,因為把一個行程從一個處理器遷移到另一個處理器是要付出代價的。
這些代價中最大者與遷移的
快取效應
(
cache effect
)有關。由於現代 SMP 系統的設
計,與每個處理器相關的快取區是不同且獨立的。也就是,如果資料位於一個處理器的
快取區中,就不會位於另一個處理器的快取區中。因此,如果一個行程被移往一個新的
CPU,而且把新的資料寫入記憶體,那麼位於舊 CPU 之快取區中的資料就過時了。現
在若使用該快取區,則會導致資料遭到破壞。為了避免此現象,當一個快取區中快取了
一個新的記憶體團塊時,這會讓每個其他快取區中的資料失效。因此,任何時刻,特定
的一段資料只能出現在一個處理器的快取區中(假定資料全都被快取起來)。當有一個
行程從一個處理器移往另一個處理器,會因而付出兩種代價:被移動的行程不再能夠存
取被快取起來的資料,而且位於原來處理器之快取區中的資料必須作廢。因為必須付出
這些代價,所以行程排程器會盡可能為一個行程安排特定的 CPU 來運行它。 ...