Windows系统中断机制深度解析
1. 陷阱调度机制
在操作系统中,中断和异常是引导处理器执行正常控制流之外代码的重要条件,它们既可以由硬件产生,也能由软件触发。“陷阱”指的是处理器在遇到异常或中断时捕获正在执行的线程,并将控制权转移到操作系统中固定位置的机制。在Windows系统里,处理器会把控制权交给特定的陷阱处理程序,该程序是针对特定中断或异常的函数。
内核会对中断和异常进行区分。中断是异步事件,通常与处理器当前执行的操作无关,主要由I/O设备、处理器时钟或定时器产生,并且可以被启用或禁用。而异常是同步条件,通常由特定指令的执行引发。异常和中止有时也被称为故障,例如页面故障或双重故障。在相同条件下,使用相同数据再次运行程序可以重现异常,像内存访问违规、某些调试器指令以及除零错误等都属于异常情况。此外,内核将系统服务调用也视为异常。
当硬件产生异常或中断时,x86和x64处理器会先检查当前代码段(CS)是否处于CPL 0或更低级别,也就是判断当前线程是在内核模式还是用户模式下运行。如果线程已经在Ring 0运行,处理器会在当前堆栈上保存以下信息,这代表着内核到内核的转换:
- 当前处理器标志(EFLAGS/RFLAGS)
- 当前代码段(CS)
- 当前程序计数器(EIP/RIP)
- 对于某些异常,还会保存一个错误代码
若处理器正在运行用户模式代码(Ring 3),它会根据任务寄存器(TR)查找当前的任务状态段(TSS),并切换到x86上的SS0/ESP0或x64上的RSP0。此时处理器在核堆栈上执行,会先保存之前的SS(用户模式值)和ESP(用户模式堆栈),然后保存与内核到内核转换时相同的数据。
<
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



