# 考核与毕业验收

## 1. 考核原则

课程不以阅读时长或“运行过一次”为完成标准，而以可解释、可修改、可验证、可复现为标准。

总分 100，80 分以上且所有强制门槛通过才算毕业。

## 2. 理论考核（20 分）

### 口头题

每题 2 分，随机抽取 10 题：

1. EL1 和 EL2 的职责边界是什么？
2. HCR_EL2、VTTBR_EL2、ESR_EL2 分别解决什么问题？
3. VA、IPA、PA 的区别是什么？
4. 为什么两台 VM 可以使用相同 IPA？
5. vCPU 首次进入与恢复运行有什么不同？
6. 为什么不是所有 VM Exit 都能 `PC += 4`？
7. MMIO trap-and-emulate 如何工作？
8. 物理 IRQ 如何变成客体 vIRQ？
9. Linux DTB 中的 memory 描述 IPA 还是 PA？
10. RTOS 有串口日志但无任务切换，应如何排查？
11. ArceOS 组件化对 AxVisor 有什么价值？
12. VM fault 与 Hypervisor panic 的处理边界是什么？
13. 为什么 VM 配置必须在启动前检查 PA 重叠？
14. 如何证明两个 Linux 程序是由 init 自动启动的？
15. 如何证明一个客体故障没有影响另一个客体？

评分：回答必须包含因果关系和至少一种验证方式，只背定义得一半分。

## 3. 源码考核（20 分）

- 5 分：现场定位 AxVisor 系统入口和 VM create 路径。
- 5 分：从一个 VM memory region 追踪到 Stage-2 map。
- 5 分：从 EL2 lower sync 入口追踪到一个 Exit handler。
- 5 分：从 vIRQ pending/inject 追踪到客体 timer handler。

必须使用当前 checkout 的真实文件、函数和行号。

## 4. 编码考核（25 分）

- 5 分：结构化 VM Exit 日志。
- 5 分：Stage-2 region 对齐与重叠检查。
- 5 分：Linux App A/App B 自动启动。
- 5 分：RTOS 双周期任务。
- 5 分：自动日志验收脚本。

代码要求：错误可诊断，不依赖手工观察，不引入明显越界或 unchecked guest input。

## 5. 系统演示（25 分）

- 5 分：一条命令构建或清晰的分阶段自动构建。
- 5 分：AxVisor 同时启动 Linux 和 RTOS。
- 5 分：Linux 两个程序与 RTOS 两个任务持续运行。
- 5 分：30 分钟稳定性测试。
- 5 分：单 VM 故障隔离演示。

## 6. 文档与复现（10 分）

- 2 分：`versions.lock` 完整。
- 2 分：架构图和资源表。
- 2 分：启动路径与源码地图。
- 2 分：已知限制和故障手册。
- 2 分：陌生人在干净环境复现成功。

## 7. 强制门槛

以下任意一项失败，不能毕业：

- Linux 和 RTOS 未同时运行。
- Linux 未自动启动两个程序。
- 无法解释 Stage-2 地址转换。
- 无法提供 VM Exit 的真实日志。
- 客体故障导致 AxVisor 自身 panic。
- 没有版本锁定或无法复现。

## 8. 分阶段检查点

### Checkpoint A：基础完成

- GDB 可断在 EL2 入口。
- 能读取关键寄存器。
- 能解释链接/装载/入口地址。

### Checkpoint B：ArceOS 完成

- 运行多任务应用。
- 画出入口到应用路径。
- 定位内存、timer 和调度器初始化。

### Checkpoint C：AxVisor 完成

- 跑通官方 VM 示例。
- 记录 VM lifecycle。
- 解码至少两类 Exit。
- 验证一个 Stage-2 region。

### Checkpoint D：客体完成

- Linux shell + App A/App B。
- RTOS scheduler + 两个任务。

### Checkpoint E：毕业

- 多客体、稳定性、隔离、自动验收、文档全部完成。

## 9. 演示脚本

15 分钟演示建议：

1. 1 分钟：目标和版本。
2. 2 分钟：架构图与资源表。
3. 3 分钟：构建和启动。
4. 2 分钟：Linux 双应用与 RTOS 双任务。
5. 2 分钟：解释一次 VM Exit。
6. 2 分钟：解释一个 Stage-2 映射。
7. 2 分钟：故障注入与隔离。
8. 1 分钟：已知限制和后续工作。
