片上嵌入式多處理器的一致性機制設計
如果在向前移動的過程中出現停頓,分布式系統將出現活鎖現象。在處理器上,這將在沒有向前發展的“載入/存儲”的程序計數器中得到反映。當多個緩存試圖獲得緩存線的所有權失敗時,這種情況常常發生。如果在該系統中適當地建立一個全局串行順序,則每個代理程序就可以按照這個順序來處理請求。必須按照公平方式來建立全局串行順序,并且公平地將各種資源(端口、總線、緩沖器)分配給多線程/多處理器。
另一個與防止活鎖有關的問題是流量控制。系統的流量控制將限制資源的分配。以ad-hoc方式實現的流量控制可能導致活鎖,而常見的一種情況就是在響應請求的同時,過度地使用重試或否定應答(NACK)。
其它設計考慮
除了死鎖和活鎖之外,設計工程師還應該考慮以下的問題:
緩存層次和DMA:當事務穿過緩存層次時將產生死鎖問題。通常,我們可以采納在更廣泛的協議中使用的相同機制,以便在單獨的(虛擬或真實)通道/FIFO中保留請求和回復。
另一個問題是確定增強一致性的緩存級別(L1緩存、L2緩存或L3緩存),以及I/O應在哪個位置上從一致性域進入和提取緩存線。通常情況下,包含(inclusion)問題的相關解決機在很大程度上依賴于具體的應用或系統。通過在一致性系統的事務集合包含線索(hint),可一致性系統中使用線索來進行預取和數據放置。一個顯而易見的例子就是路由。在路由系統中,需要把外來IP包的頭文件與一個表進行匹配,以該IP包的目標緩沖器/接口。通過利用線索對事務進行分類(如讀出/寫入、命中/不命中策略),可以將這些頭文件放在靠近較低緩存級別的位置。
同步和屏障(barrier)操作:許多ISA提供各種必須映射到一致性系統的原子語義(atomic primitive)。較弱的內存系統要求一種被稱為屏障的安全網落,它可以在發送敏感代碼序列期間,強迫發生某種行為(通常在處理器或線程發出的“存儲”和“載入”操作之間)。這種屏障一般通過插入ISA支持的專用屏障指令來實現。一致性系統可能需要通過動態地停滯某些事務來對這些操作作出響應,以支持這些行為。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論