# lab1

## **实验要求**

阅读文档lab0-1，完成实验环境的搭建，并可以运行ucore。

1. 回答：描述ucore中处理中断异常的流程（从异常的产生开始）。(2分)
2. 回答：对于任何中断，`__alltraps` 中都需要保存所有寄存器吗？请说明理由。(2分)
3. 编程：在任意位置触发一条非法指令异常（如：mret），在 `kern/trap/trap.c`的异常处理函数中捕获，并对其进行处理，简单输出异常类型和指令即可。(6分)

## **实验帮助**

* 参考资料
  * [RV 硬件简要手册-中文](http://crva.ict.ac.cn/documents/RISC-V-Reader-Chinese-v2p1.pdf) ：重点第 10 章
  * [RV 硬件规范手册-英文](https://riscv.org/specifications/privileged-isa/)
* 非法指令可以加在任意位置，比如在通过内联汇编加入，也可以直接修改汇编。但是要注意，什么时候时候异常触发了才会被处理？
* 查阅参考资料，判断自己触发的异常属于什么类型的，在相应的情况下进行代码修改。

## 思考题（不计分）

* ucore支持嵌套异常吗？如果不支持，可否通过一些方法使得ucore支持？
