small fix
异步内核就像风一样快!
操作系统内核经历了几个主要的发展阶段,从裸机应用,批处理系统到多道任务系统,演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务;为了进一步提升性能,一些现代编程语言在应用层复用线程资源,提出了“协程”的概念,节省任务调度的开销。在本项目中我们提出一种新的内核开发思路:由不同资源共享调度器,在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时,拥有着专有内核的高性能特点,“像风一样快”,因此取名飓风内核——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
riscv64-linux-gnu-objdump
apt-get
下载源码:
git clone https://github.com/HUST-OS/tornado-os
快速运行:
cd tornado-os just qemu user_task
该项目主要由三个目录组成:
其中共享调度器以二进制包的形式编译,集成一些接口提供给内核和用户,具体实现参考代码。飓风内核中与共享调度器通过 API 兼容方式进行交互,具体参考代码,用户态代码同上,具体请参考代码。内核态和用户态都分别实现了一个执行器,分别是内核态执行器和用户态执行器。内核中任务的定义在这里,用户态中任务的定义在这里,不同的地址空间可以定义自己的任务语义,其他地址空间无法解析。
执行器
项目开发过程中,我们经常会有一些想法和思路,在完整的项目中不是很好实现,因此衍生出一些其他的项目:
其中,洛佳的异步内核实验室中实现了一个内核中的生成器语法,非常有研究价值,欢迎访问博客执行器与生成语义另外,我们还初步实现了一款基于 Rust 语言异步语法的 virtio 块设备驱动库,并可以结合本项目以异步的方式运行块设备读写任务,详细内容请访问博客异步版VIRTIO之块设备驱动实现
洛佳的异步内核实验室
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
飓风内核(开发中)
异步内核就像风一样快!
基于共享调度器的异步内核设计
操作系统内核经历了几个主要的发展阶段,从裸机应用,批处理系统到多道任务系统,演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务;为了进一步提升性能,一些现代编程语言在应用层复用线程资源,提出了“协程”的概念,节省任务调度的开销。
在本项目中我们提出一种新的内核开发思路:由不同资源共享调度器,在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时,拥有着专有内核的高性能特点,“像风一样快”,因此取名飓风内核——tornado-os。
设计文档请参考这里
同时这里有开发成员制作的PPT
运行异步任务
飓风内核中和传统内核最大的不同点就在于多任务的运行方式,在飓风内核中基于共享调度器来运行异步任务,伪代码呈现如下:
用户态运行异步任务的方法和内核态基本一致。
系统架构
如何运行
构建工具:
另外反汇编需要
riscv64-linux-gnu-objdump
,该工具在 Ubuntu 操作系统上可以通过apt-get
下载。调试工具:RISC-V 指令集支持的 gdb
下载源码:
快速运行:
进度
源码阅读小助手
该项目主要由三个目录组成:
其中共享调度器以二进制包的形式编译,集成一些接口提供给内核和用户,具体实现参考代码。
飓风内核中与共享调度器通过 API 兼容方式进行交互,具体参考代码,用户态代码同上,具体请参考代码。
内核态和用户态都分别实现了一个
执行器
,分别是内核态执行器和用户态执行器。内核中任务的定义在这里,用户态中任务的定义在这里,不同的地址空间可以定义自己的任务语义,其他地址空间无法解析。
开发文档
衍生项目
项目开发过程中,我们经常会有一些想法和思路,在完整的项目中不是很好实现,因此衍生出一些其他的项目:
其中,
洛佳的异步内核实验室
中实现了一个内核中的生成器语法,非常有研究价值,欢迎访问博客执行器与生成语义另外,我们还初步实现了一款基于 Rust 语言异步语法的 virtio 块设备驱动库,并可以结合本项目以异步的方式运行块设备读写任务,详细内容请访问博客异步版VIRTIO之块设备驱动实现
TODO