diff --git "a/source/_posts/\351\230\266\346\256\2653\345\255\246\344\271\240\346\200\273\347\273\223-\347\237\263\345\256\266\350\252\211.md" "b/source/_posts/\351\230\266\346\256\2653\345\255\246\344\271\240\346\200\273\347\273\223-\347\237\263\345\256\266\350\252\211.md" new file mode 100644 index 00000000000..7e743f9e725 --- /dev/null +++ "b/source/_posts/\351\230\266\346\256\2653\345\255\246\344\271\240\346\200\273\347\273\223-\347\237\263\345\256\266\350\252\211.md" @@ -0,0 +1,52 @@ +--- +title: 阶段3学习总结-石家誉 +date: 2025-11-09 20:28:52 +categories: 2025 秋冬季开源操作系统训练营 +tags: + - author:muou000 + - repo:https://github.com/LearningOS/2025a-arceos-muou000 +--- +## 实验总结 + +### 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,不太关注这种问题)。 + +离训练营结束还有一个多月,希望可以解决这些问题,继续学习,拿下通过学员证书,尽量争取一下优秀学员证书。 \ No newline at end of file