封鎖裝置

Fuchsia Block 裝置驅動程式與系統中的其他驅動程式相同,可透過 IPC 存取的使用者空間服務實作。使用區塊裝置的程式會對這些基礎驅動程式有一或多個控制代碼。與檔案系統用戶端類似,可在遠端程序呼叫 (RPC) 訊息中對這些要求進行編碼,以便將「讀取」或「寫入」要求傳送至伺服器,程式也可以做為用戶端封鎖裝置的用戶端,也可能將遠端程序呼叫 (RPC) 訊息傳送至「裝置主機」(Zircon 中稱為「devhost」)。開發主機程序接著會將這些要求轉換為驅動程式庫理解的「I/O 交易」,實際上這些要求實際上是傳送至特定區塊裝置驅動程式庫,最後再傳送至實體硬體。

特定區塊裝置驅動程式 (USB、AHCI / SATA、Ramdisk、GPT 等) 會實作 ZX_PROTOCOL_BLOCK_CORE 通訊協定,可讓用戶端將交易排入佇列並查詢區塊裝置。

快速區塊 I/O

封鎖裝置驅動程式通常負責佔用大量記憶體,並將傳送至特定裝置的要求排入佇列來「讀取」或「從」部分記憶體。遺憾的是,由於 RPC 通訊協定會將大小有限的訊息傳送到「I/O 交易」,所以存取區塊裝置通常需要重複複製大型緩衝區。

為了避免這種效能瓶頸,區塊裝置驅動程式會實作另一項傳輸讀取和寫入機制:快速的 FIFO 通訊協定,可在共用 VMO 上採取行動。檔案系統 (或任何其他想要與區塊裝置互動的用戶端) 可以從區塊裝置取得 FIFO、註冊「交易緩衝區」,並將控制代碼傳送至 VMO 至區塊裝置。相較於使用大型緩衝區傳送「讀取」或「寫入」訊息,這個通訊協定的用戶端可以改為在 FIFO 上傳送快速的輕量控制訊息,指示區塊裝置驅動程式庫應直接在已註冊的 VMO 上採取行動。例如,當寫入檔案時,而不是直接透過 IPC 基元傳遞位元組,以及將其複製到區塊裝置記憶體中的新位置,檔案系統 (以 VMO 表示檔案) 可直接傳送小型 FIFO 訊息,指出「從 VMO Y 軸對應檔案,在存取磁碟機位時則直接寫入 N 位元組」,