RuxOS 概述

RuxOS,中文称:如意一体操作系统,是矽望社区研发并长期维护的一款 Unikernel 操作系统。

特性(基于 v0.0.1)

多架构支持

RuxOS 目前完成了在 X86_64、AArch64、Risc-V64 三种架构的 QEMU 环境中启动和运行应用,其中对 AArch64、X86_64 两种架构做了大量工作。

同时对树莓派4B裸机环境也进行了适配,能够在树莓派4B中运行 RuxOS,适配了SD卡驱动,能够进行数据持久化。

多核多线程支持

RuxOS 支持多核环境运行,支持多线程应用。RuxOS 采用先初始化主核,再由主核启动从核的策略,支持多核环境运行。同时,借助较为成熟的调度器,完成了多线程的支持,和多核调度的支持。

多种调度策略

RuxOS 支持三种调度策略:

  • 先入先出调度(First In First Out),任务依次执行,直到运行结束或主动让出。

  • 时间片轮转调度(Round Robin),任务基于分配的时间片运行,基于时钟中断进行切换。

  • 完全公平调度(Complete Fair Schedueling),基于CFS算法,尽可能保证任务获取相等的CPU时间。

VirtIO 驱动

RuxOS 支持多类 VirtIO 设备,实现了对应的前端接口。包括网络设备(virtio-net)、块设备(virtio-blk)、gpu设备(virtio-gpu)、9p设备(virtio-9p)。

基于 smoltcp 的网络协议栈

RuxOS 基于 Rust 第三方库 smoltcp 实现了 TCP/UDP 网络协议栈,适配 Ipv4 地址。

多类文件系统

RuxOS 适配了多类文件系统:

  • fatfs。基于 Rust 第三方库 rust-fatfs 进行了封装,支持文件系统相关接口,并借助 VirtIO 块设备完成数据的持久化。

  • ramfs。内存文件系统,数据保留在内存中,借助 ramfs 生成了匹配 Linux 的 procfs、etcfs 等。

  • 9pfs。基于 VirtIO-9p 支持了 9pfs,使得 RuxOS 在 QEMU 环境中能够与 host 共享目录。

  • devfs。初步实现了部分设备文件(random、null、zero)。

动态加载应用程序

RuxOS 支持动态加载应用的 ELF 文件,以及相关的动态链接库。

应用及编程语言支持

RuxOS 目前对如下应用完成了适配和验证:

  • Redis。在 RuxOS 上运行 Redis Server,并通过标准 redis-cli 和 redis-benchmark 进行测试和验证。

  • Nginx。在 RuxOS 上运行 Nginx 作为网络服务器,运行指定网页。

  • Wamr。在 RuxOS 上运行 wasm 字节码解释器 WAMR,并借助 wasi-nn 神经网络后端运行简单的 tensorflow 测试。

  • Iperf。在 RuxOS 上运行标准 Iperf 测试。

  • Sqlite。在 RuxOS 上运行数据库应用 Sqlite。

  • C/C++。基于 musl libc 完成对 C/C++ 程序的适配。

工具

为了方便应用部署,矽望社区团队开发了 RuxGo 工具,用于简化应用运行的配置、命令参数等。