0%

项目基础阶段通过总结概述

项目基础阶段通过总结概述

春季营因为忙于实验室项目没有完成训练营全部内容,秋季一定要弥补遗憾,通过训练营,善始善终。

Rust 编程阶段

这个阶段时间比较短,自己只是匆匆过了遍语法基础就去刷rustlings,之后有时间还要常复习。
没接触系统内核类项目之前,对rust语言没有太深感觉,只知道它比c++多些安全检查以及借用等特性,但是当真正在实战中用到这些特性才发现其厉害之处,尤其是编译阶段检测,这个会让开发者避开很多写代码时难以发现的错误(内存泄漏),以及锁的诸多包装,所有权控制等等。

OS 设计与实现

  1. ch3就是熟悉一下相关接口,会调用,加个系统syscall计数就行
  2. ch4 难点在于检查是否有未映射的页以及页对齐问题
  3. ch5 Systrace跨页遍历,需要特殊处理。另外就是记得引用模块要注意是否public,否则需要自己写一个让外部访问的接口函数。
  4. ch6 文件系统处理,最难的一个,需要自己补充很多文件系统的调用,比如inode相关方法,文件链接建立。
  5. ch8 死锁检测,实在太繁琐了这个接口层层调用。

组件化操作系统

我在写我们实验室项目 AlloyStack 时曾研究过arceos和ruxos,对模块化操作系统还是比较熟悉的。不过自己从裸机实现hello world到unikernel组件层层编译实现再到支持虚拟化(unikernel+guestkernel)。过一遍这个流程还是很有收获的,形成了更加清晰的组件化操作系统开发思路(可惜实验都是打打补丁,实现部分接口,主要还是看ppt一步步实现)。

不过 Hypervisor实现在同一进程下还要在unikernel和guestkernel反复地址空间切换,感觉很影响性能,如果做到能统一编址(实现一个统一编址器)感觉会有很大性能提升。

总结

自我感觉操作系统内核之所以难写,是因为庞杂的系统调用以及层层嵌套的接口,要想在里面加些什么功能先要把调用逻辑链搞清楚,明白已知哪些信息,要用这些信息和手动实现算法组合出一个新模块,再像插插座一样把模块嵌入到这个内核当中。真的需要极大的耐心,幸运的是在agent时代,利用ai分析调用很方便,明确需求再让ai辅助去实现,轻松了不少,真的佩服那些真正一行行手搓内核的前辈,他们是计算机系统伟大的奠基人。