异常及非屏蔽中断·异常就是CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。非屏蔽中断就是计算机内部硬件出错时r引起的异常情况·Intel把非屏蔽中断作为一种异常来处理·在CPU执行一个异常处理程序时,就不再为其他异常或可屏蔽中断请求服务<>
• 异常就是CPU内部出现的中断,即在CPU 执行特定指令时出现的非法情况。 • 非屏蔽中断就是计算机内部硬件出错时 引起的异常情况 • Intel把非屏蔽中断作为一种异常来处理 • 在CPU执行一个异常处理程序时,就不再 为其他异常或可屏蔽中断请求服务 < > 异常及非屏蔽中断
中断描述符表中断描述符表(IDT):即中断向量表每个中断占据一个表项3116 151287540DP000RODXXX偏移量31.16r3116 150段选择符偏移量15.0DPL段描述符的特权级偏移量入口函数地址的偏移量段是否在内存中的标志0段选择符入口函数所处代码段的选择符标志位,1=32位,0=16位XXX3位门类型码<V
• 中断描述符表(IDT):即中断向量表, 每个中断占据一个表项 < > 中断描述符表
相关汇编指令·调用过程指令CALL:-CALL过程名·调用中断过程的指令INTr-INT中断向量·中断返回指令IRET-IRET·加载中断描述符表的指令LIDT-LIDT48位的伪描述符KM
• 调用过程指令CALL : – CALL 过程名 • 调用中断过程的指令INT – INT 中断向量 • 中断返回指令IRET – IRET • 加载中断描述符表的指令LIDT – LIDT 48位的伪描述符 < > 相关汇编指令
初始化中断描述符表·Linux内核在系统的初始化阶段要初始化可编程控制器8259A;将中断描述符表的起始地址装入IDTR寄存器,并初始化表中的每一项r当计算机运行在实模式时,中断描述符表被初始化,并由BIOS使用。·真正进入了Linux内核,中断描述符表就被移到内存的另一个区域,并为进入保护模式进行预初始化>
• Linux内核在系统的初始化阶段要初始 化可编程控制器8259A;将中断描述符 表的起始地址装入IDTR寄存器,并初 始化表中的每一项 • 当计算机运行在实模式时,中断描述 符表被初始化,并由BIOS使用 。 • 真正进入了Linux内核,中断描述符表 就被移到内存的另一个区域,并为进 入保护模式进行预初始化 < > 初始化中断描述符表
IDT表项的设置·IDT表项的设置通过 set gaetO函数实现·调用该函数在IDT表中插入一个中断门set intr gate(unsigned int n, void *addr)r调用该函数在IDT表中插入一个陷阱门:set_trap_gate(unsigned int n, void *addr)调用该函数在IDT表中插入一个系统门:set system gate(unsigned int n, void *addr)
• IDT表项的设置通过_set_gaet()函数实现 • 调用该函数在IDT表中插入一个中断门: set_intr_gate(unsigned int n, void *addr) • 调用该函数在IDT表中插入一个陷阱门: set_trap_gate(unsigned int n, void *addr) • 调用该函数在IDT表中插入一个系统门: set_system_gate(unsigned int n, void *addr) < > IDT表项的设置