OS 2020 大实验选题参考 - oscourse-tsinghua/rcore_plus GitHub Wiki

注:下面的题目仅供参考,鼓励同学们选择其它任何感兴趣的方向!

往年大实验 wiki: OS2017 , OS2018 , OSTrain2018 , OS2019 , OSTrain2019

通知

  • 2020.03.09:选题截止时间为第四周周日晚24点,请大家同时在Wiki上编辑选题列表。
  • 2020.02.24:请大家自行选题、组队,可以直接编辑本文。截止时间为第四周。

分类索引

  • rCore 功能改进:2 Syscall,6 OSKit,14 Container,19 可持久化进程
  • rCore 适配硬件:7 Raspi4,8 Rv64-board,10 Router,16 USB
  • Rust 语言相关:11 Async,12 Std
  • 其它 OS 架构:3 Zircon,4 VMM
  • CPU:5 U-Interrupt,13 LabeledRv
  • PL:1 OSLang,9 Verification
  • 教学文档:17 Rv64-ucore

1. 多种语言协同构造的 OS

报名:(请在此填上自己和队友的名字)

已有工作:

  1. TypeKernel:三位六字班同学在 2019 年 OS+编译专题训练课上的联合实验。用 Haskell 语言构造了一个用于编写 OS 的 DSL,将其编译为 C 语言子集(C----),并实现了一个基于 UEFI 的 Demo。

参考资料:

  1. Typekernel给后来者的话

2. 为 rCore 实现更多 Linux 系统调用

报名:张李牛牛

报名:孙骏博 佟禹畅

报名:罗崚骁 宋香君

主要目标:

  • 在 rCore 上扩展 Linux 系统调用支持,以支持更多应用。可以考虑实现或者完善:信号机制、TTY、用户和群组权限管理、procfs 和 devfs。

已有工作:

  1. 在 OS2019 大实验中,王润基和陈嘉杰合作在 rCore 中实现了 Linux ABI,支持运行原生的 Linux 程序(基于 musl libc,不支持 glibc)。目前 rCore 中已经实现了 60 多个 Linux Syscall(+20 多个空实现),支持运行:Busybox, GCC, Nginx, Redis, Rustc 等实际应用。
  2. Biscuit 是 MIT 用 Golang 编写的类 Unix OS, 相关论文 发表在 OSDI2018 上。他们实现了 58 个 Syscall(不完全兼容 Linux),支持运行 Nginx 和 Redis(经过修改,基于他们自己的 libc)。性能测试与 Linux 对比,只慢了 5%-10%。我们尝试在 rCore 上重复这一工作,但最终由于真机调试过于困难而作罢。

参考资料:

  1. rCore 对标 Biscuit OS 进行真实应用/网卡的性能测试
  2. rCore 毕业论文
  3. 在 rCore 中实现 epoll
  4. 在 rCore 中实现 SystemV 信号量和共享内存
  5. 在 rCore 中实现 Framebuffer 运行 mgba

3. 用 Rust 重写 zircon(zCore)

报名:张晨 孙文厚

报名:曹鼎原 李岱轩

主要目标:

  • 基于 rCore 现有基础,用 Rust 重新实现 Zircon 微内核。
  • 根据文档描述,实现相应的内核对象和系统调用,目标是能运行到 shell。
  • 在新项目中尝试新技术、积累经验,用来重构和改进 rCore。

其它目标:

  • 支持 ARM64,让 libos 在 ARM 平台的 Linux 上运行,让 zCore 在树莓派上运行
  • 测试并优化微内核性能

已有工作:

  1. 潘庆霖在 OSTrain2019 大实验中对 Fuchsia 进行了完整的调研和分析。
  2. 随后王润基在寒假期间尝试搭起了 zCore 项目框架,目前已实现了 8 个 syscall 和诸多内核对象,还剩 50 多个。
  3. zCore 尝试的新技术包括:抽象出 HAL 以实现纯用户态开发和测试,应用 async 实现内核任务管理……

参考资料:

  1. Fuchsia 调研项目 wiki分析文档
  2. zCore 项目仓库
  3. Fuchsia 源码及官方文档
  4. Fuchsia 中文社区

4. 实现一个 VMM(虚拟机)

报名:张子键 唐天映

主要目标:

  • 实现一个简单的 VMM(虚拟机监控程序)
  • 参考 Linux KVM 或 Zircon,对外提供相关接口
  • 尝试利用 x86 VMX、RISCV H 扩展或 ARM 相关指令集
  • 能够同时运行 ucore / rCore / ... 多个 guest

已有工作:

MIT PDOS 实验室的学生用 Rust 写了一个比较简单的 RVirt hypervisor,已经可以在 QEMU 和 SFIVE 板子上运行并控制 Linux for RV64,但性能比较弱,功能也还有些缺。我们希望能够做个比它性能更高的 hypervisor,也许需要修改一定的 Linux arch 层,让 Linux 与 Hypervisor 更加高效地交互。

参考资料:

  1. Hoss: MIT的基于jos的教学VMM
  2. JailHouse:Linux-based Hypervisor
  3. RVirt:MIT 用 Rust 写的 RISCV Hypervisor
  4. Linux KVM , Apple Hypervisor Framework , Zircon Hypervisor 接口
  5. Xvisor: Embedded Hypervisor for RISC-V支持Hypervisor-mode的QEMU

5. RISCV 用户态中断 & 高性能 IPC/IO

主要目标:

  • 利用 RISCV 用户态中断机制,改进 OS 以提升 IPC 及 IO 性能。
  • (可选)为 QEMU 添加用户态中断支持
  • (可选)基于 RocketChip 实现用户态中断

参考资料:

  1. RISCV 特权级手册
  2. XPC:陈海波团队改进 RISCV 硬件以提高 IPC 性能的工作
  3. Linux 最新的异步 IO 机制 io_uring

6. 重构 rCore 内核组件形成 OS-Kit

主要目标:

  • 将 rCore 拆分成独立可复用的 crates,可组合成多种特定 OS

已有工作:

  • 将庞大的 OS 拆分成一个个独立的模块,一直是 rCore 开发的指导思想和终极目标。不过现实中工程总是十分 dirty 的,需要不断地在优雅设计和实际产出中作出妥协。
  • 目前 rCore 已经的分离成 crate 的模块包括:文件系统(rCore-fs),内核线程(rCore-thread,计划用 async executor 代替),虚拟内存(rCore-memory,计划用 Zircon object VMAR 代替),部分驱动(isomorphic_drivers)。更多 crates 可以在 rCore 的 GitHub 主页 中查看。但仍有大量代码堆积在 kernel 主仓库中,我们希望能把它们分离出来,形成独立的 crates 并发布到社区。(一个完成的例子:virtio 驱动

参考资料:

7. 为 rCore 适配树莓派 4(ARM64)

主要目标:

  • 让 rCore 支持树莓派 4 物理硬件
  • 完善与改进已有的树莓派 3 驱动(SD 卡、音频、GPU),或添加新驱动支持(USB、网卡、蓝牙)

参考资料:

  1. rCore 的 ARM64 和树莓派3移植
  2. 在 rCore 中支持树莓派3声卡
  3. 在 rCore 中支持树莓派3 SD卡
  4. 在 rCore 中移植 VideoCore IV 驱动

8. 为 rCore 适配基于 rv64 的物理硬件(如 K210、FPGA+Rocket Chip、Step CYC10 FPGA board 等)

主要目标:

  • 让 rCore 支持更多硬件平台

参考资料:

  1. FPGA 上运行 RISC-V rCore 构建路由器
  2. 基于Rust语言和RISC-V平台的计算机系统实验设计和改进

9. 形式化验证的 OS

报名:韩志磊、谢兴宇

主要目标:待定

参考资料:

  1. HyperKernel在RISC-V的移植与CPU结合验证
  2. Push-button Verification of File Systems

10. 基于 rCore 的网络路由器

主要目标:

  • 完善多网卡支持,实现系统路由表和内置的网络功能,或者给用户态提供一个类似 PCAP 的接口,然后编写一个软路由
  • (可选)在计网联合实验的成果上继续
  • (可选)优化 10G 网卡驱动(ixgbe)的稳定性和性能,并且在 PC 机上运行

参考资料:

  1. FPGA 上运行 RISC-V rCore 构建路由器
  2. 计网联合实验

11. 改进 Rust 语言的 async on no-std

报名:王宇逸 ,刘晓义

主要目标:

  • 在内核(no_std)环境中应用 Rust async 无栈协程机制。需要对现有代码进行从下到上彻底的重构(Driver -> INode -> Syscall)。
  • 尝试将已有用户态成熟的 executor(tokio/async-std)移植到 no_std 环境中。
  • 与传统的有栈线程(如内核线程,goroutine)对比性能(内存占用,实时性等指标)。

已有工作:

  • 目前 Rust 社区已经有一些相关尝试。但受制于 Rust 语言及库的实现还不完善(PR),相关生态还未建立起来。
  • 我们在 zCore 项目中已尝试使用 async 代替内核线程,证实此方案可行,且也许能够大幅减少线程的内存占用(8K -> 200B)。

参考资料:

12. 在内核态运行 Rust std

主要目标:

  • 将 Rust 标准库移植到裸机环境中,使得依赖 std 的 Rust 用户程序可以直接在内核态运行

参考资料:

  1. rethink用户/内核态

13. 基于 Labeled RISCV 的 OS kernel 支持

主要目标:

  • Labeled RISCV 是中科院计算所基于 RocketChip 改进实现的「标签化」CPU,可以在总线级别实现资源的分配和隔离
  • 在 rCore 中添加对 Label 特性的支持,复现计算所的结果,并做进一步探索。

已有工作:

  1. 王纪霆在 OSTrain2018 大实验中进行了这个尝试。但当时 Rust RISCV 工具链还很不成熟,PARD 系统也有些问题,导致实验进行得不太顺利。现在的情况应该好很多了。

参考资料:

  1. 为 rCore 适配 PARD / Labeled RISCV

14. 在 rCore 中实现容器机制

主要目标:

  • 参考 Linux 的 cgroup 和 namespace,实现简单的容器机制
  1. 自由选择 OS 相关的论文、改进结果

参考资料

15. 为 rCore 添加 USB 驱动支持

主要目标:

  • 在 rCore 中实现 USB 协议栈
  • 支持简单的 USB 设备,如 USB 键盘/鼠标、U 盘读写
  • 能够在至少一种真实硬件上演示(树莓派、PC)

参考资料:

  1. 在 rCore 中移植 USB 驱动的尝试 ( https://github.com/cfgbd/rustos/tree/master/usb )
  2. ucore+上USB 驱动的移植(ARM 平台)

16. 为 rv-64 实现全面的 ucore 支持

报名:刘润达** 曹鼎原**

主要目标:

  • 在 ucore 中实现对多核 rv-64 的支持
  • 在功能上类似 rCore,xv6-riscv
  • 能够在至少一种真实硬件上演示(k210)
  • 有类似 rCore-tutorial 的详细文档
  • 可用 c/c++实现

参考资料:

  1. 张蔚在 OS2017 移植的 bbl-ucore
  2. 石振兴毕业论文(非公开,请找助教索取)

17. 在 x86 平台设计实现一套类似 OpenSBI 的运行环境

18. 重构基于 rust 的课程实验

报名:赵成钢 涂轶翔

主要目标:

  • 面向课程实验需求重构精简版 rCore
    • 致力于各种软工的开发标准,例如代码可读性、模块化等,优化同学开发体验
  • 重新设计课程实验,写一份文档
    • 涵盖知识点更加全面,文档详细到位

19. 可持久化进程

初步目标:

  • 自定义系统调用 SYS_PHOTO ,用于在任意时刻给用户进程拍一个快照,即将该进程的数据和上下文全部保存到磁盘。以后可以通过 os 读取,恢复该时刻的运行状态。
  • 调研这个系统调用的实际用途。

进阶目标:

  • 进一步考虑数据的一致性,如在一次快照之后对磁盘数据进行了写操作。如果这时返回上一个快照,会再次对该数据进行写操作,可能导致数据不一致。
  • 多线程?

参考资料: