現代操作系統之多處理機系統(中)

多計算機

多計算機是緊耦合CPU,不共享存儲器,每臺計算機都有自己的存儲器。


多計算機硬件

互聯技術

在多計算機中可採用兩種減緩機制。在第一種機制中,每個消息首先被分解(由用戶軟件或網絡接口進行)稱爲有最大長度限制的快,稱爲報。該交換機制稱爲存儲轉換包交換,由願節點的網絡接口卡注入到第一個交換機的報組成。

當整個包到達一個一個輸入緩衝區時,它被複制到沿着其露肩通向下一個交換機的隊列當中,當包到達目標節點所連接的交換機時,該包被i 複製進入目標節點的網絡接口卡,並能最終到達其RAM。

儘管存儲轉發包交換靈活而有效,但是存在增加延遲的問題。

另一種交換機制是電路交換,它包括由第一個交換機建立的,通過所有交換機而到達目標交換機的一條路徑。一旦露肩建立,比特流就從源到目的地通過整個露肩不停的傳輸。在所設計的交換機彙總,沒有中間緩存,電路交換需要有一個建立階段,它需要一點時間。但是一旦建立完成,速度就很快。在包發送結束後,該路徑必須被刪除。

電路交換的一個白內障是蟲孔路由,它把每個包拆成子包,並允許第一個子包在整個路徑還沒有完全建立起來之前流動。

網絡接口

在多計算機中,所有節點裏都有一塊插卡板,它包含節點與互連網絡的連接,這使得多計算機連城一體。這些板的構造方式以及它們如何同主CPU和RAM連接對操作系統有重

要影響。事實上在所有的歐計算機中,接口板上都有一些用來存儲進出的RAM。這樣設計的原因是許多互連網絡是同步的,所以一旦一個包傳送開始,比特流級必須以恆定的速率連續進行。如果包在主RAM中,無法保證穩定。

網卡通常插在PCI總線上,

接口板上課以有一個或多個DMA通道,甚至板上可以有一個完整的CPU。通過請求在系統總線上的塊傳送,DMA通道可以在接口板和主RAM之間以非常高的速率複製包。不過,正式這種塊傳送(佔用系統總線的多個週期)是接口板的RAM的需要總是第一位的。

很多接口板上有一個完整的CPU,可能另外還有一個或多個DMA通道。它們被稱爲網絡處理器,並且其功能日趨強大。這種設計一位這主CPU將一些工作分給網卡。

有兩個CPU則意味這它們必須同步,以避免競爭條件的發生,浙江增加額外的開銷,並且意味着操作系統要承擔更多的工作。


低層次通信軟件

在多計算機系統中高性能通信的敵人是對包的過度複製。

如果說進出RAM的複製是性能瓶頸,那麼進出內核的額外複製會將端到端的延遲加倍 ,並把吞吐量降低一半。不少多計算機把接口板映射到用戶空間,並允許用戶進程直接把包送到卡上,而不需要內河參與。

一個解決方法是將接口板映射到所有需要它的進程中去,但是這樣做就需要有一個機制來避免競爭。

但是那些注入互斥信號量一類的機制需要在進程彼此協作的前提下才能允許。

最多簡單的設計是使用涼快網絡接口板,一塊映射到用戶空間供應用程序使用,另一塊映射到內核空間供操作系統使用。


節點至網絡接口通信

最快的方法是使用板上的DMA芯片直接將他們從RMA複製到板上,這種方法的問題上,DMA使用物理地址。而用戶進程通常不知道有關的物理地址。

爲避免上述問題,可採用一類將頁面釘住和釋放的系統調用。但是這樣代價太大。


用戶層通信軟件

再多計算機中,不同CPU上的進程通過互相發送消息來實現通信。在簡單的情況下,這種調用上暴露給用戶進程的;在較複雜的情況下,遠程通信看起來像過程調用的辦法,將實際的消息傳遞對用戶隱藏起來。


發送和接收

一個問題上如何編制,一般而言上由兩部分組成,一部分上CPU編號,另一部分上這個已編程的CPu上一個進程或端口的編號。在這種方式中,每個CPU可以管理自己的地址而不會由任何衝突。


阻塞調用和非阻塞調用

通常是由系統設計者作出在阻塞原語和非阻塞原語之間的選擇。當然少數系統兩種都可以使用。

非阻塞原語的性能優點被其缺點抵消了——直到消息被i 送出發送者才能修改消息緩衝區。進程在傳輸過程中重寫消息的後果十分嚴重,更糟的是,發送進程不知道傳輸何時結束,所以根本不知道什麼時候重用緩衝區是安全的。

有三種可能解決的方法
  1. 讓內核複製消息到內河緩衝區,然後讓進程繼續
  2. 當消息發送之後中斷髮送這,告知緩衝區又可以使用來(用戶級中斷引發編程問題,而且可能引發競爭條件)
  3. 讓緩衝區寫時複製。在消息發送出去之前,若有修改,則進行復制(會引發不必要的複製)

中斷方式編程困難,而且速度很慢,所以也許對於接受者而言,更好的方法是使用一個過程poll輪詢進來的消息。

還有一個選擇,使用彈出式線程。

這一方法的變種是,在中斷處理程序中直接允許接受者代碼,從而避免來創建彈出線程的麻煩。要使這個方法更快,消息自身可以嗲又該處理程序的句柄。這種方式稱爲主動消息。主動消息只能在雙方完全信任的情況下工作。


遠程過程調用

狗仔所有通信的反省都是輸入暑促好。


遠程過程調用以及稱爲來大量計算機如那句的基礎。習慣上,稱發出調用的過程爲客戶機,而被調用的稱爲服務器。

RPC背後的思想是儘可能得使遠程過程調用像本地調用。客戶程序必須被綁定在客戶端樁上,而服務器程序也綁定在服務器樁上。這些過程隱藏了這樣一個實時,級從客戶機到服務器的過程調用並不是本地調用。

用戶編寫的客戶機過程,至進行對客戶端樁的正常調用。


實現相關的問題

由於客戶機和服務器在不同的地址空間,所以用RPC傳遞指針是不可能的。

通過引用調用的標準調用序列被複制-恢復替代可以解決,但是並不總是奏效。(比如指向一些複雜的數據結構)
因此對於參數要作出某些限制。

此外,對於弱類型語言,無法判斷參數有多大。
而參數類型並不總是能被推導出來的。全局變量也無法使用了


分佈式共享存儲器

採用一種分佈式共享存儲器可以很好得保留共享存儲器的感覺,儘管這個共享存儲器實際上不存在。
操作系統只是從遠程RAM而不是從本地磁盤中滿足了這缺頁異常。對用戶而言,機器看起來擁有共享存儲器。

在DSM系統中,地址空間被互粉爲頁面。這些頁面分佈在系統中國年的所有節點。當一個CPU引用一個非本地地址時,就產生了一個陷阱,DSN會調用包含改地址的頁面並重新指向錯誤命令。

複製

對基本系統的一個改進是複製只讀頁面,可以顯著提高性能。
另一種可能是,不僅複製只讀頁面,而且複製所有頁面。


僞共享

大頁面有其優點也有其缺點,過大的頁面會引起僞共享問題。

僞共享是指兩個無關的變量處於同一個頁面中,其中的修改會讓進程得到另一個。


實現順序一致性

如果不對科協頁面進行復制,那麼實現一致性不難。


DMS在對一個共享頁面進行寫入之前, 先先所有持有該頁面副本的CPU發出一條消息,通知他們解除映射並丟棄該頁面。在其所有解除映射等工作完成之後,該CPU便可以進行寫操作了,

一種方法是允許一個進程獲得在虛擬地址空間上的鎖,用來保證寫時唯一。

另一種方法是修改變化部分。


多計算機調度

將進程分配到工作節點的工作十分重要。

因爲每個節點都擁有自己的進程,因此可以應用任何本地調度算法,但是仍有可能使用多處理機調度。

負載平衡

一旦將進程被i 制定給了某個節點,就不再可控,因此,將哪個進程分配給哪個節點是非常重要的。

從事分配工作的算法惡化啓發則是所謂的處理器算法。

圖論確定算法

將節點分爲子網,尋找子網之間流量最小的組合


發送者發起的分佈式啓發算法

當進程創建時,他就允許在創建它的節點傻姑娘,出非節點裹在,該節點則隨機選擇一個節點並詢問其負載情況。探查工作不會永遠進行,在N次探查之後,如果沒有合適的主機,算法就終止。且進程繼續在原有機器上運行。

在負載重的情況下,所有機器都會持續得對其他機器進行探查沒徒勞地試圖找到一臺願意接收工作的機器,這樣的嘗試會導致巨大的開銷


接受者發起的分佈式啓發算法

由接受者要求更多的工作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章