stardust-oxide:基于Rust的开源迷你操作系统Unikernel

22-03-10 banq

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
 

1