阶段1
21年冬季就接触过rust,但是后续没有继续学,直到今年5月份劳动节假期看到rust嵌入式群里活跃的气氛才逐渐入门,这次rustlings做第三次了,这次比之前多了算法题环节。
一直有人调侃用rust写个链表,这次真就写了一次链表,rust的裸指针乱飞。
阶段2
ch1-3
深刻理解了操作系统的上下文切换,从最开始内核创建用户态程序,到用户态发起系统调用在返回的整个流程。
ch4
工作第二年接触过内存分配的代码一直不是很明白,尤其是在触发中断时,页表是怎么从进程空间切换到内核空间,以前只是粗略的了解Linux会将内核对应的内存映射到进程空间,在这个实验中又学到“双页表这个概念”,比较两种的优劣
ch5
以前对进程创建的了解仅限于fork这个系统调用,对其他进程相关的系统调用知之甚少,这次在参考fork、exec两个系统调用实现spwan过程中,理解了为什么
ch6
这个实验中学习了文件系统在物理存储设备的布局方式,不过,该文件系统较为简单,应该是类似ramdisk的实现,并未考虑磨损均衡,实验中的部分实现也都可以偷懒。
实验中最难的部分就是文件相关的那么多结构体,部分是方便操作系统进行管理的,部分是真实存在于块设备中的索引结构以及文件组织结构。
在实验代码中也学到了rust trait对象的使用方式,Linux里一切皆文件的概念有了真切的感受。
ch7
在过去写代码时,对进程间通信没有明确概念,尤其是敲命令行时,并没有想过管道符的实现,操作系统借助文件的概念,通过标准输入输出将管道符的多个程序连接到一起,在流水线处理某一任务时又方便又能充分发挥机器性能。
ch8
到最后六小时才开始做这个,多亏群里好心人指点,才能赶在最后时间完成,不得不承认rust的静态分析真的不错,哪里变红改哪里。
感想
在毕业两年后有机会学习清华的操作系统课程倍感荣幸,补上了我本科操作系统选修未开课的遗憾,也补上了我工作两年中知识欠缺的地方。
阶段三我来了!!!