-
Notifications
You must be signed in to change notification settings - Fork 7
执行器的新设计思路
Luo Jia edited this page Dec 28, 2021
·
2 revisions
以前是跳转到中断处理函数执行中断处理,现在可以试着用一种新的方法处理这些问题。
首先中断处理函数恢复上下文并切换到内核。内核陷入后,保存上下文,然后跳转到刚才恢复上下文的位置。也就是说,把内核看作是一个“函数”,这个函数返回了一个中断或者异常。处理这个中断或者异常,就可以完成中断处理的过程。
如果我们不断调用这个“函数”,它会不断生成中断和异常。这样这个“函数”就可以用一种编程语言的结构来描述了。
本次选用Rust语言的生成器完成这个过程。生成器还在nightly阶段尚未稳定,如果开发它在内核中的用途,有助于帮助Rust语法稳定。Rust的生成器有多种作用,一种作用是用于实现async/await的Future状态机树,其它的作用还有待探索。
生成器会不断让出值,就是中断和异常。生成器仍然可能返回,这个可能对应某种上下文销毁的退出机制。
生成器的约束很强,它将来可能包含一系列的Rust语法。也许会有一种比生成器要弱的约束也能完成这个处理过程,这个步骤有待后来的贡献者一起探索。
不足之处在于如果中断和异常产生的时候处理器位于M态,那么上下文切换的过程可能会被打断,这或许会损坏上下文结构体。
需要一种机制来补充和处理这个问题,这样才能形成完整的执行器实现。