0%

2024开源操作系统训练营第二阶段总结-陈载熺

第一阶段

rustlings

19号开始,把之前写过的rustlings合并,24号把补充的私货题目写完。

对rust的一些认识

函数式思想

使用中用到函数式思想最多的是迭代器。不同于cpp的迭代器,rust的迭代器更“函数式“一点。比如对迭代器的修饰、map、collect等都很方便。根据the book,rust的闭包抽象成本比较低,“零成本”。

外部符号与二进制文件

补充题中的与Cargo.toml等的联动及外部函数、不混淆函数名宏的使用挺扩展我的认知的。rust提供的相当方便的core的宏(#[repr(c)]等)来控制二进制文件的形式。

所有权和生命周期

之前一直有些不理解,但是看到了一句话“所有权是释放对象的责任”,感觉懂了一点。

rust的宏

很多功能,很黑魔法。翻了下宏的小册子,是在AST上替换的,很有趣,期待看到更多它的功能。

其他材料

  1. 看了下rCore的发展历史。
  2. riscv特权寄存器的文档。
  3. 示例文档中一位学长提到的《深入理解linux内核》中的i386分段部分

总结

初窥门径。感觉rust有很多简洁高效的地方,期待进一步的学习。

第二阶段

实验时间

放完51假期,7号开始写lab,属于是开始的比较迟(都看到有答疑了,没有去看),超了ddl。但是想学不嫌晚,还是写份总结。

印象

总共的5个实验中我印象最深的是fs的实验,让我分开来了Data,Inode,DiskInode,OSInode以及各种数据位图之间的区别,diskinode是存放在硬盘上的索引,inode根据diskinode索引值存在于vfs中的对象,在VFS中本身只持有几个属性。做的时候改了diskInode,加了link,其中对块缓存的读取和写入都是传入函数闭包实现的,很有趣。

还想说下mm的实验,双页表的实现使用恒等映射,将高地址的一定段映射到各个进程及os相同的逻辑地址。这样在切换页表进入内核时,可以得到一个过渡区域来处理上下文。

当然,刚接触ch1和ch2时,读linkld是最初震撼,可惜没有实验,现在有些细节模糊了,还是多做总结。

总结

  1. 从代码中得到方法。在实现spawn中,仿照fork和exec的实现来照猫画虎,捏了个spawn(id)->tcb来,感触挺大,代码是详细的准确的教材。
  2. 曳光弹。之前看《程序员修炼之道》时看到的概念,是指开发时优先穿透各个层次直接看到效果。我觉得看代码也可以用这种方式快速把握具体的流程,由功能到达自己熟悉的代码结构。来快速认识代码功能。
  3. 互操作。灌了很多汇编、二进制、和rust代码的联动。二进制文件的布局、符号等,原来看csapp了解的悬空的“二进制文件”逐渐有了些实际的感觉。