stardust-oxide:基於Rust的開源迷你作業系統Unikernel

banq發表於2022-03-10

Stardust Oxide 是一個用 Rust 語言編寫的單核心、單地址空間 Xen 半虛擬化作業系統Unikernel。
它支援動態記憶體分配、協作多工處理的非同步/等待語法、虛擬化網路和高效能控制檯驅動程式。
Xen 功能有型別和記憶體安全的介面,例如共享記憶體授權表、XenStore 和 XenBus。
它在不到 3 毫秒的時間內啟動,壓縮映象大小為 61KB(未壓縮 152KB),包括網路堆疊。
該專案的結構是一個包含與 C Xen API 的不安全 Rust 繫結的庫,一個具有與不安全繫結的安全 Rust 介面的庫,然後是 Stardust Oxide 庫。這允許其他作業系統開發根據需要重新使用各個包。
 
特點:
  • 支援日誌的控制檯驅動程式
  • 頁框對映和表生成(使用buddy_system_allocator作為全域性分配器)
  • 授予表建立/銷燬
  • XenStore 介面
  • XenBus 介面
  • 簡單的非同步執行器
  • 將smoltcp用於 TCP/IP 堆疊的網路驅動程式


Unikernel是精簡專屬的庫作業系統(LibraryOS),它能夠使用高階語言編譯並直接執行在商用雲平臺虛擬機器管理程式之上。相比於容器技術它們有很多的優點,不僅僅是超快的啟動時間和更小的攻擊面。
 
此專案並非真正為任何生產而設計,但對作業系統研究很有用,迷你作業系統程式碼庫不是最整潔的,但它是編寫 unikernel 時為數不多的參考資料之一,因此希望 Rust 中的替代方案會有所幫助。
作者的最大的遺憾/收穫是:不相信 2006 年的教科書,當時它說半虛擬化優於硬體虛擬化;這是在硬體加速虛擬化(例如英特爾 VT-d)存在之前,現在半虛擬化比編寫裸機作業系統要慢得多且可移植性較差。
 
在現代環境中,半虛擬化通常是指管理程式使用有效的虛擬化感知介面而不是主機與主機通訊(例如,用於虛擬磁碟訪問),例如,模擬物理 SATA 硬碟。
因此,半虛擬化與 VT-d 等硬體加速虛擬化一起使用。
在這種情況下,半虛擬化確實可以顯著提高速度。 
  
rust 中的另一個 unikernel 是RustyHermit
 

相關文章