使用 Fuse 和 java 17 編寫一個簡單的檔案系統

banq發表於2022-01-19

FUSE(使用者空間中的檔案系統)允許您在實現其介面時建立使用者空間檔案系統。FUSE 專案由兩個元件組成:FUSE 核心模組和 libfuse 使用者空間庫。我們的實現將使用 libfuse 的高階 API。它提供了掛載檔案系統、解除安裝檔案系統、從核心讀取請求以及發回響應的功能。
Project Panama 是 Java 語言改進的集合。該專案的目標是豐富和改進 Java 和本地(外部)介面之間的連線,這些介面通常由用 C 編寫的應用程式使用。
Panama 由以下 JEP(JDK 增強提案)組成:
  • Foreign-Memory Access API JEP:JEP-370、JEP-383
  • 外部連結器 API JEP:JEP-389
  • 向量 API JEP:JEP-338

我們將專注於 Foreign Linker API,因為它提供對本機程式碼的純 Java 訪問。使用外部連結器的另一個好處是它應該具有可比的效能或比 JNI 更好。
本文目標是探索 Project Panama 的外部連結器功能並建立我們的簡單檔案系統。我們將使用 Java 17 和 FUSE 來做到這一點。我們將研究如何進行向上呼叫、向下呼叫和使用記憶體地址來建立我們的記憶體檔案系統。
 

安裝
在開始之前,請確保您在 Linux/Mac 系統上安裝了 FUSE(如果您使用的是 Windows,則可以使用 WSL1 或 WSL2 來跟隨或任何 Linux VM)。我使用 libfuse 3.10.5 作為示例。在終端中執行ldconfig -p | grep libfuse 將顯示安裝的 Libfuse 版本。如果未安裝 Libfuse,您將不會得到任何輸出。
我們還需要 Jextract,它是一個從 C 標頭檔案生成 Java 檔案的工具,並且僅在 Panama 早期訪問版本中可用。轉到https://jdk.java.net/panama/併為您的系統下載最新版本並解壓縮。我們只需要這個特定版本的 Java 來生成 Java 檔案。我們要構建的專案可以使用任何 Java 17 GA 版本。

此外,在 ( https://github.com/libfuse/libfuse/releases )下載並解壓縮安裝在系統上的 Libfuse 原始碼版本,我們將使用它作為 Jextract 的輸入。
詳細點選標題
 

相關文章