We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent eadaef7 commit b9756e5Copy full SHA for b9756e5
source/chapter2/4trap-handling.rst
@@ -150,7 +150,7 @@ RISC-V特权级切换
150
..
151
chy:我们在一个作为用户栈的特别留出的内存区域上保存应用程序的栈信息,而 Trap 执行流则使用另一个内核栈。
152
153
-使用两个不同的栈主要是为了安全性:如果两个控制流(即应用程序的控制流和内核的控制流)使用同一个栈,在返回之后应用程序就能读到 Trap 控制流的历史信息,比如内核一些函数的地址,这样会带来安全隐患。于是,我们要做的是,在批处理操作系统中添加一段汇编代码,实现从用户栈切换到内核栈,并在内核栈上保存应用程序控制流的寄存器状态。
+使用两个不同的栈主要是为了安全性:如果两个控制流(即应用程序的控制流和内核的控制流)使用同一个栈,在返回之后应用程序就能读到 Trap 控制流的历史信息,比如内核一些函数的地址,这样会带来安全隐患。于是,我们要做的是,在批处理操作系统中添加一段汇编代码,实现从用户栈切换到内核栈,并在内核栈上保存应用程序控制流的寄存器状态。不过需要注意的是,在没有启用虚拟内存的情况下,用户态代码依然可以通过物理地址访问整个内存空间,包括内核栈区域。
154
155
我们声明两个类型 ``KernelStack`` 和 ``UserStack`` 分别表示内核栈和用户栈,它们都只是字节数组的简单包装:
156
0 commit comments