0%

阶段3学习总结-石家誉

实验总结

UniKernel

实验1:print_with_color

在该实验中,我原来是在__print_impl中进行实现(因为不懂宏),后来在实验二中输出pass后测评脚本没找到support_hashmap pass,问ai是因为我的实现在行末有个换行导致没识别上,最后还是选择修改格式化输出宏。

实验2: support_hashmap

axstd中实现了collections并添加了HashMap。第一次的时候没有将原collections中的数据结构导入到新的collections中,卡了一小段时间。
最开始是使用递归形式写的,没有注意数据量,运行一半卡死了,最后修改成循环写法,修改后才顺利通过。

实验3:alt_alloc

自感难度不大。

实验4:ramfs_rename

在修改dependencies卡了半天,一直没有调用自己实际写的(对rust的依赖之类的还是不太熟悉,经常不知道该怎么导入)。最开始把问题想太简单了,后续修改才真正pass。

Monolithic Kernel

实验5:sys_mmap

最开始直接使用sys_read将内容写入用户内存空间的地址,没想到内核态没有实现处理这种缺页问题,看着Page Fault一脸懵逼,排查半天发现在read这一行,后续用ai排查才知道是这个原因,最后先写入缓冲区,再将缓冲区写入用户地址空间。

page_fault

自己写的时候开了个头就没想法了。(可能是因为答案就在边上)

Hypervisor

实验6:simple_hv

本来以为会很难,看视频的时候云里雾里的,实际写起来发现还好。

个人总结

自我感觉第三阶段的任务要比第二阶段简单一些,可能是第二阶段刚开始接触kernel,加上代码量比较大,当时一个实验要卡好久,第三阶段感觉主要是底部实现已经比较完善了,所以好写一些。

经过这两个阶段对kernel的学习,我感觉我在文件系统方面还是有一点云里雾里,可能是第二阶段学习的时候比较仓促,不太扎实。同时rust编程方面也不算非常熟悉,看懂没有太大的问题,但是实际上手写总是因为语法问题而有卡顿,同时在包,模块的引用,cargo.toml的编写修改还是不太熟悉(以前就简单学过c和cpp,不太关注这种问题)。

离训练营结束还有一个多月,希望可以解决这些问题,继续学习,拿下通过学员证书,尽量争取一下优秀学员证书。