我正在尝试在 x86 CPU 上计算中断的控制流程,特别是页面错误。到目前为止,这是我能弄清楚的:
- IDT 填充有服务例程地址。
- 发生中断。
- CPU 将 EFLAGS、CS 和 EIP 保存到堆栈。
- EIP 设置为从 IDT 获取的 ISR 地址,即
mov eip, [idtr+interruptNum*4]
- 中断例程执行。
- 中断例程以一条
iret
指令完成。
现在,假设中断实际上是与 NIC 缓冲区相关的页面错误。ISR 会out
用来告诉 DMA 控制器从系统内存向设备发出副本(反之亦然),还是我在这里偏离了基础?