rCore_tutorial_doc icon indicating copy to clipboard operation
rCore_tutorial_doc copied to clipboard

[实现上下文环境保存与恢复] · GitBook

Open wyfcyx opened this issue 6 years ago • 11 comments

https://rcore-os.github.io/rCore_tutorial_doc/chapter3/part4.html

wyfcyx avatar Dec 10 '19 05:12 wyfcyx

(实际上就是一堆寄存器的值,具体内容在[part3 中描述的中断帧(TrapFrame)结构体][part3.md]中有详细定义)这个超链接跪了

heheda12345 avatar Feb 22 '20 10:02 heheda12345

@heheda12345 (实际上就是一堆寄存器的值,具体内容在[part3 中描述的中断帧(TrapFrame)结构体][part3.md]中有详细定义)这个超链接跪了

感谢勘误,已修改。

wyfcyx avatar Feb 22 '20 21:02 wyfcyx

请问为何在save all里面保存了stval scause这些csr,而在restore all里面却不还原它们?那这样store的意义何在呢?

JamesZFS avatar Feb 26 '20 10:02 JamesZFS

请问为何在save all里面保存了stval scause这些csr,而在restore all里面却不还原它们?那这样store的意义何在呢?

因为内核的 Rust 代码部分会需要读取这些 CSR。

jiegec avatar Feb 26 '20 10:02 jiegec

@jiegec

请问为何在save all里面保存了stval scause这些csr,而在restore all里面却不还原它们?那这样store的意义何在呢?

因为内核的 Rust 代码部分会需要读取这些 CSR。

这点明白,但我的意思是为什么不在restore里面还原这几个寄存器?是不是因为还原了也没有意义?

JamesZFS avatar Feb 26 '20 12:02 JamesZFS

因为这些寄存器在下次trap的时候会被硬件写入,所以还原了也没有意义。

@jiegec

请问为何在save all里面保存了stval scause这些csr,而在restore all里面却不还原它们?那这样store的意义何在呢?

因为内核的 Rust 代码部分会需要读取这些 CSR。

这点明白,但我的意思是为什么不在restore里面还原这几个寄存器?是不是因为还原了也没有意义?

jiegec avatar Feb 26 '20 14:02 jiegec

代码片段里有两处小的语法问题,照抄会导致编译失败:第一个片段.section.text遗漏了空格,应为.section .text;第二个片段开头.equ XLENB 8遗漏了逗号,应为.equ XLENB, 8

rzswh avatar Feb 27 '20 08:02 rzswh

第一段代码"__trapret"处好像少了一个":"

MaxyLee avatar Feb 27 '20 09:02 MaxyLee

另外还需要提一个点:__alltraps的地址应该是4字节对齐的。

jiegec avatar Mar 08 '20 01:03 jiegec

在 https://docs.opentitan.org/doc/rm/asm_coding_style/ 中提及,不建议使用 .align,似乎因为这在不同架构下解释不同,我在 RISC-V 的手册中看到 .align 2 的意思是按 $2^2=4$ 字节对齐,所以实际上文中的写法是按 16 字节对齐的? 这种场景下建议使用 .balign 4

kiyoakii avatar Jun 15 '20 05:06 kiyoakii

为什么保留TrapFrame开辟了36个8字节的占空间,存储最后一个寄存器时store s4, 35 而不是store s4, 36?

zhangzhuang15 avatar Dec 03 '21 17:12 zhangzhuang15