阅读:1101回复:3
请问irql疑问
nt内核的irql(中断请求级)我不明白它是如何工作的:
如cpu把它的中断级提高到某个级,使低中断不能马上响应,80x86有个这样的寄存器来存中断级吗? (我只知道有断点中断,内部中断,不可屏蔽中断,可屏蔽中断的区分,不知如何分32级) 还有外设等的中断要经过中断调度程序,再由它分给中断调度表的程序,也跟我所知道的80x86cpu 中断工作方式不同(我知道的是cpu会用中断向量查idt表,立刻(如果现在没中断,也没屏蔽中断)自动调用中断程序)。 我猜nt在80x86平台工作时把idt入口项都换成一个总调度程序的函数地址,再维护一个链表,放着 中断向量和它对应的irql,有中断时,由调度程序看中断向量,如果向量对应的irql比当前运行 的程序irql(把它说为cpu中断级)高,就调用向量对应的服务程序,否则放到链表中,等当前irql(就是cpu中断级)降后,也就是高irql程序返回到调度程序,由它查链表找先前放的中断向量 和irql,看谁最高,再调用中断向量对应的服务程序,如此循环。 不知道我的猜测对不对。请指教。thx. |
|
|
沙发#
发布于:2002-03-23 10:34
我上面的中断处理方式说的不好,我知道在保护模式下idt装的
是中断描述符等,由它们找服务程序入口。 |
|
|
板凳#
发布于:2002-03-23 10:48
你的猜测差不多是正确的。我也是这样猜测的。
IRQL其实应该叫做“代码的时间片分配级别”。他只是决定代码占用CPU的特权级别,不一定对应中断。只不过ISR都对应某个IRQL。 IRQL的最低三个等级对应的都是软件级别。 |
|
地板#
发布于:2002-03-23 11:02
我的理解:
IRQL和中断无关,和CPU更无关。 它只是Windows用来实现对驱动进行调度和保护一种机制。如果Windows不保护,那很可能需要独占CPU的关键任务被中断打断,可能会令系统崩溃。 具体Windows是怎么实现的,我估计是因为Windows自己做了所有软硬件中断的服务,所以它可能会在这些服务里判断是否要处理这些中断。 |
|
|