update readme and add some assets

This commit is contained in:
SKTT1Ryze 2021-05-31 18:18:23 +08:00
parent 15ebf2c86a
commit 9914a6ce10
2 changed files with 34 additions and 5 deletions

View File

@ -2,16 +2,44 @@
异步内核就像风一样快! 异步内核就像风一样快!
## 基于共享调度器的异步内核设计 ## 基于共享调度器的异步内核设计
操作系统内核经历了几个主要的发展阶段,从裸机应用,批处理系统到多道任务系统,演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务;为了进一步提升性能,一些现代编程语言在应用层复用线程资源,提出了“协程”的概念,节省任务调度的开销。 操作系统内核经历了几个主要的发展阶段,从裸机应用,批处理系统到多道任务系统,演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务;为了进一步提升性能,一些现代编程语言在应用层复用线程资源,提出了“协程”的概念,节省任务调度的开销。
在本项目中我们提出一种新的内核开发思:由不同资源共享调度器,在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时,拥有着专有内核的高性能特点,“像风一样快”,因此取名**飓风内核**——**tornado-os**。 在本项目中我们提出一种新的内核开发思:由不同资源共享调度器,在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时,拥有着专有内核的高性能特点,“像风一样快”,因此取名**飓风内核**——**tornado-os**。
设计文档请参考[这里](https://qf.rs/2021/04/23/%E5%BC%82%E6%AD%A5%E5%86%85%E6%A0%B8%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0.html) 设计文档请参考[这里](https://qf.rs/2021/04/23/%E5%BC%82%E6%AD%A5%E5%86%85%E6%A0%B8%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0.html)
同时这里有开发成员制作的[PPT](doc/shared_scheduler_based_async_kernel_design.pdf) 同时这里有开发成员制作的[PPT](doc/shared_scheduler_based_async_kernel_design.pdf)
## 运行异步任务
飓风内核中和传统内核最大的不同点就在于多任务的运行方式,在飓风内核中基于共享调度器来运行异步任务,伪代码呈现如下:
```Rust
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();
}
```
用户态运行异步任务的方法和内核态基本一致。
## 系统架构
<img src="assets/system.png" width = "600" height = "500" alt="系统架构" align=center />
## 如何运行 ## 如何运行
构建工具: 构建工具:
+ Rust 环境(nightly-2021-03-01或以上) + Rust 环境(nightly-2021-03-01或以上)
+ [Just 工具](https://github.com/casey/just) + [Just 工具](https://github.com/casey/just)
+ [cargo-binutils](https://github.com/rust-embedded/cargo-binutils) + [cargo-binutils](https://github.com/rust-embedded/cargo-binutils)
+ [qemu-system-riscv64](https://github.com/qemu/qemu) + [qemu-system-riscv64](https://github.com/qemu/qemu)(推荐 5.2.0 版本)
另外反汇编需要 `riscv64-linux-gnu-objdump`,该工具在 Ubuntu 操作系统上可以通过 `apt-get` 下载。 另外反汇编需要 `riscv64-linux-gnu-objdump`,该工具在 Ubuntu 操作系统上可以通过 `apt-get` 下载。
调试工具RISC-V 指令集支持的 [gdb](https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/?C=M&O=D) 调试工具RISC-V 指令集支持的 [gdb](https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/?C=M&O=D)
@ -40,7 +68,8 @@ just qemu user_task
+ tornado-kernel: 飓风内核实现 + tornado-kernel: 飓风内核实现
+ tornado-user: 用户态代码实现 + tornado-user: 用户态代码实现
其中飓风内核中与共享调度器通过 API 兼容方式进行交互,具体参考[代码](tornado-kernel/src/task/shared.rs),用户态代码同上,具体请参考[代码](tornado-user/src/task/shared.rs)。 其中共享调度器以二进制包的形式编译,集成一些接口提供给内核和用户,具体实现参考[代码](shared-scheduler/src/main.rs)。
飓风内核中与共享调度器通过 API 兼容方式进行交互,具体参考[代码](tornado-kernel/src/task/shared.rs),用户态代码同上,具体请参考[代码](tornado-user/src/task/shared.rs)。
内核态和用户态都分别实现了一个`执行器`,分别是[内核态执行器](tornado-kernel/src/task/executor.rs)和[用户态执行器](tornado-user/src/task/shared.rs)。 内核态和用户态都分别实现了一个`执行器`,分别是[内核态执行器](tornado-kernel/src/task/executor.rs)和[用户态执行器](tornado-user/src/task/shared.rs)。
内核中任务的定义在[这里](tornado-kernel/src/task/kernel_task.rs),用户态中任务的定义在[这里](tornado-user/src/task/user_task.rs),不同的地址空间可以定义自己的任务语义,其他地址空间无法解析。 内核中任务的定义在[这里](tornado-kernel/src/task/kernel_task.rs),用户态中任务的定义在[这里](tornado-user/src/task/user_task.rs),不同的地址空间可以定义自己的任务语义,其他地址空间无法解析。
@ -51,7 +80,7 @@ just qemu user_task
- [执行器与生成语义](https://qf.rs/2021/05/01/%E6%89%A7%E8%A1%8C%E5%99%A8%E4%B8%8E%E7%94%9F%E6%88%90%E8%AF%AD%E4%B9%89.html) - [执行器与生成语义](https://qf.rs/2021/05/01/%E6%89%A7%E8%A1%8C%E5%99%A8%E4%B8%8E%E7%94%9F%E6%88%90%E8%AF%AD%E4%B9%89.html)
- [异步virtio之块设备驱动实现](https://qf.rs/2021/05/26/%E5%BC%82%E6%AD%A5%E7%89%88virtio%E5%9D%97%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E5%AE%9E%E7%8E%B0.html) - [异步virtio之块设备驱动实现](https://qf.rs/2021/05/26/%E5%BC%82%E6%AD%A5%E7%89%88virtio%E5%9D%97%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E5%AE%9E%E7%8E%B0.html)
+ [doc](doc)目录 + [doc](doc)目录
+ 代码注释 + 代码注释,项目代码中有着充分的文档注释,包括一些实现思路
## 衍生项目 ## 衍生项目
项目开发过程中,我们经常会有一些想法和思路,在完整的项目中不是很好实现,因此衍生出一些其他的项目: 项目开发过程中,我们经常会有一些想法和思路,在完整的项目中不是很好实现,因此衍生出一些其他的项目:

BIN
assets/system.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB