您當前的位置:首頁 > 體育

多處理器排程

作者:由 但為君故 發表于 體育時間:2021-12-01

多處理器排程的兩種方法

第一種是

非對稱多處理(asymmetric multiprocessing,AMP).

方法是,在處理器叢集中,讓一個處理器處理系統活動的程式碼(IO,排程決定等等),這種處理器成為主處理器.其他處理器則執行使用者程式程式碼.這種方法比較簡單,而且由於主處理器只專用於處理系統程式碼,可以減輕資料共享的需要.

第二種是

對稱多處理(symmetric multiprocessing,SMP).

它要求每個處理器都有自我排程功能.而且對於就緒佇列和程序執行的情況,這種方法在細分下又有兩種不同的實現途徑.

一為,每個處理器都私有一個程序的就緒佇列.

二為,為所有的程序建立一個公共的就緒佇列.

以上兩種途徑必須保證一個前提,就是在排程的時候必須很小心,執行精確的排程演算法,為每個處理器在執行程序之前,檢查就緒佇列,彈出一個程序並執行.如果多個處理器要訪問一個公共資料區的時候,一定要保證程序不會從佇列中消失.也不會出現兩個處理器執行同一個程序的情況.否則會導致程序缺失或者重複執行,出現難以預料的錯誤.

現在作業系統,如Linux,Windows,Mac OS等等,都採用的是SMP方法。

處理器的親和

對於採用了SMP方法的作業系統,要透過加處理器親和性,保證處理器處理程序的效率。因為程序在處理器中執行的時候,通常會在處理器中建立快取,以多次利用處理器內的資料,減少重複工作,提高效率。但程序在不同的處理器之間遷移的時候,則要在原來的處理器中禁用快取,在新的處理器中重建快取。然而這麼做的代價和開銷會急劇增加,使得工作效率下降。所以作業系統要儘可能保證程序只在一個處理器中執行,避免多次在不同的處理器中遷移。這種措施叫處理器的親和。簡要來說使得一個程序親和一個處理器。

但是親和的執行按照強制性可以有兩種,一種是

軟親和

,作業系統儘可能使得程序在一個處理器中被處理,但是不能保證是否會遷移。另一種是

硬親和

,強制一個程序只能在一個處理器中處理,不允許在不同處理器之間遷移。比如Linux系統就是執行的是硬親和策略。

負載均衡

對於採用了SMP方法的系統,在處理器叢集中,如果出現處理器閒忙不均的情況下,可以從忙碌的處理器中抽出一些程序工作給空閒的處理器中,從而達到整體的工作閒忙平衡,提高處理器資源的利用率。這就是負載均衡策略。

在上文中,按照就緒佇列的分配,可以有建立公共就緒佇列和為每個處理器建立私有就緒佇列兩種方法。

如果有公共就緒佇列,那麼負載均衡通常不必要。

因為隨時可以從公共佇列中拉取一個程序分配到空閒處理器中。但是,對於現代作業系統中,大都是為不同的處理器建立私有就緒佇列,就有必要採用負載均衡,定期檢查每個處理器的負載情況,把超載處理器上的程序遷移到空載處理器中。把一個程序從超載處理器中遷移到空閒處理器時的遷移,叫

推遷移

。空閒處理器從超載處理器拉入一個程序中,則成為

拉遷移

實際上,負載均衡由於有程序的遷移,會消磨處理器親和帶來的優勢。所以處理器親和和負載均衡有一定的對立效果。這就需要設計一個更好的排程演算法。

對稱多執行緒

對稱多執行緒技術也被稱為

超執行緒技術(SMT)

。這是處理器的硬體技術裡實現的,不屬於作業系統技術。主要思想是,把一個真實的物理處理器,在邏輯上劃分成幾個邏輯處理器,使得一個物理處理器劃分成,在功能邏輯上的多個處理器的執行,每個邏輯處理器負責各自的程序工作。如果作業系統能利用劃分的多個邏輯處理器上執行程序的時候,可以透過設計特定的排程演算法,使得處理器資源得到充分利用,發揮更大的效能。

標簽: 處理器  程序  佇列  就緒  遷移