skykufo
驱动牛犊
驱动牛犊
  • 注册日期2001-10-23
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1102回复:3

请问irql疑问

楼主#
更多 发布于:2002-03-23 10:27
nt内核的irql(中断请求级)我不明白它是如何工作的:
如cpu把它的中断级提高到某个级,使低中断不能马上响应,80x86有个这样的寄存器来存中断级吗?
(我只知道有断点中断,内部中断,不可屏蔽中断,可屏蔽中断的区分,不知如何分32级)
还有外设等的中断要经过中断调度程序,再由它分给中断调度表的程序,也跟我所知道的80x86cpu
中断工作方式不同(我知道的是cpu会用中断向量查idt表,立刻(如果现在没中断,也没屏蔽中断)自动调用中断程序)。
我猜nt在80x86平台工作时把idt入口项都换成一个总调度程序的函数地址,再维护一个链表,放着
中断向量和它对应的irql,有中断时,由调度程序看中断向量,如果向量对应的irql比当前运行
的程序irql(把它说为cpu中断级)高,就调用向量对应的服务程序,否则放到链表中,等当前irql(就是cpu中断级)降后,也就是高irql程序返回到调度程序,由它查链表找先前放的中断向量
和irql,看谁最高,再调用中断向量对应的服务程序,如此循环。
不知道我的猜测对不对。请指教。thx.
探索者
skykufo
驱动牛犊
驱动牛犊
  • 注册日期2001-10-23
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-23 10:34
我上面的中断处理方式说的不好,我知道在保护模式下idt装的
是中断描述符等,由它们找服务程序入口。
探索者
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-23 10:48
你的猜测差不多是正确的。我也是这样猜测的。
IRQL其实应该叫做“代码的时间片分配级别”。他只是决定代码占用CPU的特权级别,不一定对应中断。只不过ISR都对应某个IRQL。
IRQL的最低三个等级对应的都是软件级别。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-23 11:02
我的理解:
IRQL和中断无关,和CPU更无关。
它只是Windows用来实现对驱动进行调度和保护一种机制。如果Windows不保护,那很可能需要独占CPU的关键任务被中断打断,可能会令系统崩溃。
具体Windows是怎么实现的,我估计是因为Windows自己做了所有软硬件中断的服务,所以它可能会在这些服务里判断是否要处理这些中断。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
游客

返回顶部