Windows系统结构的中断(1)

中断:异步事件(可以在任何时候发生),且与处理器当前正在执行的任务毫无关系。主要由I/O设备、处理器时钟、定时器产生,可启用或禁用。

异常:同步事件,一个特殊指令执行的结果。

陷阱:当异常或中断发生时,处理器捕捉到一个执行线程,并且将控制权转移到操作系统中某一固定地址处。在Windows中,处理器会将控制权转给陷阱处理器(指某个特定的中断或异常相关联的函数)。

硬件中断处理:在支持Windows的硬件平台上,I/O中断进入到中断控制器的某根线上,从而中断处理器。处理器一旦被中断,就会询问控制器获得中断请求(IRQ)。中断控制器将该IRQ译成中断号,利用该编号作为索引,在中断分发表(IDT)中找到对应的IDT项,并且将控制权传递给中断分发例程。(在系统引导的时候,Windows会填充IDT,其中包含了指向负责处理每个中断和异常的例程的指针)。总之,Windows将硬件的IRQ映射到IDT中的中断号上,利用IDT来配置陷阱处理器(Windows体系架构最多允许256个IDT项,但是一台特定的机器能支持的IRQ数量由该机器所使用的中断控制器的具体设计决定)。在一个多处理器系统中,每个处理器都会接收到中断时钟,但是只有一个处理器在响应该中断的时候更新系统时钟。所有的处理器都使用该中断来测量线程的时限,以及当线程的时限结束时,触发重新调度的过程。

内核为软件中断定义了一组标准的中断请求级别(IRQL),硬件抽象层(HAL)则将硬件中断号映射为IRQL。中断是按照优先级处理的,高优先级的中断会抢占低优先级的中断的执行权。当抢占发生时,处理器会把被中断的线程的状态保存起来,接着调用与该中断相关的陷阱分发器,提升IRQL,然后调用该中断的服务例程。在服务例程执行完后,陷阱分发器再降低处理器的IRQL,回到中断发生前的级别,然后装入保存的机器状态。被中断的线程从原来的地方恢复运行。如果中断源的IRQL等于或低于当前的级别,则会被屏蔽,直到有一个正在执行的线程降低IRQL为止。

IRQL被保存在处理器控制区(PCR)和处理器控制块(PRCB)两个地方。PCR和PRCB包含了系统中每个处理器的状态信息,如当前的IRQL、指向硬件的IDT指针、当前正在运行的线程、接下来要选择运行的线程。内核和HAL利用这些信息来完成各种与系统或机器相关的动作。

Windows并没有从硬件上实现IRQL的概念,那么它是如何决定一个中断分配哪个IRQL呢?在Windows中,一个被称为总线驱动程序的设备驱动程序用以确定它的总线上出现了哪些设备,以及哪些中断可以分配给每一个设备。总线驱动程序将这些信息告诉即插即用管理器,后者在考虑所有其他设备的可接受的中断分配方案以后,确定为每个设备分配哪个中断。然后,即插即用管理器调用即插即用中断仲裁者,将中断映射到对应的IRQL(非ACPI系统上使用根仲裁者,在ACPI兼容的系统上,有自己的仲裁者)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值