📄 subject_51687.htm
字号:
<p>
序号:51687 发表者:xiongli 发表日期:2003-09-03 14:19:16
<br>主题:关于win2k上interrupt的pending
<br>内容:在x86系列上,interrupt(intr)是电平敏感的,cpu收到一个intr后,返回一个inta,然后读入中断号.这一般是由可编程中断处理器完成.当硬件产生一个中断,中断处理器提供持续的高电平到cpu的intr,当cpu返回inta后,中断处理器返回中断号,同时取消intr上的高电平.<BR>在inside win2k上谈到,当进入中断后,操作系统会处理中断处理器,根据当前的IRQL来mask等于和低于当前IRQL的中断.也就是说,操作系统会根据自己内部定义的IRQL,来编程屏蔽中断处理器上的某些IRQ,既然这样,那么就只有比当前IRQL高的IRQ才能够进入.当目前正在处理一个中断的时候,新的高优先级的中断进来,才会使当前的服务处于'pending'状态.如果当前的IRQL比收到的IRQ高,那么收到的IRQ是不会pending的.是这样的吗?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:ArthurTu 回复日期:2003-09-06 20:25:30
<br>内容:yes
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-10-09 10:35:38
<br>内容:到底怎么解释<BR>高手们看看阿
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Fang 回复日期:2003-10-09 11:32:10
<br>内容:IRQL和IRQ不是等同的。IRQL是windows的中断请求级的模型,不光包括硬件中断,还有软件中断(其实就不是中断,不是isr的概念,比如passive level,普通应用程序就可以认为这这个级别运行)。<BR><BR>理解IRQL,首先撇开硬件中断线、中断向量表等概念。windows已经管理这些东西。<BR><BR>我也讲不大清楚,我试着举个例子,然后贴一个文章《Understanding IRQL。<BR><BR>irql分很多级别:<BR>Software IRQL:<BR><BR>PASSIVE_LEVEL 0 // Passive release level<BR>LOW_LEVEL 0 // Lowest interrupt level<BR>APC_LEVEL 1 // APC interrupt level<BR>DISPATCH_LEVEL 2 // Dispatcher level<BR><BR>Hardware IRQL:<BR><BR>DIRQL: from 3 to 26 for device ISR<BR><BR>PROFILE_LEVEL 27 (0x1B) // timer used for profiling.<BR>CLOCK1_LEVEL 28 (0x1C) // Interval clock 1 level - Not used on x86<BR>CLOCK2_LEVEL 28 (0x1C) // Interval clock 2 level<BR>SYNCH_LEVEL 28 (0x1C) // synchronization level<BR>IPI_LEVEL 29 (0x1D) // Interprocessor interrupt level<BR>POWER_LEVEL 30 (0x1E) // Power failure level<BR>HIGH_LEVEL 31 (0x1F) // Highest interrupt level<BR><BR>比如,一个进程中的某个线程正在运行,那么此时内存空间是这个进程的内存空间,2gb以上的部分是系统空间。他运行在passive level.<BR><BR>网卡有数据报来,产生中断,在dirql级。dirql从3到26,更高级别的dirql可以抢先。那么这时有两种情况,<BR><BR>1,此时系统如果运行在更高的irql上,那么此中断将被中断调度程序“pending”,直到当前的isr处理完毕;<BR><BR>2,此时运行的是线程的代码,passive level,那么中断调度程序将停止线程运行(不是线程切换,时间片还没有结束),提高irql到网卡中断的那个dirql上;运行网卡驱动程序的isr;<BR><BR>然后,如果该isr还没有运行完毕,又发生了更高级的中断,那么中断调度程序将停止该isr运行,提高irql到更高级别。运行更高级的中断的isr;<BR><BR>网卡驱动程序的isr的isr设置一个dpc,用以处理接受数据过程;退出;irql降到原先级别;<BR><BR>系统运行该dpc,提升irql到dispatch level;数据报交给ip软件;<BR><BR>dpc运行完毕,线程继续恢复运行。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-10-09 11:35:26
<br>内容:《Understanding IRQL》
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-10-09 11:44:41
<br>内容:看了你的例子,我基本上明白了<BR>剩下的一个问题就是:<BR>有没有什么可能导致一个中断丢失<BR><BR>也就是说,irq要么立刻得到处理,要么就是pending,pending到最后最终还是要得到处理的.有没有什么情况导致一个中断进来后,既没有立刻处理也没有pending,而是丢失了的情况?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-10-09 12:02:47
<br>内容:中断丢失,? 我也不知道了...应该不可能吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-10-09 12:13:28
<br>内容:其实这个问题不是光光是看inside win2k里面才想到的<BR>以前看x86 体系结构的时候就遇上过这个问题<BR>是这样的:<BR>比如你有两个网卡.结果在一个非常短的时间内,两个网卡都接收到一个报文,然后同时提出intr请求,这样会不会冲突?<BR>后来看书,知道提交intr请求的其实不是io,而是中断处理器,io都是挂在中断处理器上,然后中断处理器负责中断向量的译码和向cpu请求中断,这样在cpu看来,就不会出现冲突的情况.而中断处理器是可以编程调整的,他自己如何协调,我也不太清楚了.这东西要看看8259/8259a的specification
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-10-09 12:55:04
<br>内容:我看了一下,9259a有中断优先权,中断引脚的优先权可以编程。不可能冲突。<BR>apic则没有中断优先权,只是轮流察看中断引脚,依次产生中断信号,也不会冲突。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-10-09 14:43:29
<br>内容:上课刚刚回来,就看到fang搞定了<BR>偶还没来得及查呢<BR>都怪前年学这个的时候不踏实<BR>谢谢fang
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-10-09 17:58:43
<br>内容:你还在学校里啊?水平够厉害的!<BR>读研?要是本科那就是离谱了,简直目瞪口呆!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-10-09 18:26:00
<br>内容:中断有可能丢失<BR>理论上是不会丢的,硬件设计师是不会允许这种情况在[理论上]发生的<BR>但是,现实往往令人沮丧。<BR>2003-10-9 19:01:25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -