Go to file
SKTT1Ryze 8ae2d0c4c3 cargo fmt for async-fat32 2021-07-16 12:48:06 +08:00
.cargo small fix 2021-07-09 11:21:32 +08:00
SBI update rustsbi 2021-07-11 16:27:28 +08:00
assets add some docs 2021-05-31 20:38:54 +08:00
async-fat32 cargo fmt for async-fat32 2021-07-16 12:48:06 +08:00
doc add some docs 2021-05-31 20:38:54 +08:00
shared-scheduler merge from main and fix some bug 2021-07-16 12:46:36 +08:00
tornado-kernel merge from main and fix some bug 2021-07-16 12:46:36 +08:00
tornado-user cargo fmt 2021-07-10 17:29:36 +08:00
xtask merge from main and fix some bug 2021-07-16 12:46:36 +08:00
.gitignore Checkpoint: minimum working operating system 2021-01-18 22:28:13 +08:00
Cargo.lock `maybe_uninit_ref` is stablized after Rust 1.55.0 2021-07-11 20:19:42 +08:00
Cargo.toml fix small 2021-07-13 22:20:34 +08:00
LICENSE Create LICENSE 2021-04-16 23:37:12 +08:00
README.md update readme and add some assets 2021-05-31 18:18:23 +08:00
justfile solve merge conflict 2021-07-11 11:16:30 +08:00

README.md

飓风内核(开发中)

异步内核就像风一样快!

基于共享调度器的异步内核设计

操作系统内核经历了几个主要的发展阶段,从裸机应用,批处理系统到多道任务系统,演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务;为了进一步提升性能,一些现代编程语言在应用层复用线程资源,提出了“协程”的概念,节省任务调度的开销。
在本项目中我们提出一种新的内核开发思路:由不同资源共享调度器,在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时,拥有着专有内核的高性能特点,“像风一样快”,因此取名飓风内核——tornado-os
设计文档请参考这里
同时这里有开发成员制作的PPT

运行异步任务

飓风内核中和传统内核最大的不同点就在于多任务的运行方式,在飓风内核中基于共享调度器来运行异步任务,伪代码呈现如下:

pub extern "C" fn kernel_main() {
    // 内核的一些初始化过程
    kernel::init();
    // 共享调度器的基地址
    let base = 0x8600_0000;
    // 获取共享调度器
    let shared_scheduler = unsafe { task::SharedScheduler::load(base) };
    // 创建一个 Future
    let future = MyFuture::new();
    // 用 future 创建一个任务
    let task = task::KernelTask::new(future);
    // 往共享调度器里面添加任务
    shared_scheduler.add_task(task);
    // 内核异步运行时中的执行器执行任务
    runtime::executor::run_until_idle();
}

用户态运行异步任务的方法和内核态基本一致。

系统架构

系统架构

如何运行

构建工具:

另外反汇编需要 riscv64-linux-gnu-objdump,该工具在 Ubuntu 操作系统上可以通过 apt-get 下载。
调试工具RISC-V 指令集支持的 gdb

下载源码:

git clone https://github.com/HUST-OS/tornado-os

快速运行:

cd tornado-os
just qemu user_task

进度

  • 内核开发基础设施(内存管理,页表机制,中断处理等)已经基本完成
  • 共享调度器的设计与实现已经完成,将来或许会有些改动,但总体实现思路已经比较成熟
  • 内核态和用户态的异步运行时的实现初步完成,由于 Rust 语言异步运行时的灵活性,将来可能有较为频繁的改动
  • 异步版的 virtio 块设备驱动已经基本完成,下一步可以继续写文件系统了(参考代码:如何在飓风内核中运行virtio块设备读写任务)
  • 内核生成器语法有了可以运行的代码,下一步可以考虑用在飓风内核的开发上

源码阅读小助手

该项目主要由三个目录组成:

  • shared-scheduler: 共享调度器实现
  • tornado-kernel: 飓风内核实现
  • tornado-user: 用户态代码实现

其中共享调度器以二进制包的形式编译,集成一些接口提供给内核和用户,具体实现参考代码
飓风内核中与共享调度器通过 API 兼容方式进行交互,具体参考代码,用户态代码同上,具体请参考代码
内核态和用户态都分别实现了一个执行器,分别是内核态执行器用户态执行器
内核中任务的定义在这里,用户态中任务的定义在这里,不同的地址空间可以定义自己的任务语义,其他地址空间无法解析。

开发文档

衍生项目

项目开发过程中,我们经常会有一些想法和思路,在完整的项目中不是很好实现,因此衍生出一些其他的项目:

其中,洛佳的异步内核实验室中实现了一个内核中的生成器语法,非常有研究价值,欢迎访问博客执行器与生成语义
另外,我们还初步实现了一款基于 Rust 语言异步语法的 virtio 块设备驱动库,并可以结合本项目以异步的方式运行块设备读写任务,详细内容请访问博客异步版VIRTIO之块设备驱动实现

TODO

  • 从内核层面提供异步文件 IO(异步文件系统)
  • 从内核层面提供异步网络 IO(异步网络协议栈)
  • 性能测试分析
  • 活用内核生成器语法