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
报名:(请在此填上自己和队友的名字)
已有工作:
- TypeKernel:三位六字班同学在 2019 年 OS+编译专题训练课上的联合实验。用 Haskell 语言构造了一个用于编写 OS 的 DSL,将其编译为 C 语言子集(C----),并实现了一个基于 UEFI 的 Demo。
参考资料:
2. 为 rCore 实现更多 Linux 系统调用
报名:张李牛牛
报名:孙骏博 佟禹畅
报名:罗崚骁 宋香君
主要目标:
- 在 rCore 上扩展 Linux 系统调用支持,以支持更多应用。可以考虑实现或者完善:信号机制、TTY、用户和群组权限管理、procfs 和 devfs。
已有工作:
- 在 OS2019 大实验中,王润基和陈嘉杰合作在 rCore 中实现了 Linux ABI,支持运行原生的 Linux 程序(基于 musl libc,不支持 glibc)。目前 rCore 中已经实现了 60 多个 Linux Syscall(+20 多个空实现),支持运行:Busybox, GCC, Nginx, Redis, Rustc 等实际应用。
- Biscuit 是 MIT 用 Golang 编写的类 Unix OS, 相关论文 发表在 OSDI2018 上。他们实现了 58 个 Syscall(不完全兼容 Linux),支持运行 Nginx 和 Redis(经过修改,基于他们自己的 libc)。性能测试与 Linux 对比,只慢了 5%-10%。我们尝试在 rCore 上重复这一工作,但最终由于真机调试过于困难而作罢。
参考资料:
- rCore 对标 Biscuit OS 进行真实应用/网卡的性能测试
- rCore 毕业论文
- 在 rCore 中实现 epoll
- 在 rCore 中实现 SystemV 信号量和共享内存
- 在 rCore 中实现 Framebuffer 运行 mgba
3. 用 Rust 重写 zircon(zCore)
报名:张晨 孙文厚
报名:曹鼎原 李岱轩
主要目标:
- 基于 rCore 现有基础,用 Rust 重新实现 Zircon 微内核。
- 根据文档描述,实现相应的内核对象和系统调用,目标是能运行到 shell。
- 在新项目中尝试新技术、积累经验,用来重构和改进 rCore。
其它目标:
- 支持 ARM64,让 libos 在 ARM 平台的 Linux 上运行,让 zCore 在树莓派上运行
- 测试并优化微内核性能
已有工作:
- 潘庆霖在 OSTrain2019 大实验中对 Fuchsia 进行了完整的调研和分析。
- 随后王润基在寒假期间尝试搭起了 zCore 项目框架,目前已实现了 8 个 syscall 和诸多内核对象,还剩 50 多个。
- zCore 尝试的新技术包括:抽象出 HAL 以实现纯用户态开发和测试,应用 async 实现内核任务管理……
参考资料:
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 更加高效地交互。
参考资料:
- Hoss: MIT的基于jos的教学VMM
- JailHouse:Linux-based Hypervisor
- RVirt:MIT 用 Rust 写的 RISCV Hypervisor
- Linux KVM , Apple Hypervisor Framework , Zircon Hypervisor 接口
- Xvisor: Embedded Hypervisor for RISC-V 和 支持Hypervisor-mode的QEMU
5. RISCV 用户态中断 & 高性能 IPC/IO
主要目标:
- 利用 RISCV 用户态中断机制,改进 OS 以提升 IPC 及 IO 性能。
- (可选)为 QEMU 添加用户态中断支持
- (可选)基于 RocketChip 实现用户态中断
参考资料:
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 驱动)
参考资料:
- JudgeDuckOS64 :利用 rCore 现有模块重新实现的 应用程序稳态测试系统(评测鸭)
7. 为 rCore 适配树莓派 4(ARM64)
主要目标:
- 让 rCore 支持树莓派 4 物理硬件
- 完善与改进已有的树莓派 3 驱动(SD 卡、音频、GPU),或添加新驱动支持(USB、网卡、蓝牙)
参考资料:
8. 为 rCore 适配基于 rv64 的物理硬件(如 K210、FPGA+Rocket Chip、Step CYC10 FPGA board 等)
主要目标:
- 让 rCore 支持更多硬件平台
参考资料:
9. 形式化验证的 OS
报名:韩志磊、谢兴宇
主要目标:待定
参考资料:
10. 基于 rCore 的网络路由器
主要目标:
- 完善多网卡支持,实现系统路由表和内置的网络功能,或者给用户态提供一个类似 PCAP 的接口,然后编写一个软路由
- (可选)在计网联合实验的成果上继续
- (可选)优化 10G 网卡驱动(ixgbe)的稳定性和性能,并且在 PC 机上运行
参考资料:
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)。
参考资料:
- Bringing async/await to embedded Rust,async/await on embedded Rust
- Rust 社区大佬关于 global executor 的提案博文
- Async Interview #7: Withoutboats
12. 在内核态运行 Rust std
主要目标:
- 将 Rust 标准库移植到裸机环境中,使得依赖 std 的 Rust 用户程序可以直接在内核态运行
参考资料:
13. 基于 Labeled RISCV 的 OS kernel 支持
主要目标:
- Labeled RISCV 是中科院计算所基于 RocketChip 改进实现的「标签化」CPU,可以在总线级别实现资源的分配和隔离
- 在 rCore 中添加对 Label 特性的支持,复现计算所的结果,并做进一步探索。
已有工作:
- 王纪霆在 OSTrain2018 大实验中进行了这个尝试。但当时 Rust RISCV 工具链还很不成熟,PARD 系统也有些问题,导致实验进行得不太顺利。现在的情况应该好很多了。
参考资料:
14. 在 rCore 中实现容器机制
主要目标:
- 参考 Linux 的 cgroup 和 namespace,实现简单的容器机制
- 自由选择 OS 相关的论文、改进结果
参考资料
15. 为 rCore 添加 USB 驱动支持
主要目标:
- 在 rCore 中实现 USB 协议栈
- 支持简单的 USB 设备,如 USB 键盘/鼠标、U 盘读写
- 能够在至少一种真实硬件上演示(树莓派、PC)
参考资料:
16. 为 rv-64 实现全面的 ucore 支持
报名:刘润达** 曹鼎原**
主要目标:
- 在 ucore 中实现对多核 rv-64 的支持
- 在功能上类似 rCore,xv6-riscv
- 能够在至少一种真实硬件上演示(k210)
- 有类似 rCore-tutorial 的详细文档
- 可用 c/c++实现
参考资料:
- 张蔚在 OS2017 移植的 bbl-ucore
- 石振兴毕业论文(非公开,请找助教索取)
17. 在 x86 平台设计实现一套类似 OpenSBI 的运行环境
18. 重构基于 rust 的课程实验
报名:赵成钢 涂轶翔
主要目标:
- 面向课程实验需求重构精简版 rCore
- 致力于各种软工的开发标准,例如代码可读性、模块化等,优化同学开发体验
- 重新设计课程实验,写一份文档
- 涵盖知识点更加全面,文档详细到位
19. 可持久化进程
初步目标:
- 自定义系统调用 SYS_PHOTO ,用于在任意时刻给用户进程拍一个快照,即将该进程的数据和上下文全部保存到磁盘。以后可以通过 os 读取,恢复该时刻的运行状态。
- 调研这个系统调用的实际用途。
进阶目标:
- 进一步考虑数据的一致性,如在一次快照之后对磁盘数据进行了写操作。如果这时返回上一个快照,会再次对该数据进行写操作,可能导致数据不一致。
- 多线程?
参考资料:
- 一个很方便好用的 NVM 工具库,支持多线程,应该可以参考,并且防止工作重复:https://github.com/HewlettPackard/nvthreads
- 上面那个库对应的paper:https://www.cs.purdue.edu/homes/hsu62/nvthreads-eurosys.pdf
- 2012年操作系统专题训练大实验-进程休眠与恢复: http://os.cs.tsinghua.edu.cn/oscourse/OS2012/projects/U11