Skip to content

Commit b9756e5

Browse files
authored
补充实现用户栈与内核栈的目的的说明
1 parent eadaef7 commit b9756e5

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

source/chapter2/4trap-handling.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ RISC-V特权级切换
150150
..
151151
chy:我们在一个作为用户栈的特别留出的内存区域上保存应用程序的栈信息,而 Trap 执行流则使用另一个内核栈。
152152
153-
使用两个不同的栈主要是为了安全性:如果两个控制流(即应用程序的控制流和内核的控制流)使用同一个栈,在返回之后应用程序就能读到 Trap 控制流的历史信息,比如内核一些函数的地址,这样会带来安全隐患。于是,我们要做的是,在批处理操作系统中添加一段汇编代码,实现从用户栈切换到内核栈,并在内核栈上保存应用程序控制流的寄存器状态。
153+
使用两个不同的栈主要是为了安全性:如果两个控制流(即应用程序的控制流和内核的控制流)使用同一个栈,在返回之后应用程序就能读到 Trap 控制流的历史信息,比如内核一些函数的地址,这样会带来安全隐患。于是,我们要做的是,在批处理操作系统中添加一段汇编代码,实现从用户栈切换到内核栈,并在内核栈上保存应用程序控制流的寄存器状态。不过需要注意的是,在没有启用虚拟内存的情况下,用户态代码依然可以通过物理地址访问整个内存空间,包括内核栈区域。
154154

155155
我们声明两个类型 ``KernelStack`` 和 ``UserStack`` 分别表示内核栈和用户栈,它们都只是字节数组的简单包装:
156156

0 commit comments

Comments
 (0)