写在前面
我从稍微理解了我的专业之后就一直都很崇拜 Linus,这位堪称传奇的软件工程师在 1991 年 8 月 25 日——他 21 岁时就在网络上发布了 Linux 内核的源代码。现在是 2024 年 4 月 23 日,我也是 21 岁,追逐吗,梦想吗,我也想像他一样写出这样神奇的代码,33 年后的今天,我也要开始了,Linus。
欢迎交流;-)
这次参加训练营,也算是二周目,对很多内容都已经轻车熟路。在上次的训练营之中,我并没有完成三阶段的学习,多少有当时实习没有时间进行分配和对更加复杂的操作系统内核架构没有大概了解的原因。
所以在实习结束之后的暑假,我也没有闲着,主要都在学习 Rust 之前没有接触过的内容还有理解 Linux 操作系统内核上了。成果大概就是把《Rust 程序设计第二版》这本书看完了,加上初探了一下 Rust 的异步框架、对 Linux 0.12 这个老版本的内核代码进行了一些阅读。
希望这次可以成功冲击第四阶段,加油!
- github ID: destinyFvcker
- 邮箱:destinyfunk@163.com
- 微信号:destinyfvcker
内存管理
在二周目的学习之中,我重点学习了 rCore 内存模块关于内存管理的这部分内容,这部分内容在一周目里面可是给我吃了不少苦头,从 ch3 到 ch4 的难度跨度确实有些大,并且 ch4 之中的内容基本上就是后续内容的基石。这部分内容还是看得越懂越好,我越看越觉得当初这些人是怎么想出来这个方案来实现内存地址空间管理的,而且这还是没有实现页置换(顺带一提,这是 Linux 当年的大杀器)和cow。说实话这部分的内容 Linus 当年也是调试到吐。
从物理地址、虚拟地址和物理页号、虚拟页号的初级表示到页目录项、页表对内存的统一管理再到MemoryArea
和MemorySet
实现对一个进程的内存地址空间的高级表示,确实很精彩。
更加高级的内容
后面的内容,包括文件系统、进程间通信和 I/O 重定向、和并发的复杂性实际上更上一层楼,所以 rcore 可以去繁从简,用几篇文档的篇幅就带我们对这些操作系统的重要抽象有一个大概的概念也实在不容易。就实验要完成的测例来说,感觉也是简化的副作用吧,有点“面向结果编程”的感觉,这个时候就要考验程序员对自己的要求了:只通过测例完全不够,还需要理解这部分的内容。
其实还想要写很多,但是“我有一个对这个命题的十分美妙的证明,这里空白太小,写不下。”,哈哈,期待第三阶段和 ArceOS 擦出的火花。