0%

2022年开源操作系统训练营第一阶段总结-kxxt

整体感受

这是我第一次参加这样的开源课程,也是我第一次深入的学习操作系统的相关知识
(之前学过 nand2tetris 不过学的比较浅)。整体的课程体验非常的好,这是我
第一次见到使用 GitHub Classroom 做为教学平台的国内课程。

除此之外,整个实践过程非常符合开源软件的开发方式,
这让我这种习惯了开源软件开发流程的人感到十分的舒适:

  • 所有资料都公开在 GitHub 上
  • 实验代码在提交之后有 CI 自动完成评测和分数上报
  • 学生可以给仓库发 PR 来为课程做改善(感觉合PR 的频率稍微有点低,后来我就直接给 rCore Tutorial 提 PR 了,rCore 这边合的很快)
  • 直接使用 GitHub Issues 做问答(虽然回复的人比较少)
  • 甚至用上了当时还在预览中的 Codespaces

此外,课程的直播网站设计的也很棒,甚至在校园网的条件下比企鹅会议流畅。

学习记录和各章节报告的 repo: https://github.com/kxxt-sduwh/rust-os-learning-record

学习总结

Rust

课程首先带我们学习了 Rust. 因为我已经学过两次 rust 了
(或者说学第一次时被劝退了,后来又学了第二次),我基本上就只是把 rustlings 重做了一遍,看了看 Rust 语言圣经(报名之前就在看了)。

后来在实践的时候深刻的体会到了 rust 类型系统的优势。比如虚拟页号和物理页号虽然都只是一个数字,但是我们都拿一个只含有一个字段的结构体把它封装一下,这样子我们既能给页号定义方法,又避免了混用两种页号,我上一次学习到这种技巧还是在学习 F# 函数式编程的时候,不过当时只是学了,没有实践,很快就忘了。实验的一个可以改进之处就是在 EasyFS 那里也这样做,把 EasyFS 代码里各种 u32 用一个适当的类型封装一下。

RISC-V

我在学习 RISC-V 之前仅有一点薄弱的 x86(-64) 汇编基础。
在学习了 RISC-V 的基础语法之后,我发现它比 x86-64 简单很多。通过学习 RISC-V 的特权级架构,我理解了 BIOS/操作系统/用户程序之间的隔离是如何实现的,sv39 页表机制的学习是我第一次接触到页表的相关知识。

Labs

通过观看课程视频、学习课程文档、动手实践,我第一次深入的学习了操作系统的原理。我了解了操作系统的演化历史,从 LibOS 到现在的多线程、多进程 OS。通过在实验中实现地址空间的隔离和分页,我更加深入的理解了虚拟内存的原理和用户程序的内存布局。在做实验的时候,我也理解了内核态和用户态这两个之前我不是很懂的概念。做完任务调度相关的实验之后,我理解了操作系统如何公平的调度应用程序。各个 lab 都是实现子系统调用,这让我体会到了系统调用接口的设计的艺术,我也初步理解了 WSL 1 的原理。在做文件系统实验的过程中,我第一次了解了文件系统背后的原理。并发的部分深化了我对原子操作和互斥锁的理解。