Skip to content

Commit 9da99d0

Browse files
committed
Move questions in to ch3 exercises
1 parent d66b176 commit 9da99d0

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

source/chapter3/5exercise.rst

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
14. `**` 在设计任务控制块时,为何采用分离的内核栈和用户栈,而不用一个栈?
3838

3939
.. chyyuu:任务与进程,类似青蛙生长过程中的蝌蚪与青蛙的区别与联系。
40-
40+
4141
4242
4343
实验练习
@@ -132,12 +132,30 @@ ch3 中,我们的系统已经能够支持多个任务分时轮流运行,我
132132

133133
问答作业
134134
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
135-
135+
136+
1. 正确进入 U 态后,程序的特征还应有:使用 S 态特权指令,访问 S 态寄存器后会报错。
137+
请同学们可以自行测试这些内容 (运行 `Rust 两个 bad 测例 (ch2b_bad_*.rs) <https://github.com/LearningOS/rCore-Tutorial-Test-2022S/tree/master/src/bin>`_ ) ,
138+
描述程序出错行为,同时注意注明你使用的 sbi 及其版本。
139+
2. 请通过 gdb 跟踪或阅读源代码了解机器从加电到跳转到 0x80200000 的过程,并描述重要的跳转。回答内核是如何进入 S 态的?
140+
141+
- 事实上进入 rustsbi (0x80000000) 之后就不需要使用 gdb 调试了。可以直接阅读 `代码 <https://github.com/rustsbi/rustsbi-qemu/blob/7d71bfb7b3ad8e36f06f92c2ffe2066bbb0f9254/rustsbi-qemu/src/main.rs#L56>`_ 。
142+
- 可以使用 Makefile 中的 ``make debug`` 指令。
143+
- 一些可能用到的 gdb 指令:
144+
- ``x/10i 0x80000000`` : 显示 0x80000000 处的10条汇编指令。
145+
- ``x/10i $pc`` : 显示即将执行的10条汇编指令。
146+
- ``x/10xw 0x80000000`` : 显示 0x80000000 处的10条数据,格式为16进制32bit。
147+
- ``info register``: 显示当前所有寄存器信息。
148+
- ``info r t0``: 显示 t0 寄存器的值。
149+
- ``break funcname``: 在目标函数第一条指令处设置断点。
150+
- ``break *0x80200000``: 在 0x80200000 出设置断点。
151+
- ``continue``: 执行直到碰到断点。
152+
- ``si``: 单步执行一条汇编指令。
153+
136154

137155

138156
实验练习的提交报告要求
139157
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140158

141159
- 简单总结与上次实验相比本次实验你增加的东西(控制在5行以内,不要贴代码)。
142160
- 完成问答问题。
143-
- (optional) 你对本次实验设计及难度/工作量的看法,以及有哪些需要改进的地方,欢迎畅所欲言。
161+
- (optional) 你对本次实验设计及难度/工作量的看法,以及有哪些需要改进的地方,欢迎畅所欲言。

0 commit comments

Comments
 (0)