Asterinas 是一个新兴的操作系统内核项目,它结合了现代编程语言 Rust 的内存安全特性与创新的架构设计,旨在提供一个兼容 Linux 应用二进制接口(ABI)的高性能、高安全性操作系统内核。以下是关于 Asterinas 的详细介绍:
1. 项目背景与目标
Asterinas 由中国南方科技大学(SUSTech)的研究团队发起,是一个完全使用 Rust 编写的操作系统内核项目。其核心目标是实现与 Linux 的 ABI 兼容,这意味着为 Linux 编译的应用程序可以在 Asterinas 上运行。同时,Asterinas 专注于云环境和容器场景,并探索形式化验证,以确保系统的安全性与可靠性。
2. Framekernel 架构:创新的内核设计
Asterinas 最引人注目的创新是其提出的 Framekernel 架构。这一架构结合了单体内核和微内核的优点,旨在平衡性能与安全性。
2.1 单体内核 vs 微内核
- 单体内核(如 Linux):所有代码运行在同一特权地址空间,性能高但安全性挑战大。
- 微内核(如 seL4):最小的可信计算基(TCB),安全性高但 IPC 开销大,影响性能。
2.2 Framekernel 的核心思想
- 内存安全:利用 Rust 的内存安全特性,将所有必须使用
unsafe Rust 代码的部分封装在一个核心库中,形成一个受限的 TCB。
- 服务开发:内核的其余部分(提供各种操作系统服务)使用安全的 Rust 抽象开发,这些服务仍然运行在内核地址空间内,避免了微内核的 IPC 开销。
- 安全性提升:通过这种方式,Asterinas 在保持单体内核性能优势的同时,显著提高了系统的内存安全性,并缩小了需要严格审查甚至形式化验证的代码范围。
3. 技术特点与创新
3.1 Rust 语言的优势
- 内存安全:Rust 的所有权和借用机制可以有效防止空指针、数据竞争等内存安全问题。
- 形式化验证:Asterinas 项目正与安全审计公司 CertiK 合作,使用 Verus 工具对内核进行形式化验证。这与 seL4 等现有形式化验证内核不同,后者通常设计得非常小巧和有限,而 Asterinas 希望在提供 Linux ABI 兼容性这一更广泛功能集的同时实现形式化验证。
3.2 OSTD 和 OSDK 工具
- OSTD:一个 Rust OS 框架,旨在降低操作系统开发的门槛,提供内存安全的底层抽象,促进代码复用,并支持在用户模式下进行部分测试。
- OSDK:一个 Cargo 插件,用于简化内核的构建、运行和测试流程。目前,Asterinas 支持 x86 和 RISC-V 架构,并已实现了 Linux 总计 368 个系统调用中的 206 个。
4. 当前进展与未来规划
4.1 当前进展
- 架构支持:Asterinas 目前支持 x86 和 RISC-V 架构,并已实现了 Linux 总计 368 个系统调用中的 206 个。
- 功能支持:支持多种文件系统(如 Ext2, exFAT32, OverlayFS, RamFS, ProcFS, SysFS)、socket 类型(如 TCP, UDP, Unix, Netlink),以及各种外设(如 Virtio Block, Virtio Network, Virtio Vsock, USB controller, USB HID)。
- 性能表现:在业界公认的 LMbench 基准测试上,Asterinas 对齐全球主流开源操作系统 Linux 的性能水平。
4.2 未来规划
- 硬件支持扩展:近期的主要目标是扩展硬件支持,并专注于在云环境下的实际可用性,特别是作为虚拟机的主机操作系统和容器宿主操作系统。
- 合作方向:与阿里云(Alibaba Cloud)等中国云服务商的合作是其重点方向。
- 桌面环境支持:项目也在探索支持 X11 和 Xfce 等桌面环境的可能性。
5. 项目意义与影响
Asterinas 是一个在操作系统设计原则上进行的大胆创新尝试,它充分利用了 Rust 语言在安全性和健全性方面的优势。通过 Framekernel 架构,Asterinas 在保持单体内核性能