{"id":13672190,"url":"https://github.com/HUST-OS/tornado-os","last_synced_at":"2025-04-27T21:32:21.554Z","repository":{"id":47698447,"uuid":"331945470","full_name":"HUST-OS/tornado-os","owner":"HUST-OS","description":"异步内核就像风一样快！","archived":true,"fork":false,"pushed_at":"2021-08-18T02:22:42.000Z","size":6700,"stargazers_count":283,"open_issues_count":0,"forks_count":20,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-11-11T10:42:16.348Z","etag":null,"topics":["asynchronous-kernel","riscv","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HUST-OS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-Apache","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-22T12:52:45.000Z","updated_at":"2024-11-07T12:27:39.000Z","dependencies_parsed_at":"2022-08-12T13:50:22.222Z","dependency_job_id":null,"html_url":"https://github.com/HUST-OS/tornado-os","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HUST-OS%2Ftornado-os","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HUST-OS%2Ftornado-os/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HUST-OS%2Ftornado-os/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HUST-OS%2Ftornado-os/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HUST-OS","download_url":"https://codeload.github.com/HUST-OS/tornado-os/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251212403,"owners_count":21553460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous-kernel","riscv","rust"],"created_at":"2024-08-02T09:01:28.727Z","updated_at":"2025-04-27T21:32:20.773Z","avatar_url":"https://github.com/HUST-OS.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# 飓风内核\n异步内核就像风一样快！  \n![os](https://img.shields.io/badge/kernel-asynchronous-red)\n![ISA](https://img.shields.io/badge/ISA-RISC--V-yellow)\n![competition](https://img.shields.io/badge/os-competition-blue)\n\n## 基于共享调度器的异步内核设计\n操作系统内核经历了几个主要的发展阶段，从裸机应用，批处理系统到多道任务系统，演变为至今主流的线程操作系统。这种系统基于线程的切换来调度任务；为了进一步提升性能，一些现代编程语言在应用层复用线程资源，提出了`协程`的概念，旨在节省任务调度的开销。  \n在本项目中我们提出一种新的内核开发思路：由不同资源共享调度器，在操作系统层面提供协程。我们希望这种全新设计的内核在满足传统内核的易用性的同时，拥有着专有内核的高性能特点，“像风一样快”，因此取名**飓风内核**——**tornado-os**。  \n\n## 运行异步任务\n飓风内核中和传统内核最大的不同点就在于多任务的运行方式，在飓风内核中基于共享调度器来运行异步任务，伪代码呈现如下： \n\n```Rust\npub extern \"C\" fn kernel_main() {\n    // 内核的一些初始化过程\n    kernel::init();\n    // 共享调度器的基地址\n    let base = 0x8600_0000;\n    // 实例化共享调度器\n    let shared_scheduler = unsafe { task::SharedScheduler::load(base) };\n    // 创建一个[`Future`]\n    let future = MyFuture::new();\n    // 用future创建一个任务\n    let task = task::KernelTask::new(future);\n    // 往共享调度器里面添加任务\n    shared_scheduler.add_task(task);\n    // 内核异步运行时中的执行器执行任务\n    runtime::executor::run_until_idle();\n}\n```\n\n## 系统架构\n![](assets/飓风内核系统架构.png)\n\u003c!--\u003cimg src=\"assets/飓风内核系统架构.png\" alt=\"系统架构\" align=center /\u003e  --\u003e\n\n## 如何执行异步任务\n![](assets/异步任务执行.png)\n\u003c!--\u003cimg src=\"assets/异步任务执行.png\" alt=\"异步任务执行\" width = \"80%\" height = \"80%\" align=center /\u003e  --\u003e\n\n## 如何运行\n\n如果您已经能够运行[rCore-Tutorial](https://github.com/rcore-os/rCore-Tutorial-v3)，那么您的环境已经能满足编译飓风内核的要求，不需要再次安装构建工具，请直接开始下一步。\n\n首先需要准备构建工具：  \n* Rust 环境(nightly-2021-03-01或以上)，[安装方法](https://www.rust-lang.org/zh-CN/tools/install)\n* [qemu-system-riscv64](https://github.com/qemu/qemu)(请使用 5.2.0 版本)，[qemu安装方法](https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html#qemu)\n* `riscv64-linux-gnu-`系列或`riscv64-unknown-elf-`系列两种常用的RISC-V工具链，或Rust嵌入式社区的[cargo-binutils](https://github.com/rust-embedded/cargo-binutils)工具链，其中`riscv64-linux-gnu`在Ubuntu平台可以使用`apt`直接安装，`cargo-binutils`按照github说明安装即可。\n* 调试工具(可选)：RISC-V 指令集支持的 [gdb](https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/?C=M\u0026O=D)\n\n\u003e 演示视频链接：https://pan.baidu.com/s/11U0_G3tufcu9fksLHryAYQ, 提取码：cym9\n\n下载源码：  \n```bash\ngit clone https://github.com/HUST-OS/tornado-os.git\n```\n\n在qemu上运行：  \n```bash\ncd tornado-os\ncargo mkfs # 生成文件镜像\ncargo qemu # 运行qemu模拟器\n```\n\n其中，cargo mkfs将生成文件的镜像，它需要在Linux或macOS系统下运行；如果开发环境是Windows，可以考虑在WSL下开发项目。\ncargo qemu能在任何的操作系统下运行。\n\n项目直接使用xtask写法，所以不需要安装make、just等脚本工具。**如果在编写的过程中要求输入账号密码，可能因为xtask写法而输入失败。\n这时候可以使用`sudo su`等需要特权的Linux命令，输入密码后退出`su`环境，当前控制台暂时保存权限，此时再运行命令就不需要输入密码了。**\n\n在k210上运行：  \n首先制作sd卡，将sd卡放入读卡器中，连接到PC端，确认您的sd卡分区，假设是`/dev/sdb`，然后运行以下命令：\n\n```bash\ncargo mkfs # 生成文件镜像\nsudo dd if=fs.img of=/dev/sdb count=1440k # 将文件镜像写入到sd卡中\n# 上面这条命令如果长时间没结束可以直接Ctrl+C退出，文件镜像依然会写入到sd卡中\n```\n\n然后将sd卡从读卡器中拔出来插入到k210板子上，将k210板子连接到PC端。\n接下来检查您的USB串口，运行命令：  \n```bash\ncargo detect\n```\n\n终端会打印出当前您的k210板子对应的USB串口，这里假设是`/dev/ttyUSB0`。\n\n最后运行命令：  \n```bash\nsudo chmod 777 /dev/ttyUSB0 # windows平台不需要这步\ncargo k210 # 将内核二进制文件烧写到k210中运行\n```\n\n\u003e note: k210模式下按`Ctrl + ]`退出。\n\n如果您需要运行数据库测例，这个样例程序需要额外的依赖库才能运行。请输入`cargo mkfs --db`来编译，来选择这些依赖库。\n\n演示程序说明请参考[这里](doc/第十章-用户程序演示说明.md)。\n\n## Features\n|内核组件|状态|未来改动|\n|---|---|---|\n|内存管理|✅|小|\n|中断管理|✅|小|\n|跳板页切换|✅(特权级切换)|小|\n|共享调度器|✅|较小|\n|内核异步运行时|✅(执行器)|比较大|\n|用户异步运行时|✅(执行器)|大|\n|virtio异步块设备驱动|✅|小|\n|sd卡异步驱动|✅(未完全)|待实现|\n|virtio异步网卡驱动|❌|待实现|\n|不同地址空间任务切换|✅(yield系统调用)|小|\n|保底机制(时钟中断的处理)|❌|待实现|\n|相同地址空间任务通信|✅(Channel)|较小|\n|不同地址空间任务通信|❌|待实现|\n|性能测试|✅(需要更精确的测试)|大|\n\n\n|系统调用|状态|实现优先级|\n|---|---|---|\n|yield|✅|高|\n|异步IO|✅(块设备读写)|高|\n|exec|❌|低|\n\n## 目录介绍\n|目录名称|介绍|\n|---|---|\n|tornado-kernel|飓风内核实现|\n|shared-scheduler|共享调度器实现|\n|tornado-user|用户态代码实现|\n|async-virtio-driver|异步virtio块设备驱动|\n|async-fat32|异步fat32文件系统|\n|async-mutex|异步锁|\n|async-sd|异步sd卡驱动|\n|event|事件机制库`no_std`支持|\n|rv-lock|RISC-V指令集关中断的锁|\n\n其中共享调度器以二进制包的形式编译，集成一些接口提供给内核和用户，具体实现参考[代码](shared-scheduler/src/main.rs)。  \n飓风内核中与共享调度器通过 API 兼容方式进行交互，具体参考[代码](tornado-kernel/src/async_rt/shared.rs)，用户态代码同上，具体请参考[代码](tornado-user/src/task/shared.rs)。  \n\n## 开发文档\n+ [项目大纲](doc/项目大纲.md)文档，[pdf](doc/飓风内核项目大纲.pdf)\n+ [doc](doc)目录\n    * [第一章-飓风内核设计](doc/第一章-飓风内核设计.md)\n    * [第二章-共享调度器设计与实现](doc/第二章-共享调度器设计与实现.md)\n    * [第三章-内核任务与内核执行器](doc/第三章-内核任务与内核执行器.md)\n    * [第四章-用户执行器与yield系统调用](doc/第四章-用户执行器与yield系统调用.md)\n    * [第五章-virtio异步块设备驱动](doc/第五章-virtio异步块设备驱动.md)\n    * [第六章-异步fat32文件系统](doc/第六章-异步fat32文件系统.md)\n    * [第七章-异步IO系统调用](doc/第七章-异步IO系统调用.md)\n    * [第八章-飓风内核的上层应用兼容性](doc/第八章-飓风内核的上层应用兼容性.md)\n    * [第九章-性能测试](doc/第九章-性能测试.md)\n    * [第十章-用户程序演示说明](doc/第十章-用户程序演示说明.md)\n+ 代码注释，项目代码中有着充分的文档注释，包括一些实现思路\n\n\n## TODO\n+ 从内核层面提供异步网络IO(异步网络协议栈)\n+ 更全面，更系统的性能测试分析\n+ 多核环境下的上下文管理机制\n\n## 开源协议\n本项目使用双开源协议：  \n* [木兰许可证](./LICENSE-MULAN)\n* [Apache](./LICENSE-Apache)\n\n## **无相之风战队出品**\n欢迎浏览[无相之风战队官方网站](https://qf.rs/)！\n\n## **性能测试结果**\n![](assets/任务切换与进程切换性能对比(qemu).png)\n\u003c!--\u003cimg src=\"assets/任务切换与进程切换性能对比(qemu).png\" alt=\"任务切换与进程切换性能对比\" width = \"45%\" height = \"45%\" align=left /\u003e--\u003e\n\n![](assets/任务切换对比进程切换优化率(k210).png)\n\u003c!--\u003cimg src=\"assets/任务切换对比进程切换优化率(k210).png\" alt=\"任务切换对比进程切换优化率\" width = \"45%\" height = \"45%\" align=right /\u003e--\u003e\n\n![](assets/飓风内核与rCore-Tutorial运行多任务性能对比(qemu).png)\n\u003c!--\u003cimg src=\"assets/飓风内核与rCore-Tutorial运行多任务性能对比(qemu).png\" alt=\"飓风内核与rCore-Tutorial运行多任务性能对比(qemu)\" width = \"45%\" height = \"45%\" align=left /\u003e--\u003e\n\n![](assets/飓风内核与rCore-Tutorial运行多任务性能对比(k210).png)\n\u003c!--\u003cimg src=\"assets/飓风内核与rCore-Tutorial运行多任务性能对比(k210).png\" alt=\"飓风内核与rCore-Tutorial运行多任务性能对比(k210)\" width = \"45%\" height = \"45%\" align=right /\u003e--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHUST-OS%2Ftornado-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHUST-OS%2Ftornado-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHUST-OS%2Ftornado-os/lists"}