feat(traps): 实现backtrace和alarm,熟悉陷入和切换的流程
Traps
backtrace
- 当调用该系统调用的时候,可以打印回溯整条调用链
- 通过内联汇编来获取寄存器S0中的fp的值
- xv6中的a0(返回地址)一般在fp-8的位置
- 而上一个调用者函数的fp是在当前fp-16的位置
alarm
- 注册一个周期性的回调函数,当消耗一定数量的CPU之后调用回调函数,回调函数中使用sigreturn解除警告
- 原理是通过使用trapframe中所保存的用户态一系列寄存器,来恢复到用户态的上下文环境中
- 首先需要注册两个系统调用sys_sigalarm和sys_sigreturn,第一个是注册相关信息,第二个是解除警告
- 注册信息,需要在当前proc块保存所需要的内容,比如回调函数,周期,是否在回调函数执行之内,以及一个保存调用前的上下文备份(即trapframe),通过这个上下文备份可以在解除警告的时候,回到最初的开始。
- 解除警告之后,就是回到被中断的那瞬间的用户态环境