Skip to content

feat(traps): 实现backtrace和alarm,熟悉陷入和切换的流程

zhangweijie requested to merge mit6.s081_traps into traps

Traps

backtrace

  1. 当调用该系统调用的时候,可以打印回溯整条调用链
  2. 通过内联汇编来获取寄存器S0中的fp的值
  3. xv6中的a0(返回地址)一般在fp-8的位置
  4. 而上一个调用者函数的fp是在当前fp-16的位置

alarm

  1. 注册一个周期性的回调函数,当消耗一定数量的CPU之后调用回调函数,回调函数中使用sigreturn解除警告
  2. 原理是通过使用trapframe中所保存的用户态一系列寄存器,来恢复到用户态的上下文环境中
  3. 首先需要注册两个系统调用sys_sigalarm和sys_sigreturn,第一个是注册相关信息,第二个是解除警告
  4. 注册信息,需要在当前proc块保存所需要的内容,比如回调函数,周期,是否在回调函数执行之内,以及一个保存调用前的上下文备份(即trapframe),通过这个上下文备份可以在解除警告的时候,回到最初的开始。
  5. 解除警告之后,就是回到被中断的那瞬间的用户态环境

Merge request reports

Loading