一阶段
总结
第一阶段主要是rustling,只需要应用Rust本身的设计理念来满足测试要求。整体难度不大,理解起来也比较顺利。
难点
相比于语言本身,算法部分的挑战更大。虽然按照要求可以找到相应算法的描述,照着实现基本能完成任务,但有两个方面:
- 同类算法的取舍:平均复杂度同为O(n)的两种算法,在同一实际场景中的表现不同,我并不了解这些算法的最佳适用区间。
- 不同实现的差异:同一个算法,采用不同的数据结构实现,所需的时间和空间开销也会不同。
二阶段
总结
第二阶段主要是对操作系统的认识。每个实验大致分为三步: - 阅读相关材料,了解操作系统的相关知识;
- 梳理实验中涉及的类与函数的层级结构及其功能;
- 编写实验代码,完成具体实现。
整体过程也比较顺利。难点
二阶段对文件相关内容印象最深,文件系统这个从纯指针一步一步抽象到文件的过程,通过多个层级的抽象来提供简单的交互,通过各种锁和标记来管理权限和控制并发,让我对C的便利性、内存管理有了更深刻的理解。三阶段
总结
三阶段有些难度,主要侧重于基于unikernel的模块化内核,不像二阶段那样深入去看代码,这就导致有些实验,虽然我知道应该怎么做,但是不知道我需要的函数在哪里,这也跟vscode工具不熟练有关;有的实验,我虽然知道怎么做,但是实现的位置不对,导致与其他实验冲突。难点
- 在rename里,由于入口时fs.root.rename,而在dirnode里只能通过parent查找父节点,通过children查找子节点,造成了根节点的识别与文件查找的差异,之后再看到rename的标注,仅能在同一mountpoint的文件系统内使用,才明白实验的ramfs就是在/tmp下,就是这么设计的。
- 挑战题没有过线,tlsf实现后达到162。本来的计划是先实现一次tlsf,再优化。但是tlsf实现的工程量超出预期,本身的代码量就有很多,还有很多debug用的log和test,应该是我抽象的层级不够。
未尽
- 找到更好的代码分析方法,更好地梳理函数调用
- 使用debug mode,目前都是通过log调试
- 完成挑战题,重新设计一个内存分配方法
- 最后两个视频未完成