在 ARM SMMU(System Memory Management Unit)中,Stream Table 是一個非常關鍵的資料結構,它用於管理和對映裝置的記憶體訪問請求。它的作用主要體現在以下幾個方面:
1. 裝置請求的流分類
- 在系統中,不同的外設可能透過 SMMU 傳送記憶體訪問請求。SMMU 將這些請求按照來源(如來自哪個外設或請求的上下文)進行分類,這種分類叫做流(Stream)。每個流都有一個唯一的Stream ID,用於標識具體的外設請求來源。
- Stream Table 就是根據這些 Stream ID 來管理和記錄不同流的屬性和對映資訊。每個流對應 Stream Table 中的一項記錄。
2. 地址空間轉換
- Stream Table 中的每一項記錄指定了一個裝置的 Stream ID 應該使用哪個上下文描述符(Context Descriptor)。上下文描述符中包含有地址轉換資訊,比如虛擬地址到實體地址的對映,訪問許可權等。
- 當一個外設發出記憶體訪問請求時,SMMU 會根據 Stream ID 從 Stream Table 中查詢對應的上下文描述符,從而決定如何將該請求的虛擬地址轉換為實體地址。
3. 訪問許可權控制
- Stream Table 中的記錄不僅用於地址轉換,還包含訪問控制資訊。這些資訊可以指定某些裝置只能訪問特定的記憶體區域,或者完全禁止訪問某些記憶體區域,從而提高系統的安全性。
- 透過 Stream Table 的配置,可以實現對每個外設記憶體訪問的細粒度控制,確保系統的安全和穩定性。
總結
在 ARM SMMU 中,Stream Table 的主要作用是管理和對映不同外設發出的記憶體訪問請求。它透過記錄不同流的上下文描述符和訪問許可權,幫助 SMMU 將虛擬地址轉換為實體地址,並控制訪問許可權。這是實現裝置記憶體訪問虛擬化和安全性的核心機制之一。