0%

2024春夏季开源操作系统训练营第三阶段项目六总结报告-施诺晖

第三阶段总结报告

没想到为期40天的第三阶段这么快就结束了。现在回想一下这四十天几乎每天都在准备考试和参加训练营两个任务之间时间片轮转。但是很庆幸我还是走到了训练营的尾声。

在第三阶段的项目六:基于协程异步机制的操作系统/驱动中,我了解到了我之前只是略有耳闻的异步,收获到了很多新知识。

首先我先阅读了《200行代码讲透RUST FUTURES》。在这里我又接触到了许多的新概念:绿色线程、Future、执行器、唤醒器。。。现在回想,看的过程实在是非常折磨,不仅要重新回顾本就不扎实的Rust语法,还要把多线程多协程带来的混乱执行流捋清楚。但是当我把它看完了之后,我才豁然开朗,我才明白Executor、Waker、Reactor、Future是如何协同工作以提高计算机的使用效率的。这为我后续阅读Embassy以及完成最终的成果打下了坚实的理论基础。

在《200行代码讲透RUST FUTURES》提供的理论知识的加持下,我进一步阅读了《Embassy Book》。当回到我最熟悉的领域时,总是让人心旷神怡。在阅读《Embassy Book》的全过程中,我并没有遇到太多的障碍(可能这就是专业对口的优势吧),但是我却无时无刻不在感叹Embassy作者对Rust语言的了解程度、他对丑陋的硬件近乎完美的封装以及Embassy向用户提供的友好接口。这让我觉得Embassy好像并不是一个嵌入式运行时库,而更像是一个开销更低的操作系统。

接下来就到了我觉得很有意义的部分。在这一小阶段,我对Embassy源码进行了逐步的调试,尝试理解Embassy的执行流。在Embassy中,有许多宏。Embassy的作者通过这些宏能够暴露给使用者干净、高效的接口,但是这对于我这种初学Rust,并且想理解Embassy执行流的人而言无疑是令人厌烦的。因为它隐藏了太多协程的细节(Rust语法对我而言也是很大的问题),所以我只能从头开始对Embassy源码进行调试。通过调试工具的帮助,我揭开了Embassy神秘的面纱:从创建执行器,到创建协程池;从创建主任务,到协程的不断循环执行。在此时我才真正领悟了Embassy的强大之处。

终于到了coding部分。我与我的队友一起分工合作,成功使用Rust重构了uC/OS II的线程调度模块,并在uC/OS II的线程支持下应用了Embassy的协程机制。这使得Embassy的执行器对MCU不在是独占的,而是可以基于线程的调度算法进行轮转。并且在线程的支持下实现协程,进一步提高了我们的系统的并发度。而且有了线程的调度机制,我们也可以实现不同线程的协程在任意点切换。

现在回想我在阶段三中完成的任务我才发现这些内容是多么地有意义。我了解到了Rust中的协程的实现机制,也了解到了Rust协程的一个实际应用——Embassy,最终我基于这些理论知识成功将Rust的协程使用起来,让我基本了解了一个能有效提高计算机系统性能的“秘籍“。

三阶段固然有意义,但是如果没有他人的帮助,我绝对坚持不到现在。

首先需要感谢我的队友。从三阶段一开始,我们就一直在交流关于Rust Future的各种细节。而到了调试Embassy的部分以及后面的coding,我们也都紧密配合。在调试Embassy的部分,如果没有他的学习成果,我很有可能就会被Embassy高级的Rust语法劝退;在coding部分,如果没有我们共同的努力,我们肯定不会在这么短的时间内使用一个我们都不熟悉的Rust重构一个操作系统的灵魂——线程调度模块,并且在这个基础上使用Embassy的协程机制。

最后还需要感谢向勇老师。在向勇老师的悉心指导下,我和我的队友明确了我们将来的目标。我们希望在堆栈池的支持下,实现线程内部的协程抢占。并且在这个基础上进一步完善我们在阶段三产出的阶段性成果,并将其应用在我们的四轴飞行器中。

再次回顾我的阶段三全过程,虽然我做事情不多,但是我仍收获颇丰。我相信不紧不慢依旧能走向未来。希望我今后也能保持着对异步、对Rust、对OS的满腔热爱,笃行不辍,履践致远。