riscv64-ucore 小组开题报告

曹鼎原 刘润达 2020.3.28 第六周周六

总目标: ucore教学实验在riscv64平台的移植

  • 在riscv64平台(spike/qemu), 构建包含代码和文档的step-by-step tutorial(最低目标)

  • 在riscv64真实硬件进行测试(根据实际进度选做)

  • 探索支持多核硬件(根据实际进度选做)

相关工作介绍

基于x86的ucore实验指导书 (清华大学操作系统历届教学团队)

ucore实验指导书的结构: 以lab为组织单元, 每个lab首先给出实验目的, 实验内容, 项目组成, 然后进行原理讲解

关于代码的阅读: 提供基本代码和参考答案(无法避免抄袭所以干脆对所有人都直接给答案?), 要求编写实验报告. 代码里有很多注释帮助理解, 但还是要学生自己扎到代码里面阅读.

优点: 提供参考答案防止实现遇到困难的时候消耗时间过多?

缺点: 需要学生自己扎到代码里面读? x86硬件比较麻烦?

基于riscv64的rcore step-by-step tutorial(刘丰源, 吴一凡)

rcore step-by-step tutorial的结构: 以帮助学生自己一行行构建自己的os为目标, 按照功能模块组织章节(实际很多章节的划分类似于不同lab的划分). 每章进行原理讲解, 然后给出详细的代码解释. 学生可以跟着tutorial把代码基本读一遍.

实验题目和step-by-step tutorial相对独立, 简单交代了题目和任务, 比现在ucore的实验指导简陋.

优点: step-by-step的构造方式, 使得学生可以自己"写"(或者"抄")出一个OS, 增加成就感和对OS整体的把握

缺点: 简陋, 仓促上马, 没有丰富的challenge

基于riscv32和Berkeley Bootloader的bbl-ucore(张蔚)

可以看出不同的lab和架构耦合的程度不一样

lab1的题目和bootloader, x86架构的关系较多, 所以我们考虑lab1的编写中, 暂时不考虑练习题目, 只是实现好支持中断的最小化内核.

lab2到lab5的题目描述是平台无关的, 但是实现的时候需要修改

ucore的lab6,lab7,lab8基本上平台无关, 代码实现也只需要很少的修改.

UCORE到多核RISC-V处理器的移植(石振兴)

提出了关于ucore多核实现的一种思路, 在添加多核实现的时候可以参考.

实验方案

以原有ucore指导书和bbl-ucore为参考逐步进行代码和文档的编写. 摸着bbl-ucore过河. 预计riscv32到64的变化不会特别大. 能复用的地方尽量复用之前的文档和(平台无关的)代码以加快进度.

以lab为编写工作的基本单元. 共lab0(环境搭建) + lab1 到lab8 9个单元. (可以把环境搭建作为一个作业?占1分?)

每个lab的工作包括两部分: 基本框架的代码编写(含注释, 注意在代码编写的同时完成), step-by-step tutorial的编写. 计划滚动进行这两部分的工作, 保证两部分进度差距不超过1个lab. 也就是: 完成labX的代码的时候, 至少完成lab(X-1)的文档.

lab0(环境搭建)预计将首先给出ubuntu/wsl下的指南. 其他系统(如使用docker/Mac OS)的指南慢慢探索添加.

lab1的练习和具体平台的耦合比较强, 所以一开始不编写lab1的练习题, 只写好step-by-step tutorial, 构建支持中断的最小可执行内核.

对平台无关的实验任务不加改动, 只是进行riscv64的实现(lab2-lab8)

由于预计主要工作量在于step-by-step tutorial文本编写, 保险起见, challenge 暂不计划移植. 参考答案暂不计划编写, 如有时间可能进行.

和rcore tutorial对比的时候, 对于第三方的dependency, rcore可以简单use crate封装起来, 但c语言不行, 所以至少要对接口在tutorial里面描述一下. 但是这类模块不仔细了解也不影响做实验, 如果做好模块化, 可以在tutorial里只介绍接口而不介绍原理.(在代码里写好注释给有兴趣仔细了解的同学看)

多核特性的添加, 至少需要完成lab6调度算法之后才能进行, 那么不如直接完成基本实验lab8之后再进行, 前期边写tutorial边进行原理调研. 这个安排要求尽量加快step-by-step tutorial的编写进度, 以为多核特性的添加和真实硬件测试留出足够时间.

希望结合rcore step-by-step tutorial和ucore tutorial的优点

应当能够让学习者照着step-by-step tutorial抄一遍/粘贴一遍能得到自己的ucore(缺陷: 代码量可能比rcore大, 调第三方库不方便/没有第三方库), 读一遍tutorial就可以了解整个ucore的基本原理和实现细节. 难以使得文档是面面俱到的操作系统原理讲解, 但要尽量覆盖ucore实现的时候涉及的知识点.

tutorial的不同章节是增量(incremental)的关系.

类似rcore step-by-step tutorial, 提供tutorial每个阶段的参考代码

小组分工

初步目标:

以12周为ddl, 完成基本实验的代码移植(包含详细注释)和step-by-step tutorial(能够照着"抄"出自己的ucore), 同时兼顾多核支持的前期调研设计和实现, 可能的话准备硬件的测试.

暂定两个可选的具体计划: PlanA: 首先把所有的代码改好跑起来, 然后慢慢捋tutorial,两个人分别负责注释和文档 PlanB: 一个lab一个lab来, 代码和文档两个人可以分工. PlanA看起来比较爽一点, 所以接下来第七周会着力尝试一下, 第七周下来进度良好就PlanA, 否则转到Plan B:

第7周完成环境搭建

第8,9,10,11周每周至少完成两个lab的移植和tutorial编写

第12周机动, 完成扫尾工作(如文档在github pages的部署). 12周周末进行报告.

无论Plan A还是Plan B, 12周之后, 都进行多核支持/真实硬件测试.

统一编码风格: 4空格缩进, 大括号不换行(这有写进来的必要吗)

其他问题

加强和rcore remake小组的合作?

还需要咨询王润基, 贾跃凯等人多核实现的经验教训?

如有精力, 是否需要简单调研一下其他学校/国外学校的操作系统lab?

和课程其他环节的整体重构?(如将ostep的课后练习容纳到这个框架里?)

最后更新于