Skip to content

ChenRuiwei/Phoenix

Folders and files

NameName
Last commit message
Last commit date
Jul 27, 2024
Jul 21, 2024
Aug 12, 2024
Aug 18, 2024
Jul 28, 2024
Aug 20, 2024
Aug 19, 2024
Aug 22, 2024
Aug 22, 2024
Aug 19, 2024
Aug 19, 2024
Aug 19, 2024
Aug 19, 2024
Apr 8, 2024
Aug 30, 2024
Feb 15, 2024
Aug 19, 2024
Jul 31, 2024
May 31, 2024
Jul 31, 2024
Aug 12, 2024
Aug 30, 2024
Mar 24, 2024

Repository files navigation

哈工大深圳

Phoenix

项目描述

Phoenix 是使用 Rust 编写、基于 RISCV-64 硬件平台、支持多核、采用异步无栈协程架构的模块化宏内核操作系统。

完成情况

决赛第一阶段

于 2024-07-31 结束决赛第一阶段时,截止到 23 点半,通过了除 ltp 部分测试外的所有测试点,所属 VisionFive 2 赛道排名为第 2,排行榜如下图所示:

决赛第一阶段排行榜

初赛

VisionFive 2 赛道,初赛功能测试满分:

初赛排行榜

Phoenix 内核介绍

  • 无栈协程:基于全局队列实现的调度器,完善的辅助 Future 支持,支持内核态抢占式调度。
  • 进程管理:统一的进程线程抽象,可以细粒度划分进程共享的资源,支持多核运行。
  • 内存管理:实现基本的内存管理功能。使用懒分配和 Copy-on-Write 优化策略。
  • 文件系统:基于 Linux 设计的虚拟文件系统。实现页缓存加速文件读写,实现 Dentry 缓存加速路径查找,统一了页缓存与块缓存。使用开源 rust-fatfs库提供对 FAT32 文件系统的支持,使用lwext4-rust库提供对 Ext4 文件系统的支持。
  • 信号机制:支持用户自定义信号处理例程,有完善的信号系统,与内核其他异步设施无缝衔接。
  • 设备驱动:实现设备树解析,实现 PLIC,支持异步外设中断,实现异步串口驱动。
  • 网络模块:支持 Udp 和 Tcp 套接字,Ipv4 与 Ipv6 协议,实现异步轮询唤醒机制。

Phoenix内核架构

文档

项目结构

.
├── arch                    # 平台相关的包装函数与启动函数
├── config                  # 配置常量
├── crates                  # 自己编写的功能单一的库
│   ├── backtrace           # 堆栈回溯
│   ├── macro-utils         # 宏工具
│   ├── range-map           # 范围映射
│   ├── recycle-allocator   # ID回收分配器
│   ├── ring-buffer         # 环形队列缓冲区
│   └── sbi-print           # SBI打印工具
├── docs                    # 文档
├── driver                  # 驱动模块
├── kernel                  # 内核
│   ├── src
│   │   ├── ipc             # 进程间通信机制
│   │   ├── mm              # 内存管理
│   │   ├── net             # 网络
│   │   ├── processor       # 多核心管理
│   │   ├── syscall         # 系统调用
│   │   ├── task            # 进程管理
│   │   ├── trap            # 异常处理
│   │   ├── utils           # 工具
│   │   ├── boot.rs         # 内核启动通用函数
│   │   ├── impls.rs        # 模块接口实现
│   │   ├── main.rs         # 主函数
│   │   ├── panic.rs
│   │   └── trampoline.asm  # 信号跳板
│   ├── build.rs
│   ├── Cargo.toml
│   ├── linker.ld           # 链接脚本
│   └── Makefile
├── modules                 # 内核各个模块
│   ├── device-core         # 设备API
│   ├── executor            # 异步调度器
│   ├── ext4                # Ext4文件系统支持
│   ├── fat32               # FAT32文件系统支持
│   ├── logging             # 日志系统
│   ├── memory              # 基础内存模块
│   ├── net                 # 基础信号模块
│   ├── page                # 页缓存与块缓存
│   ├── signal              # 基础信号模块
│   ├── sync                # 同步原语
│   ├── systype             # 系统调用类型
│   ├── time                # 时间模块
│   ├── timer               # 定时器模块
│   ├── vfs                 # 虚拟文件系统模块
│   └── vfs-core            # 虚拟文件系统接口
├── testcase                # 测试用例
├── third-party             # 第三方库
│   └── vendor              # Rust库缓存
├── user                    # 用户程序
├── Cargo.lock
├── Cargo.toml
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── rustfmt.toml
└── rust-toolchain.toml

运行

  1. 在项目根目录下,进入 root 用户,构建docker容器
make build_docker
  1. 运行容器,进入容器终端
make docker
  1. 下载依赖库并缓存在 third-party/vendor 文件夹下
make env
  1. 编译内核,烧录文件镜像,并在Qemu中运行内核
make all

项目人员

哈尔滨工业大学(深圳):

参考

  • Titanix 启动流程、内存模块部分设计
  • MankorOS RangeMap、UserPtr、设备树解析、部分驱动
  • FTL OS
  • ArceOS 网络模块部分设计
  • Alien 虚拟文件系统部分设计

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages