X86CPU对中断的硬件支持

中断有两种,一种是由CPU外部产生的,另一种是由CPU本身在执行过程的过程中产生的。

外部中断时“异步”的。CPU(或软件)对外部中断的响应是被动的。不过,软件可以可以通过“关中断”指令关闭对中断的响应。

由软件产生的“中断”则不同,它由专设的指令,在程序中有意地产生的。所以是主动的,“同步”的。被称为“陷阱”(trap)。

当出现不当的操作,被称为“异常”,一般也是异步的,被动的。

无论是哪一种情况,CPU的响应过程却基本上一致。在执行完当前指令以后,或者在执行当前指令的过程中,就根据中断源所提供的“中断向量”,在内存中找到相应的服务程序入口并调用该服务程序

实地址模式
CPU把内存中从0开始的1K字节作为一个中断向量表。表中的每个表项占四个字节,有两个字节的段地址和两个字节的位移组成。这样构成的地址便是相应中断服务程序的入口地址。

保护模式

引进了“门”的概念,当中断发生的时候必须先通过这些门,才能进入相应的服务程序。当想切换CPU的运行状态也要通过这一道门。
当中断发生时不但可以切换CPU的运行状态并转入中断服务程序,并且需要进行一次任务切换(上下文切换)。通过“中断服务进程”进行。
按不同的用途和目的,CPU中一共有四种门,即任务门、中断门、陷阱门以及调用门(除任务门以外其他三种门的结构基本相同)。


TSS段选择码的作用和寄存器CS、DS等相似,通过GDT或LDT指向特殊的“系统段”中的一种,称为“任务状态段”;TSS实际上是一个用来保存任务运行的“现场”的数据结构,其中包括CPU中所有与具体进程有关的寄存器内容(包括页面目录指针CR3),还包括三个堆栈指针(针对0,1,2级别)。
中断发生时,CPU在中断向量表中找到相应的表项。如果此表项是一个任务门,并且通过优先级别的检查,CPU就会将当前任务的运行现场保护在相应的TSS中。并将任务门所指的TSS作为当前任务,将其内容装入CPU的各个寄存器,从而完成任务的切换。
任务寄存器(TR)用来指向当前任务的TSS。
中断门、陷阱门和调用门的不同之处在于3位类型码;与任务门相比,任务门不需要段内位移,任务门不指向一个子程序,而其余三种门要指向子程序。此外任务门的D标志位永远都是0。

中断门和陷阱门的区别在于通过门时,CPU是否将EFLAGS寄存器中的IF标志位清成0,通过中断门将清除IF标志位,通过陷阱门将维持IF标志位不变。
当进入中断,先通过比对CPU的运行级别和中断门的运行级别,通过后,CPU要将当前EFLAGS寄存器的内容以及返回地址压入堆栈。(返回地址由段寄存器CS的内容和取指令指针EIP的内容共同组成),当CPL(CPU的运行级别)与目标表项的运行级别相同,则结束切换。如果CPL小于目标表项的DPL(中断发生在用户态),则发生堆栈更换。再从TSS中取到对应的新的堆栈指针(SS加ESP)并装入其堆栈寄存器SS和堆栈指针(寄存器)ESP,达到跟换堆栈的目的。

在保护模式中,中断向量表在内存中的位置不再限于从地址0开始的地方,而是像GDT和LDT那样可以在内存中的任何地方。为此,在CPU中又增设了一个寄存器IDTR,指向当前中断向量表IDT(中断描述表)。


















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值