外中断、异常和陷入有什么区别?
先自己想一想,再看参考要点
参考要点
- 外中断由 CPU 外部的事件引起,与当前执行的指令无关,是异步的,例如磁盘完成 I/O 后发出的中断、周期性的时钟中断(时间片轮转的基础)
- 异常由正在执行的指令引起,是同步的,例如第一次写刚分配的内存触发缺页异常,内核分配物理页后同一条指令重新执行,除数为 0 触发除法错误
- 陷入由程序主动执行的指令引起,同样是同步的,系统调用就是通过陷入实现的,例如 x86-64 的 syscall 指令
- 外中断和异常通过中断描述符表(IDT)找到处理程序,syscall 指令直接跳转,不经过 IDT