File tree Expand file tree Collapse file tree 1 file changed +21
-3
lines changed Expand file tree Collapse file tree 1 file changed +21
-3
lines changed Original file line number Diff line number Diff line change 373714. `** ` 在设计任务控制块时,为何采用分离的内核栈和用户栈,而不用一个栈?
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) 你对本次实验设计及难度/工作量的看法,以及有哪些需要改进的地方,欢迎畅所欲言。
You can’t perform that action at this time.
0 commit comments