内核处理中断的方式:
1.立即处理和推迟处理2部分
2.支持nested interrupt and exception handler
3.critical region 里必须要关中断
IDT
idtr 保存 idt 物理地址和限长
256*8=0.5×4kB
中断描述符的 40,43 位指示其类型
01 task gate
包含 tss 段选择符 (代替中断发生时正在执行的进程)
02 interrupt gate
需要关中断
03 trap gate
不需要关中断
硬件处理中断的过程
当 中断和异常发生时的处理过程
1.发生时机
2.硬件处理
3.执行中断程度
4.返回
1.发生时机
在处理下条指令时 检测中断
2.硬件处理
cs,ip 指向下条指令
----------------------------------------
找到中断处理的segment offset
比较
dpl 必须<cpl
切换stack
从 tss 中取出 内核stack ,装入 ss, esp
保存 old ss, esp
-----------------------栈切换---------------
保存 eflags, cs,eip
错误码压入内核stack
-----------------------上下文保存----------
3.执行中断
装入中断处理的 cs,eip
4.返回
iret 指令
装入上下文
检查是否该切换stack
检测是否该清处 ds,fs,gs,es