处理器的虚拟化


根本问题:为什么死循环不能使计算机被彻底卡死?

原理上:

虚拟化:状态机的管理

寄存器组 ($\$x_0...\$x_{31}, \$pc$) 只有一份,物理内存也只有一份

操作系统代码最重要的 invariant (假设单处理器)

操作系统代码开始真正 “处理” 系统调用/中断时,所有进程的状态都被 “封存” 在操作系统中

状态的封存

最简单的封存方法是直接保存到内存中:

struct page { int prot; void *va, *pa; }
struct proc {
  uint64_t x1, x2, ... x31;
  struct page pages[MAXPAGES];
};

x86-64 的做法