关于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
Uh oh!
There was an error while loading. Please reload this page.
-
为什么每次
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