实验总结
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,不太关注这种问题)。
离训练营结束还有一个多月,希望可以解决这些问题,继续学习,拿下通过学员证书,尽量争取一下优秀学员证书。