-
Notifications
You must be signed in to change notification settings - Fork 387
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #477 from J1ngxuanWei/master
魏靖轩-项目6第三阶段总结
- Loading branch information
Showing
1 changed file
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
--- | ||
title: 2024春季开源操作系统训练营第二阶段总结报告-魏靖轩 | ||
date: 2024-06-29 21:10:58 | ||
categories: | ||
- 2024春夏季开源操作系统训练营 | ||
tags: | ||
- author:J1ngxuanWei | ||
- repo:https://github.com/J1ngxuanWei/rCore-OS-2024Summer | ||
--- | ||
|
||
|
||
# 第三阶段总结 | ||
|
||
第三阶段我参加的是向勇老师的项目6:异步操作系统的实现。 | ||
|
||
总的来说,6周的项目实训过程中,读了很多代码和文档,做了很多事情,学到了很多的东西。 | ||
|
||
在参加训练营之前,我对异步的了解其实也就是局限于说我们IO要异步,让出控制权,仅此而已。 | ||
|
||
但是在训练营中,我真正的接触到了何谓真正的异步,以及如何去实现它,受益匪浅。 | ||
|
||
同时我也将ArceOS的宏内核版本,将其进行了异步化,使整个内核都使用rust的async和await异步编程实现。 | ||
|
||
同时它也是无栈协程的切换方式,且对协程采用多栈复用的抢占。 | ||
|
||
# 第三阶段成果 | ||
|
||
在成果上,实现了对ArceOS家族系的Starry的异步化改造,使用async和await等rust提供的异步编程编写内核,已实现核心主体框架;同时对通用操作系统内核下协程的不合理性做调整,实现内核栈池,通过少量堆栈的复用实现对诸如键盘输入等高优先协程处理的抢占机制。 | ||
|
||
为后来者留下的东西,首先是代码产出:有充足的代码仓库参考,我将各个小步骤的代码都保存了下来。从原始版本 -> task实现 -> 同步无栈协程与显式执行流 -> 异步无栈协程 -> 多栈复用版本。 | ||
|
||
同时留下了若干个人的文档心得:考虑到训练营很多同学对从同步到异步的过程一头雾水,其实我本人最开始也是这样的,我个人认为更好的办法是看别人的代码,看看别人是怎么实现了,跟着别人学,先模仿,再谈能不能超越,因此留下文档如下: | ||
|
||
1. 我个人参考的两个内核的阅读和解析心得(去年OS内核唯二的异步内核)。链接:https://www.jensei.cn/?p=217 | ||
2. 以Starry为基准的,整个改造过程是如何实现的,包含了从一个ArceOS宏内核(或者说rCore)如何一步步改为无栈异步内核。链接:https://www.jensenwei.cn/?p=221 | ||
3. 我个人对其中一些机制的理解,比如async+await,poll等。链接:https://www.jensenwei.cn/?p=220 | ||
|
||
当然,更多的中间过程结果在项目六,向老师的文档中有所记录,这里不再列出。 | ||
|
||
# 第三阶段感受和体会 | ||
|
||
总的来说,第三阶段也算有一定的产出,这么长时间也算没白干,身为一个寄算机人,一切都要落实到代码产出上,光写文档吹牛逼不是一个合格的程序猿。 | ||
|
||
对我这个异步小白来说,理解和实现异步,再到利用异步的过程,是比较复杂且困难的,而且所面对的是如此大的一个内核,其藕断丝连的耦合性会对改造造成相当大的麻烦。尤其是我们对整个调度和进程管理的部分进行一次彻底的重构,这种挑战相当之大。 | ||
|
||
但是挑战之大,也是挺过来了,在改造整体框架下,大概前前后后推倒重来了十多次,这也是为什么我那么注重保存每一个小步骤的代码。 | ||
|
||
总的来说,训练营中我给自己列了一个很高的挑战,也尽力的去完成它了,最后的结果我个人是非常满意的,达到了自己对自己的要求。 | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|