0%

前三阶段总结-letttop

一阶段

总结

第一阶段主要是rustling,只需要应用Rust本身的设计理念来满足测试要求。整体难度不大,理解起来也比较顺利。

难点

相比于语言本身,算法部分的挑战更大。虽然按照要求可以找到相应算法的描述,照着实现基本能完成任务,但有两个方面:

  1. 同类算法的取舍:平均复杂度同为O(n)的两种算法,在同一实际场景中的表现不同,我并不了解这些算法的最佳适用区间。
  2. 不同实现的差异:同一个算法,采用不同的数据结构实现,所需的时间和空间开销也会不同。

    二阶段

    总结

    第二阶段主要是对操作系统的认识。每个实验大致分为三步:
  3. 阅读相关材料,了解操作系统的相关知识;
  4. 梳理实验中涉及的类与函数的层级结构及其功能;
  5. 编写实验代码,完成具体实现。
    整体过程也比较顺利。

    难点

    二阶段对文件相关内容印象最深,文件系统这个从纯指针一步一步抽象到文件的过程,通过多个层级的抽象来提供简单的交互,通过各种锁和标记来管理权限和控制并发,让我对C的便利性、内存管理有了更深刻的理解。

    三阶段

    总结

    三阶段有些难度,主要侧重于基于unikernel的模块化内核,不像二阶段那样深入去看代码,这就导致有些实验,虽然我知道应该怎么做,但是不知道我需要的函数在哪里,这也跟vscode工具不熟练有关;有的实验,我虽然知道怎么做,但是实现的位置不对,导致与其他实验冲突。

    难点

  6. 在rename里,由于入口时fs.root.rename,而在dirnode里只能通过parent查找父节点,通过children查找子节点,造成了根节点的识别与文件查找的差异,之后再看到rename的标注,仅能在同一mountpoint的文件系统内使用,才明白实验的ramfs就是在/tmp下,就是这么设计的。
  7. 挑战题没有过线,tlsf实现后达到162。本来的计划是先实现一次tlsf,再优化。但是tlsf实现的工程量超出预期,本身的代码量就有很多,还有很多debug用的log和test,应该是我抽象的层级不够。

    未尽

  8. 找到更好的代码分析方法,更好地梳理函数调用
  9. 使用debug mode,目前都是通过log调试
  10. 完成挑战题,重新设计一个内存分配方法
  11. 最后两个视频未完成