sakura-ysy / MIT6.1810

MIT6.1810 OS公开课个人源码及文档,6.1810为6.828/6.S801的2022最新版。6.828于2019年更新为6.S081,于2022年更新为6.1810。
39 stars 5 forks source link

对lab4 trap的test3要求恢复a0的一点思考 #3

Open hhzzll opened 7 months ago

hhzzll commented 7 months ago

这个alarm的实验应该是对照linux中的自定义信号处理函数(linux中的SIGALRM信号),我调试下面的代码并阅读linux内核arch/riscv/kernel/signal.c相关代码发现,linux会在用户栈保存进入信号处理函数前的trapframe,其中trapframe包含对sigreturn调用(sigreturn的调用在libc中,应该是libc在执行signal时把sigreturn传递给了内核?),这样handler执行完后就不需要手动调用sigreturn,也就是说,这个系统调用对用户来说是不可见的,handler不应该影响发生中断前的a0,用户也不关心sigreturn返回什么(测试是在x86下做的,但原理应该一样)。xv6降低了难度,在handler中手动调用sigreturn,但从实验的出发点看来应当恢复a0。 image handler执行ret后跳转到下面的汇编代码 image image

sakura-ysy commented 5 months ago

不好意思最近几个月在实习没关注 issue。刚看了眼觉得你说的蛮有道理,我写的时候也没有深入考虑这么多,感谢你的解释和订正,学到!