关于trap_return和跳板的若干问题 #196
Unanswered
Ayana-chan
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
为什么每次
trap_return
都将stvec设为跳板地址?设置时也都处于内核的地址空间,因此每次设置的值都是一样的。为什么不在初始化的时候调用一次set_user_trap_entry
就行了?另一个小问题是,这里
restore_va
为什么每次都要计算__restore as usize - __alltraps as usize + TRAMPOLINE
?此处应当还是内核的地址空间,因此这个表达式是否每次都会得到完全一样的结果?此处引申出来一个讨论:为什么要求应用和内核地址空间对TRAMPOLINE的虚拟地址映射要完全一样?文档给出的理由是让CPU指令能够被连续执行。但是CPU只是在无脑地增加PC,不会因为地址空间切换导致PC也被误切换吧?jr跳转的时候,也是用的相对偏移量的跳转方式。我目前能想到的唯一理由就是:让所有应用和内核空间使用同一个跳板地址,而无需维护多个跳板地址,那样难以维护且较难实现。
Beta Was this translation helpful? Give feedback.
All reactions