IOBuffer

名稱

IOBuffer - 具有非對稱存取控管和規範的共用記憶體端點

劇情概要

IOBuffer (IOB) 是對等 Zircon 核心物件,專為高輸送量、低延遲通訊而設計,並用於程序間的共用記憶體傳輸。這項技術結合了對等互連工作階段管理、多區域封裝、非對稱存取控管,以及核心介導的存取權規範。

說明

IOBuffer 一律以一對端點 (端點 0 和端點 1) 運作。這項功能可讓兩個程序透過共用多個獨立記憶體區域 (最多 64 個,由 ZX_IOB_MAX_REGIONS 定義) 進行通訊,每個區域都設定了特定存取權限和行為。

對等互連生命週期和信號

與通道和 Socket 類似,IOBuffer 端點會對等互連。 - 端點會控管支援記憶體區域的生命週期。- 參照追蹤:從端點建立的有效虛擬記憶體對應,會與該端點的開啟控制代碼一起計為參照。- 對等互連關閉:當一個端點的所有參照 (包括開啟的控制代碼和有效的虛擬記憶體對應) 都關閉時,系統會在對向端點上聲明 ZX_IOB_PEER_CLOSED 信號。

區域:私人與共用

IOBuffer 可以封裝多個記憶體區域: - 私人區域 (ZX_IOB_REGION_TYPE_PRIVATE):由 IOBuffer 配對專屬的私人 VmObject 支援。用於獨立的點對點通訊。共用區域 (ZX_IOB_REGION_TYPE_SHARED) (實驗性):指向獨立的 shared_region 物件。多個獨立的 IOBuffer 配對可以參照同一個共用區域,實現多對一模式 (例如,多個用戶端記錄寫入器將資料傳送至單一讀取器)。

非對稱存取控管

您可以為每個區域設定 Endpoint 0 和 Endpoint 1 的不同權限。權限包括: - 直接對應:允許程序將區域對應至虛擬位址空間 (VMAR),以進行直接讀取/寫入存取。 - ZX_IOB_ACCESS_EP0_CAN_MAP_READ / _WRITE - ZX_IOB_ACCESS_EP1_CAN_MAP_READ / _WRITE - 核心仲介存取:限制直接對應,要求所有存取權都必須透過核心系統呼叫 (例如 zx_iob_writev)。這可防範檢查時間到使用時間 (TOCTOU) 攻擊。- ZX_IOB_ACCESS_EP0_CAN_MEDIATED_READ / _WRITE - ZX_IOB_ACCESS_EP1_CAN_MEDIATED_READ / _WRITE

有效權利和處理互動

驗證記憶體作業時,核心會將區域的存取權限 (邏輯 AND) 與端點控制代碼權限相交。區域層級權限無法覆寫控制代碼層級權限。

  • 地圖作業:有效讀取/寫入權限分別為 uRn & hRnuWn & hWn,其中 u 代表對應權限,而 h 代表控點權限。
  • 中介作業:有效讀取/寫入權分別為 kRn & hRnkWn & hWn,其中 k 代表中介權限,h 代表控制代碼權限。

中介方向性與絕對權限

與直接對應不同,核心仲介存取作業是在邏輯/方向感上運作,而非絕對硬體權限。舉例來說,邏輯中介讀取作業 (例如從環狀緩衝區擷取資料) 可能需要核心在幕後寫入同一區域的簿記結構。由於核心會做為可信賴的仲介者強制執行邏輯,因此允許這類內部記帳寫入作業,適用於唯讀仲介端點。

記憶體存取規範

學科會定義區域內核心中介作業的結構化記憶體配置和行為: - 無 (ZX_IOB_DISCIPLINE_TYPE_NONE):任意形式的原始位元組緩衝區。No kernel-mediated operations. - ID 分配器 (ZX_IOB_DISCIPLINE_TYPE_ID_ALLOCATOR) (實驗功能):安全無虞的執行緒結構,可將大小適中的資料 Blob 對應至依序分配的數字 ID。有助於追蹤中的字串實習。 - 中介寫入環形緩衝區 (ZX_IOB_DISCIPLINE_TYPE_MEDIATED_WRITE_RING_BUFFER) (實驗性):環形緩衝區,專為多個用戶端和單一使用者空間讀取器 (例如高效率系統記錄) 的並行、核心中介寫入作業而設計。

透過 VMAR 對應

系統會透過 zx_vmar_map_iob 將 IOBuffer 區域對應至 VMAR。僅支援下列 VMAR 選項: - ZX_VM_SPECIFIC - ZX_VM_SPECIFIC_OVERWRITE - ZX_VM_OFFSET_IS_UPPER_LIMIT - ZX_VM_PERM_READ - ZX_VM_PERM_WRITE - ZX_VM_MAP_RANGE

其他 VMAR 選項一律會傳回 ZX_ERR_INVALID_ARGS

查詢物件屬性和區域

IOBuffer 支援透過 zx_object_get_info 進行標準屬性查詢。

ZX_INFO_IOB

使用 zx_iob_info_t 傳回整體 IOBuffer 執行個體的相關資訊: - options:建立時使用的選項。 - region_count:封裝的記憶體區域數量。

ZX_INFO_IOB_REGIONS

zx_iob_region_info_t 陣列的形式傳回每個區域的相關資訊。- 存取位元交換:傳回時,核心會交換存取修飾符位元,讓端點 0 存取位元反映執行查詢的端點控制代碼權限,端點 1 存取位元則反映對等互連的權限。這樣一來,與端點無關的程式庫就能動態驗證權限。

ZX_INFO_PROCESS_VMOS

核心會在這個主題下回報支援私有 IOB 區域的記憶體物件,例如標準 VMO。根據預設,支援 VMO 會共用父項 IOBuffer 的名稱。

權限

IOBuffer 控制代碼預設具有下列權限: - ZX_RIGHT_TRANSFER - ZX_RIGHT_DUPLICATE - ZX_RIGHT_WAIT - ZX_RIGHT_INSPECT - ZX_RIGHT_READ - ZX_RIGHT_WRITE - ZX_RIGHT_MAP - ZX_RIGHT_SIGNAL - ZX_RIGHT_SIGNAL_PEER - ZX_RIGHT_GET_PROPERTY - ZX_RIGHT_SET_PROPERTY

屬性

IOBuffers 支援下列屬性: - ZX_PROP_NAME:用於診斷及歸因記憶體。

訊號

系統可以為 IOBuffer 端點設定下列信號:

  • ZX_IOB_PEER_CLOSED:對等端點已關閉 (包括所有控制代碼和有效對應)。
  • ZX_IOB_SHARED_REGION_UPDATED (實驗功能):當共用區域因仲介寫入而更新時,系統會引發此事件。

系統呼叫