第一阶段
rustlings
19号开始,把之前写过的rustlings合并,24号把补充的私货题目写完。
对rust的一些认识
函数式思想
使用中用到函数式思想最多的是迭代器。不同于cpp的迭代器,rust的迭代器更“函数式“一点。比如对迭代器的修饰、map、collect等都很方便。根据the book,rust的闭包抽象成本比较低,“零成本”。
外部符号与二进制文件
补充题中的与Cargo.toml等的联动及外部函数、不混淆函数名宏的使用挺扩展我的认知的。rust提供的相当方便的core的宏(#[repr(c)]等)来控制二进制文件的形式。
所有权和生命周期
之前一直有些不理解,但是看到了一句话“所有权是释放对象的责任”,感觉懂了一点。
rust的宏
很多功能,很黑魔法。翻了下宏的小册子,是在AST上替换的,很有趣,期待看到更多它的功能。
其他材料
- 看了下rCore的发展历史。
- riscv特权寄存器的文档。
- 示例文档中一位学长提到的《深入理解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是最初震撼,可惜没有实验,现在有些细节模糊了,还是多做总结。
总结
- 从代码中得到方法。在实现spawn中,仿照fork和exec的实现来照猫画虎,捏了个spawn(id)->tcb来,感触挺大,代码是详细的准确的教材。
- 曳光弹。之前看《程序员修炼之道》时看到的概念,是指开发时优先穿透各个层次直接看到效果。我觉得看代码也可以用这种方式快速把握具体的流程,由功能到达自己熟悉的代码结构。来快速认识代码功能。
- 互操作。灌了很多汇编、二进制、和rust代码的联动。二进制文件的布局、符号等,原来看csapp了解的悬空的“二进制文件”逐渐有了些实际的感觉。