注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

写着玩

Bob

 
 
 

日志

 
 
 
 

陷阱调度--2  

2009-07-26 23:53:23|  分类: Win32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://hi.baidu.com/l_wait/blog/item/6524cf1664708e1c972b43fe.html

中断调度
    硬件中断一般来自那些要通知处理器它们需要服务的I/O设备。中断控制设备使操作系统得以通过重叠主进程及I/O操作最大限度地利用处理器。线程启动了一个对某设备的I/O传送后,即可在设备完成传送的过程中继续的工作。设备完成任务后,会中断处理器以要求服务。一般来说指点设备、打印机、键盘、磁盘驱动,以及网卡都是中断控制的。
    系统软件也可产生中断。例如,内核可以发出一个软件中断开始线程调度或异步地打断线程的执行。内核能够禁用中断使处理器不被打断,但它只在少数情况下这么做——比如正在处理一个中断或者调度一个异常的时候。
    内核装载中断陷阱处理程序以响应设备中断。中断陷阱处理程序要么将控制传送给处理该中断的外部例程,要么传送给响应该中断的内核例程。设备驱动提供ISRs(interrupt service routine)为设备中断服务,而内核为其他类型的中断提供中断处理例程。

硬件中断处理  
    在Windows支持的硬件平台上,外部的I/O中断从中断控制器的一个引脚进入。接着中断控制器从一个专门的引脚向处理器发出中断请求。一旦处理器被中断,它就会向控制器询问中断请求(IRQ)。中断控制器将中断请求翻译成中断号,此号码作为一个中断调度表(interrupt dispatch table,IDT)的索引值使用,借此将控制转到适当的中断调度例程。系统启动时,Windows把处理所有中断和异常的内核例程的指针填入IDT中。

//EXPERIMENT: Viewing the IDT

    Windows将硬件中断请求映射到IDT中的中断号,系统也使用IDT为异常配置陷阱处理程序。例如,x86和x64的缺页(当某线程试图访问一个不存在或未被定义的虚页)异常码为0xe。因此,IDT中的0xe项指向系统的页错误处理程序。虽然Windows支持的体系结构允许IDT拥有256项,但特定机器能负担的IRQs数量取决于该机器所使用的中断控制器的设计。
    每个处理器拥有一个独立的IDT,即如果有需要,不同的处理器可以执行不同的ISRs。例如,在一个多处理器的系统中,所有的处理器都接到了时钟中断,但只有一个处理器响应这个中断去更新系统时间。而所有的处理器都会用中断来测量线程的时间片并且在某个线程的时间片用完后重新调度。同样地,某些系统配置会要求一个专门的处理器来处理特定的设备中断。

x86中断控制器
      大多数x86系统依赖i8259A可编程中断控制器(Programmable Interrupt Controller,PIC)或者i82489高级可编程中断控制器(Advanced Programmable Interrupt Controller,APIC)的变种;大部分新出的计算机都包含了一个APIC。PIC标准源自早期的IBM PC。PICs只工作在单处理器系统中,有15个中断引脚。APICs和SAPICs被用于多处理器系统,有256个中断引脚。Intel和其他公司定义了多处理器规范,这是一个以APIC为核心的x86多处理器系统设计标准。为了和单处理器系统以及在单处理器模式下启动的多处理器系统引导代码兼容,APICs支持一个PIC兼容模式,该模式只应付15个中断并且只向主处理器传递中断。APIC实际上是由几部分构成的:一个I/O APIC,它负责从设备接收中断;一个本地APIC,它负责接收I/O APIC通过一个私有的APIC总线传来的中断,接着再中断与之相连的CPU;还有一个类似i8259A的中断控制器,它将APIC的输入翻译成PIC的等价信号。I/O APIC负责实现中断路由算法——这是可以用软件改变的[硬件抽象层(hardware abstraction layer,HAL)为Windows提供了这种选择]——既在处理器间平衡了对设备中断的受理,又尽量利用了位置优势,将设备中断传送给刚刚处理了相同类型中断的处理器。

x64中断控制器
    x64体系结构是与x86操作系统兼容的,所以x64系统必须提供与x86相同的中断控制器。而一个大的差异是,x64的Windows必定包含APIC,并且由APIC负责中断控制。

IA64中断控制器
    IA64体系结构依赖于SAPIC(Streamlined Advanced Programmable Interrupt Controller ),它是APIC的升级版。APIC和SAPIC体系结构间的主要差异是APIC系统中的I/O APICs是通过一个私有APIC总线向本地APIC传送中断,而在SAPIC系统中为求速度,中断是通过I/O及系统总线传送的。另一个差别是在APIC系统中,中断路由及负载均衡是由APIC总线负责,而SAPIC系统中并没有一个私有的APIC总线,就要求将这些功能编入固件中。虽然负载均衡和路由功能已存在于固件中,Windows并未加以利用;它选择以轮转方式将中断静态地分配给处理器。

//EXPERIMENT: Viewing the PIC and APIC

  评论这张
 
阅读(237)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017