继我的训练营第 1-2 阶段总结之后,终于结束了第 3 阶段。
这里的内容与我的幻灯片《阶段 3 学习总结 + 实现 rCore 异步定时器驱动》基本一致。
参加训练营以来的所有笔记,都在 https://zjp-cn.github.io/os-notes。
每周任务(均完成)
- 第 2 周:用户态协程(爬虫)
- 第 3 周:向 embassy 提交修复 Waker unsoundness 的 PR(已合并)
- 第 4-6 周:将 embassy 应用于 rCore 定时器驱动
- 仓库地址:rCore-tutorial-code-2024S-embassy
- 文档:仓库 README 或者 os-notes/rCore-embassy-timer
开发日志
- rCore-N (共享调度器 fork) 搭建和踩坑
- cortex-m-quickstart 的 qemu 模拟记录
- embassy-usage(学习 embassy 时,自己编写的示例仓库)
- 研究 embassy 库的经验之谈 (RA 配置、条件编译、check-cfg)
- green-thread(整合绿色线程代码到单独的仓库)
学习笔记
- embassy: TaskStorage
- embassy: embassy_time_driver::Driver
- embassy: sync:zerocopy_channel (SPSC) 和 MPMC Channel
- embassy: integrated-timers 和任务机制:任务类别、任务调度与执行、任务的状态与改变、添加和删除任务、任务与 Future
其他工作
- 学习 rCore-N 共享调度器项目代码
- 学习 embassy std 例子时,使用 Miri 碰到 UB 和 ICE
- 报告 ICE 给 Miri:ICE due to overflow when using a large timeout with futexes
- 在造成 UB 的 critical-section 仓库下留言,提供更多信息:Mitigate Miri violation
- 每周线上讨论时准备的 PPT
- 补充基础知识:反复观看讨论的视频回放,把里面提及的新知识全部查一遍
致谢
向老师是我遇见的最好的老师!感谢向老师在这 6 周时间里倾囊相授,尤其对我充满了耐心、热情和鼓励。与您所交流的一切,远远大于我在训练营里学习的所有知识,也是我所得到的最具价值的收获。
在最后一周,我其实在笔记本里,用笔写了很多很多页想告诉向老师的话,但最终没有开口。
我是一个很容易受到鼓励而逐渐喜欢一个知识领域的人。十四年前,我向英语老师请教的第一个问题,打开了我对英语的兴趣大门,在之后的八年直到人生再无英语课堂,我一直是英语课堂上最跃跃欲试的学生,也常常从第一节晚自习缠着英语老师请教各种问题,直到晚自习放学而不知疲惫。七年前,我发现自己能够自学编程,随后在参加各种数学建模比赛中,负责编程,在收获名次的喜悦中,发展起对编程的爱好,而编程这个兴趣持续到现在。我只是凭借自己的努力而缓慢地学习着,所以,当向老师您每周热情地给予我宝贵的学习机会,我内心充满了感激。我甚至在第三阶段的前几周里,就不止一次地梦见您成为了我的老师,当梦醒来,我就已经知足了。但即便我有时非常希望请教您,我依然不得不拒绝这些机会:我不想麻烦任何人,尤其不想浪费向老师的时间和精力 —— 费心去教一个操作系统领域之外的人,是不值得的事情;此外,我害怕因为向老师而发展起对这个领域的兴趣,维持现有的兴趣已经让我支付了巨大的机会成本和沉没成本。
感谢陶要仲同学将异步运行时放置到时间中断处理函数里面,这是完成向老师所提的第二个步骤的最重要的一环;也谢谢你在最后一周、连续三个晚上倾听我喋喋不休,最终我们愉快地合作成功。
感谢操作系统训练营里的每位老师!感谢第三阶段杨杰老师、赵方亮老师对我的帮助。感谢 rCore 教程的作者陈渝老师、吴一凡老师(如果我了解错误或者仍有遗漏,请告诉我 ta 的名字)。rCore 教程是我阅读操作系统领域的第一本书,它带我领略到操作系统环环相扣的精巧设计,是我能够完成第二、三阶段非常重要的基础。
感谢全球的、开放的、包容的 Rust 社区!我所有的 Rust 知识来自 Rust 社区,来自我所阅读的每一篇文档、每一个博客、每一条帖子、每一则帮助、每一处讨论……是社区的力量,让我发现了新的兴趣,培养了新的习惯。没有积累充分的 Rust 知识储备,我不可能参加这个训练营,也不可能轻松阅读每一行 rCore、embassy 里的 Rust 代码,更不可能在训练营里与各位结识,最终走到现在。