diff --git "a/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\270\211\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\270\211\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" new file mode 100644 index 0000000000..1b946a0bb2 --- /dev/null +++ "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\270\211\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" @@ -0,0 +1,28 @@ +--- +title: 2024秋冬开源操作系统训练营第三阶段总结-chy669086 +date: 2024-11-29 20:08:07 +categories: + - 第三阶段总结报告 +tags: + - author:chy669086 +--- + +也是很高兴能进入三阶段学习。三阶段让我对操作系统的理解更进一步,通过课后的作业,我也学到了不少知识。 + +## 个人收获 + +- 学会了操作系统对设备的挂载 +- 了解了 unikernel 到宏内核的转化 +- 对操作系统内存分配的了解更进一步 +- 通过查漏补缺对上一阶段掌握不熟的知识进行了复习 + +通过阅读 arceos 的源代码和课后练习,我的程序编写能力也得到了锻炼,让我对操作系统有了全新的认识。 + +## 未来展望 + +通过这个阶段的学习,我有以下打算: + +- 四阶段希望进行宏内核的学习 +- 在寒假时间自己实现一个轻量级的 unikernel 内核,并通过组件化的形式将他变成宏内核 + +最后,感谢老师的悉心教导,也感谢平台提供的学习机会,让我有了深入学习操作系统的机会。 \ No newline at end of file diff --git "a/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" new file mode 100644 index 0000000000..7208459f00 --- /dev/null +++ "b/source/_posts/2024\347\247\213\345\206\254\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\345\233\233\351\230\266\346\256\265\346\200\273\347\273\223-chy669086.md" @@ -0,0 +1,45 @@ +--- +title: 2024秋冬开源操作系统训练营第四阶段总结-chy669086 +date: 2024-12-19 17:32:46 +categories: + - 第四阶段总结报告 +tags: + - author:chy669086 +--- + + +参与方向:宏内核,posix 接口相关。 + +我在四阶段中编写的是 futex 有关的代码。 + +## 设计思路 + +暂时请求了五个 os 需要实现的接口,分别是 + +- `sched_yield` 退出当前的任务,不放回调度队列。 +- `translate_vaddr` 将当前任务的虚拟地址转换成操作系统可以访问的地址 +- `current_task` 取得当前任务 +- `current_prosess_id` 取得进程 id +- `wake` 传入一个 `FutexQ` 类型,唤醒任务(提供了 `get_task` 函数取得任务) + +`FutexQ` 是存放任务的重要类型,内有 `key` `bitset` `task` 三个字段,其中 `key` 和 `bitset` 是用来唤醒任务的重要字段。 + +`FutexKey` 是一个枚举,现在只实现了一个 `Private`,`Shared` 暂时没有开发的思路。 + +任务等待队列存储在 `FutexQueues` 中,通过一个 `futex` 的唯一 key 通过哈希变换后放入或唤醒。 + +现在实现的调用有:`FUTEX_WAIT` `FUTEX_WAKE` `FUTEX_REQUEUE` `FUTEX_CMP_REQUEUE` `FUTEX_WAKE_OP` 以及对应的 bitset 版本 + +因为三阶段提供的宏内核中没有合适的线程实现,二阶短的项目不知道什么原因不能编译 `link-me` 的代码,所以我直接把整个模块删除 `linkme` 后移植到了阶段二的仓库,并编写测试通过。 + +## 收获 + +说实话还是不是很擅长编写 no_std 的代码,所以我还是依赖了很多外部库。 + +虽然没有通过最初的设想去适配到任何一个系统里去(直接移植还是太不松耦合了),但是我也花了很多时间去尝试适配,其中阶段二的项目仓库是最接近完成的一个,结果编译错误了,经过测试发现把 `futex::syscall::sys_futex` 函数调用去掉就可以通过编译,一时间不知道从何改起。转到 `arceos` 适配的时候,在被迫阅读了大量源码之后,发现提供的宏内核示例压根没有创建线程的系统调用,自己写了半天并没有写出来,所以又放弃了。 + +虽然写的挺差的,而且最近也到学校的期末周了,确实有没有太多时间写这个项目了,但是通过这次 posix 接口的编写,我还是学会了不少东西。 + +## 总结 + +从训练营开始到现在也过去 12 周了,看着自己从对操作系统毫无概念一步步到现在还是很感慨的。感谢老师的辛勤付出,感谢训练营能给我一个这样的平台。