theme: gaia _class: lead paginate: true backgroundColor: #fff _backgroundImage: url('https://marp.app/assets/hero-background.svg') marp: true style: | section { font-size: 2.1em; } .columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; } .right-label { right: 230px; position: absolute; display: inline-block; }

大实验可选项目


ArceOS: 组件化操作系统的初步探索

贾越凯 陈渝

清华大学 计算机系

2023/3/15


背景

  • 为什么要做组件化的 OS?
    • 可形成不同特征/形态/架构的操作系统内核
      • 易于定制
        • 性能
        • 安全
      • 易于开发
      • 易于复用

ArceOS 简介

  • https://github.com/rcore-os/arceos
  • Ar-Qs, Ar-key-O-S
  • 内核组件 + 组件化的OS框架 = 不同形态的OS kernel
    • 提供了一套组件化的操作系统框架
    • 提供各种内核组件的实现
      • 各种内核组件可在没有OS kernel的情况下独立运行
        • 如filesystem, network stack等内核组件可以在裸机或用户态以库的形式运行
        • 各种设备驱动等内核组件可以在裸机上运行

ArceOS 简介

  • https://github.com/rcore-os/arceos
  • Ar-Qs, Ar-key-O-S
  • 支持形成unikernel
    • 只运行一个用户程序
    • 用户程序与内核链接为同一镜像
    • 不区分地址空间与特权级
    • 安全性由底层 hypervisor 保证

ArceOS 简介

  • https://github.com/rcore-os/arceos
  • Ar-Qs, Ar-key-O-S
  • 支持形成normal kernel
    • 在用户态运行多个用户程序
    • 用户程序与内核分开
    • 区分地址空间与特权级
    • 安全性由kernel保证

ArceOS 简介

  • https://github.com/rcore-os/arceos
  • Ar-Qs, Ar-key-O-S
  • 支持形成micro kernel
    • 在用户态运行多个用户程序和OS服务
    • 用户程序和OS服务与内核分开
    • 区分地址空间与特权级
    • 安全性由内核保证

ArceOS 简介

  • https://github.com/rcore-os/arceos
  • Ar-Qs, Ar-key-O-S
  • 支持形成hypervisor
    • 在hyervisor态运行hyerpvisor
    • 用户程序和OS内核运行在VM中,与hyerpvisor分开
    • 安全性由hypervisor保证

ArceOS 整体架构


ArceOS 模块

crates

  • 与 OS 的设计无关的公共模块
    • linked_list
    • page_table
    • allocator
    • scheduler
    • drivers
    • ...

modules

  • 与 OS 的设计紧耦合的模块
    • axtask
    • axnet
  • 对 crates 的选取与包装:
    • axalloc:
    • axdriver

应用程序模块依赖

  • 必选模块
    • axruntime:启动、初始化、模块总体管控
    • axhal:硬件抽象层
    • axlog:打印日志
  • 可选模块
    • axalloc:动态内存分配
    • axtask:多任务 (线程)
    • axdriver:设备驱动 (如网络、磁盘)
    • axnet:网络

应用程序配置变更

  • 示例:调度算法变更

    # apps/multitask/Cago.toml
    [dependencies]
    libax = {
        path = "../../ulib/libax",
        default-features = false,
        features = ["paging", "multitask", "sched_fifo"]
    }
    
  • 其他可能的配置变更:

    • 内存分配器
    • 网络协议栈
    • ...

ArceOS 应用程序清单

应用启用的功能额外依赖的模块镜像大小
helloworld28K
memtestalloc, pagingaxalloc44K
multitaskpaging, multitask, sched_fifoaxalloc, axtask40K
httpclientpaging, netaxalloc, axdriver, axnet88K
echoserverpaging, net, multitaskaxalloc, axdriver, axnet, axtask96K

单元测试

  • 可以只运行要测试的模块,无需运行完整的 OS
  • 在本机用户态执行,方便调试
  • 示例:axtask 单元测试


ArceOS 相关大实验选题

  • crates 层:
    • 算法:调度、内存分配、...
      ★★☆☆☆
    • 驱动:物理网卡、SD 卡、virtio GPU, ...
      ★★★☆☆
    • 文件系统:FAT、ext4、...
      ★★★☆☆
    • 网络:支持 lwip 协议栈
      ★★★★☆
    • virtio:virtio-fs、virtio-console、...
      ★★★★☆
  • modules 层:
    • 移植:x86_64、树莓派、...
      ★★☆☆☆
    • 异步 I/O:Rust async
      ★★★☆☆

ArceOS 相关大实验选题

  • ulib 层:
    • 兼容 Linux 系统调用接口
      ★★★☆☆
    • 支持已有复杂应用:NGINX、Redis、...
      ★★★★☆
    • 支持 Rust std
      ★★★★☆
  • 框架完善:
    • 增加更多单元测试、文档
      ★★☆☆☆
    • 支持多核、增加同步互斥功能
      ★★★☆☆
    • 支持内核中断、支持内核抢占
      ★★★★☆
    • 支持unikernel/MicroKernel/MonolithicKernel架构的OS
      ★★★★☆
  • 其他:
    • 支持游戏应用、webassembly...
      ★★★☆☆

相关参考


Thanks!