感谢老师和助教们贡献了这么好的课程,可以看到付出的努力和心血,所以我也非常重视这一次的训练营。通过这次的训练营,不仅让我在短时间内快速学习使用了Rust,并乘热打铁学习实践了我一直想掌握的OS知识。在阅读文档的时候详略有当,也给出了很多扩展性的知识和难题,不过个人水平太菜并没有深入。只经过短短两周多的学习,已经基本能在脑海中对操作系统有一个较为清晰的概念了。
2023开源操作系统训练营第二阶段总结报告-hercule-karuha.md
2023rCore训练营第二阶段总结
起因
因为不满足于学校的课程教学,想写一些稍微硬核一些的作业,在2023年5月左右的时候在国内外各大操作系统公开课中挑选了一番,最终是选择了rCore,大概有下面这些选择的理由。
- 使用rust语言,对于当时刚学了一点rust感受到其优越性的我很有吸引力。
- RISC-V架构,能减少一些x64的繁琐带来的困扰。
- 支持国内老师对于本科课程的改革。
在暑假期间自学了一番并在秋冬季的训练营中靠着多学了两个月的优势在只有两周时间学习的同学们中获得了第一名))
下面简单来说一下rCore的各个实验。
ch3
ch3的任务是实现获取taskinfo的syscall,总体来说还是比较简单的。
但是实现过程中遇到了一些问题,程序运行到最后卡住了无法结束,稍微有点棘手。(时间久远没有截图)
最后发现是由于内存出现了问题,直接使用桶计数的话内存会炸掉。
解决方法稍微有些投机取巧,由于ch3只有5个系统调用就分别映射到一个数组的0,1,2,3,4就好了
1 | match syscall_id { |
不过秋冬季看起来没有人和我遇到一样的问题,我自己重新再运行也没有什么问题,不知道当时是怎么回事。
ch4
ch4也稍微有些投机取巧了,我单独在MemorySet
中添加了一个字段用来实现mmap,像是这样:
1 | pub struct MemorySet { |
阅读代码理解SV39稍稍费了一些功夫,不过收获还是挺大的。
还有重写sys_task_info
和sys_get_time
,选择自己实现了一个函数来进行到物理地址的转换
1 | pub fn translate_ptr(token: usize, ptr: *const T) -> *mut T |
图简单没有使用官方提供的translated_byte_buffer
。
ch5
ch5感觉上还是比较简单的,好像测试用例也不是很强的样子,听说有人没有实现都能过,不过应该会在线上测试被拦下来吧。
ch6
感觉按部就班地调用框架提供的函数就行,不算很难。
ch8
据选择做xv6的小伙伴说这是和xv6差别最大的而一个实验,确实也让我稍微费了一番功夫。
回头去看自己写的代码真是又臭又长啊……….
ch8的作业是实现银行家算法,在lock和unlock之前判断是否会造成死锁。
值得一提的点大概就是sys_semaphore_create
函数只会在主线程中调用,因为银行家算法需要提前获知线程总的资源申请量,我的实现里面单独处理了线程id为0的情况,其他的还是比较简单的,就是几个向量加加减减的问题。
调试
使用gdb调试貌似很麻烦,源代码貌似不能很好地同步显示,不过也不怎么影响做完,用打log的方式解决了。
但是这让我的代码里面多了很多类似这样的东西:
1 | debug!( |
显得很臃肿。不过能解决问题就好。
总体感受
rCore教程的叙事方式很有意思,从历史的角度来添加一个一个模块,看书的同时阅读源代码好像自己真的是当时的操作系统开发者,面对着一个一个的问题,提出各种解决方案。难度的曲线也比较平缓,作为一本操作系统入门的教材来说是非常非常优秀的。
缺点大概就是有点过于简单了(bushi)。在看ch5的时候还试着去看了一下rcore中关于多核的部分不过因为资料太少也搁置了(摸了)。
rcore的竞品(不知道这个词合适不合适),chcore有关于多核的部分,如果有同学看到这里并对多核感兴趣可以去看看。(虽然我摸了)。
感谢清华的老师和助教为中国计算机本科教学做出的贡献。国内外的计算机本科教育差距很大不过仍有老师和同学在努力弥补着。感谢他们做出的努力。(什么时候我们学校能引进啊)
资源整理
外链资源
周报2023-02
2023-02 OS小组的会议纪要
编译Linux内核开启Rust语言支持
2022开源操作系统训练营第一阶段总结-my-vegetable-has-exploded
感谢老师和助教们贡献了这么好的课程。回顾一下这段时间的学习历程,首先是感谢课程提供的良好的资源,推荐的资料阅读大有脾益,比如那本risv手册易懂又不失深刻。课程的lab结构是一点点增加模块拓展而来的,上手难度平缓,对简易操作系统实现的核心思想有了更进一步的了解。
之前上杨力祥老师的操作系统课程,杨老师给我影响最深刻的一句话是要能够把系统结构画图花出来。 在阅读文档和代码过程中,感觉能把代码结构中的类之间的关联与作用机制、结构和内存磁盘等设备的作用原理搞清楚,能在脑袋里面建立一个大致的相互作用图景,对于理解操作系统非常有益。
周报2023-01
2023-01 OS小组会议纪要
欢迎参加Rust_For_Linux研究学习小组
不同操作系统内核可重用的Rust Crate设计与实现
Rust 是一种“多范式安全系统编程语言”,在开源领域呈现出滚雪球般的势头不断壮大。当前已经出现了多种基于Rust的实验型操作系统项目,而且也已经出现在主流的操作系统中。2022年12月12日,Linux 6.1 正式发布。Linux 6.1 的一个主要升级是把已经开发近一年多的Rust for Linux子系统加入主线,这是对 Rust 在Linux内核上的重要突破。今后将可以使用Rust开发操作系统内核模块,并用于不同操作系统中,而Rust化的实时优化Linux内核和Rust RTOS将成为重要新技术方向。
本课程计划定期讨论和研究 “不同操作系统内核可重用的Rust Crate设计与实现” ,并基于Linux内核和Rust RTOS,着重开展以下三个研究子方向的技术工作:
2022开源操作系统训练营第一阶段总结-jiaxianhua
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