架构设计

本章节简要介绍组件化系统 ArceOS 中不同模块的功能与接口文档。

ArceOS

基座内核 ArceOS 以组件化内核的思想进行设计,设计架构图如下:

每一个模块的简要介绍如下:

  • crates layer: 内核无关组件,如 page_table, slab_allocator, spinlock 等,可以方便地给其他内核进行复用

  • modules layer: 内核相关的组件。他们与内核的核心功能相关,不容易解耦出来给其他内核使用,但是对内核本身的功能以及重构有重要作用。

    • axalloc: 用于内核内存分配的模块
    • axfs: 文件系统管理模块, 接入了 fat32
    • axhal: 硬件抽象层模块
    • axnet: 网络管理模块,接入了 smoltcp 网络协议栈
    • axdriver: 驱动管理模块
    • axtask: 任务管理模块,包括任务单元的定义和调度功能的实现
    • axsync: 同步原语模块,包括一些 mutex 等同步原语等实现
    • axmm: 地址空间管理模块,包括内存映射等功能的实现
  • axfeat: feature 描述层,用于进行 feature 的定制和转发,从而实现组件定制化的功能

    • feature 是 rust 条件编译的重要环节,详见文档
  • api layer: ArceOS 对外提供的接口层

    • arceos_posix_api: POSIX 接口兼容实现层,在初始时是调用了 Unikernel 的接口,在 Starry 中会为其加入更多宏内核的支持
    • arceos_api: Unikernel 自身提供的接口层,用于其他应用程序调用内核的功能
  • ulib layer: 用户库层,将 api layer 的接口进一步封装为更加兼容、常见的接口

    • axstd: rust std 的 Unikernel 实现,它调用的是 arceos 的功能,但是提供了更加常见的 std 接口
    • axlibc: libc 的 Unikernel 实现,它调用的是 arceos 的功能,但是提供了更加常见的 libc 接口
  • user layer: 用户层,包括用户程序和用户程序的测试用例

    • rust app: rust 语言编写的用户程序,调用 axstd 从而调用 Unikernel 内核的功能
    • c app: c 语言编写的用户程序,与 axlibc 链接从而调用 Unikernel 内核的功能

关于 ArceOS 的接口更加详细的说明文档位于:arceos

其他相关材料包括:

  • Unikernel 架构说明: https://dl.acm.org/doi/10.1145/2490301.2451167
  • ArceOS 指导书 https://rcore-os.cn/arceos-tutorial-book/index.html
  • ArceOS 教学视频:https://opencamp.cn/os2edu/camp/2024fall/stage/3

Starry

Starry 的目录结构 TODO