/proj68-coroutine-scheduler

异步操作系统中的进程、线程和协程调度

GNU General Public License v3.0GPL-3.0

proj68-coroutine-scheduler

项目名称

异步操作系统中的进程、线程和协程调度

项目描述

在RISC-V平台上利用Rust语言的异步特征,在操作系统内核中设计和实现统一的进程、线程和协程调度器,以提高操作系统整体性能。

所属赛道

2021全国大学生操作系统比赛的“OS功能设计”赛道

参赛要求

  • 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2021年春季学期或之后本科毕业的大一~大四的学生)
  • 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
  • 请遵循“2021全国大学生操作系统比赛”的章程和技术方案要求

项目导师

向勇

难度

中等

特征

  • 在操作系统中引入协程概念,以同时支持内核线程和协程,进而统一进程、内核线程和协程的调度。

关键词

RISC-V、内核、处理机调度、Rust、rCore

文档

  1. 异步操作系统设计方案

License

GPL-3.0-only

预期目标

注意:下面的内容是建议内容,不要求必须全部完成。选择本项目的同学也可与导师联系,提出自己的新想法,如导师认可,可加入预期目标

在现有 rCore 的基础上,进一步完成如下目标:

  1. 学习Rust语言:rust语言有协程的支持,可以把异步函数执行视为基本的调度单位(协程),然后由编译器生成这些协程的调度代码。

  2. 完成教学操作系统rCore的实验:目的是熟悉rCore的基本结构和核心算法的实现;

  3. 基于对异步操作系统设计方案的了解,在用户态进程中引入协程支持,同时支持用户态线程;

  4. 分析用户态进程中的线程和协程的相关数据结构:可能要实现就绪协程的队列和就绪线程的队列,然后实现协程切换和线程切换的统一。

  5. 尝试在用户态统一线程和协程的调度;

  • 同一线程内的协程切换:rust语言中,在用户态下同一线程内的协程切换的实现已经存在相应的开源用户态线程库。
  • 同一进程内不同线程中的协程切换:不同线程中的协程切换,就要获取协程所在的线程信息,然后进行现成的切换。
  • 不同进程内的协程切换:不同进程中的协程切换,就要获取协程所在的线程和进程信息,然后进行进程的切换。
  1. 在内核中引入协程支持,同时支持线程切换和协和协程切换;
  2. 了解内核中协程的调度机制,分析协程相关数据结构;
  3. 尝试在内核中统一进程、线程和协程的调度;
  4. 利用协程机制优化内核中的文件系统模块;
  5. 对比测试引入协程前后的应用程序性能变化;