前言
因为之前学C++结识的好友群中发了这个训练营的报名链接,想着正好OS还没有学就想着报名参加了:)。参加本次训练营之前只有csapp的计算机体系结构这一相关经验,对于Rust和RISC-V一无所知。编程能力上,主要是C++的服务器开发,做过几个分布式微服务项目,国外的一些公开课lab(CS144/CS106B/CS50等)。
总体来说第一阶段学习过程还是有点痛苦的,毕竟Rust学习曲线比较陡峭,不过也有许多特性能与C++等语言联系起来,帮助理解。在报名之后就开始翻阅先前训练营的资料开始自学Rust了,总体还是顺利的
一些链接🔗
- Rust学习记录:https://github.com/Andrew211vibe/Rust-Course-Note
- rCore-Tutorial学习实现:https://github.com/Andrew211vibe/rCore-Lab
- Writing an OS in Rust实现:https://github.com/Andrew211vibe/blog_os_impl.git
- 个人学习笔记:2024开源操作系统训练营 (notion.site)
第一阶段总结
第一阶段主要集中于Rust基础语法的学习,并完成rustlings练习题,其次是进行RISC-V指令集的学习
- Rust因为是第一次上手,编码熟练度还不是很高,对于一些编码更高效的方式应用不熟练,算法和数据结构的实现遇到的磕绊较多
- RISC-V基本指令比较好理解,实际编写还是差一些,能反应指令的行为,一些寄存器记不住
- 计组和编译原理知识比较薄弱
Rust
Rust学习过程主要参考阅读了《Rust圣经》、《Rust by Example》、和Rust之旅
之后的时间主要是对《Rust圣经》中的进阶部分和基础部分进行阅读笔记并复习,基础部分难点主要集中在所有权和特征这两个知识点上,对于生命周期以及包和模块的讨论并不是特别深入。进阶部分都难哈哈哈哈,迭代器和智能指针还算比较好理解些,对于迭代器加闭包实现的函数式编程每次都让我觉得很强大,Cell和RefCell提供的内部可变性加上智能指针也给程序提供了很大的灵活性的前提下保证了一定的安全性。生命周期的使用也是一大难点了。之后还有unsafe Rust的使用以及宏编程(对比C/C++的难的多但功能性也更强大)
rustlings的基础语法部分不算特别难,不熟练的查一查就能写得出来。难点集中在test和algorithm章节,主要是test后半部分,一些环境变量的设置,以及rust实现数据结构算法所用到的unsafe rust和智能指针的操作。
之后尝试阅读Learning Rust With Entirely Too Many Linked Lists,和用Rust实现一些算法和数据结构来巩固,多敲一些代码提高熟练度,多查文档。
RISC-V学习
这部分知识学习首先是阅读了《计算机组成于设计:RISC-V版》的前两个章节,对RISC-V的基本指令和指令格式有一个了解,以及RISC-V的设计和计算机体系结构的8个伟大思想之间的联系。之前阅读csapp并完成lab实验,有些x86_64的经验,对于一些基本指令和作用的理解还算轻松。难点集中在原子指令上。之后主要阅读了《RISC-V手册》,主要重点是第十章的特权架构,涉及之后rCore的特权级切换操作以及虚拟内存的实现(SV39多级页表)
学习后可以看出RISC-V指令集的强大和简单,和x86_64不同的理念。六种基本指令格式,等长指令就能搞定一切,精妙的设计(就是有时候脑子转不过来)
查缺补漏
阅读操作系统导论,目前还在虚拟化部分,然后观看导学阶段的OS课录播,补足操作系统的理论知识和概念