免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zx_wing
打印 上一主题 下一主题

《Interrupt in Linux(硬件篇)》(1楼有更新 2008.5.3) [复制链接]

论坛徽章:
0
29 [报告]
发表于 2008-04-28 15:16 |只看该作者
原帖由 bluesky_jxc 于 2008-4-28 15:12 发表
ICR里面有个dest shorthand的位,用来表示是否是广播,是广播的话,ID区域就不再care了。

谢谢haitao热情赞助

大哥,那个是发IPI用的。
IOAPIC也要广播消息啊,所以只要它自己不能接收就可以了。
如果你问如何发广播消息,IPI可以用dest shorthand。但一个通用的方法是吧RTE的destination field中的APIC ID写成0xff。

论坛徽章:
0
28 [报告]
发表于 2008-04-28 15:12 |只看该作者

回复 #25 bluesky_jxc 的帖子

ICR里面有个dest shorthand的位,用来表示是否是广播,是广播的话,ID区域就不再care了。

谢谢haitao热情赞助

论坛徽章:
0
27 [报告]
发表于 2008-04-28 15:09 |只看该作者
原帖由 bluesky_jxc 于 2008-4-28 14:54 发表
另外还有一个问题,你说APIC ID 4 bit, 最多15个,另一个给IOAPIC。
我想知道广播是怎么实现的?难道有另外的线来实现?

不用吧,IOAPIC不能接收中断消息,所以发给它也无所谓嘛

论坛徽章:
0
26 [报告]
发表于 2008-04-28 15:07 |只看该作者

回复 #23 bluesky_jxc 的帖子

>>我问过haitao同学,他问过老大,但是老大也说记不清楚了,一般说来,APIC并不会mask edge中断。(有待考证)
老大就是老大啊,刚才我仔细看了linux处理edge的部分,确实APIC情况不会去mask edge中断。

>>RemoteIRR的作用就是防止interrupt storm,而edge不会有这个问题,所以不需要RemoteIRR。
有道理,防止中断风暴的同时有保证不掉中断。

>>但是,我想不通的是,remoteIRR如果对Edge起作用会有什么问题,如果能够起作用,那么mask edge中断就不会有问题了,你的文章也没有提到这个问题。
呵呵,这个就是设计电路的人考虑的问题了。我想提到啊,但我不知道怎么设计这个电路。你必须有个部件可以把edge触发的中断hold住,在适当的时候在re-trigger吧。我数电知识还给老师好多年了。

>>另外,文章缺PIRTable。 这个很重要的,因为MPTable是需要操作系统切换到SMP才会起作用(描述PCI如何连接到IOAPIC),众所周知,SMP之前,操作系统是UP状态,因此需要知道PCI是如何连接到ISA中断的(否者你怎么读硬盘?因为硬盘也是接在PCI总线下游的南桥上的IDE接口上的)。
你说的微软定的那个PIRQ table spec吗?因为这个不是硬件规范,只是从操作系统看PCI中断的连接法。我没看,你帮忙补充吧。

>>在ACPI中解决了这个问题,它提了一个SCI中断(没记错名字吧?),规定该中断时level的,因此可以被pci使用。因此就至少有一个中断 可用了。
我不知道SCI是如何用的,但它是system control interrupt啊,具体怎么用在PCI上我不知道。

发给你了,你帮忙补充一下。

论坛徽章:
0
25 [报告]
发表于 2008-04-28 14:54 |只看该作者

回复 #22 zx_wing 的帖子

另外还有一个问题,你说APIC ID 4 bit, 最多15个,另一个给IOAPIC。
我想知道广播是怎么实现的?难道有另外的线来实现?

论坛徽章:
0
24 [报告]
发表于 2008-04-28 14:44 |只看该作者

回复 #23 bluesky_jxc 的帖子

哦,有个笔误,IDE接口可以不用PCI中断,但是SATA是需要的。

论坛徽章:
0
23 [报告]
发表于 2008-04-28 14:42 |只看该作者

回复 #22 zx_wing 的帖子

我问过haitao同学,他问过老大,但是老大也说记不清楚了,一般说来,APIC并不会mask edge中断。(有待考证)

RemoteIRR的作用就是防止interrupt storm,而edge不会有这个问题,所以不需要RemoteIRR。

但是,我想不通的是,remoteIRR如果对Edge起作用会有什么问题,如果能够起作用,那么mask edge中断就不会有问题了,你的文章也没有提到这个问题。

另外,文章缺PIRTable。 这个很重要的,因为MPTable是需要操作系统切换到SMP才会起作用(描述PCI如何连接到IOAPIC),众所周知,SMP之前,操作系统是UP状态,因此需要知道PCI是如何连接到ISA中断的(否者你怎么读硬盘?因为硬盘也是接在PCI总线下游的南桥上的IDE接口上的)。

在ACPI中解决了这个问题,它提了一个SCI中断(没记错名字吧?),规定该中断时level的,因此可以被pci使用。因此就至少有一个中断 可用了。

有时间加上吧,如果你没有时间,把word传给我,我来补充

论坛徽章:
0
22 [报告]
发表于 2008-04-28 14:21 |只看该作者
原帖由 bluesky_jxc 于 2008-4-28 14:17 发表
对于PIC,IMR即使置位,IRR也会设置的。IMR不影响IRR,只是不允许对应IRR参与中断优先级仲裁。

IRR是指PIC的IRR吗?
看来我看的还是不仔细啊,内核邮件列表有人说对于edge中断,即使mask掉,也会被pending住,在unmask的时候发给CPU。看来就是这个机制保证ISA接PIC不丢中断了。
补充的好,又搞清楚一个问题。不知道APIC有这个功能不,我当时找了找,没找到。

论坛徽章:
0
21 [报告]
发表于 2008-04-28 14:17 |只看该作者

回复 #20 zx_wing 的帖子

对于PIC,IMR即使置位,IRR也会设置的。IMR不影响IRR,只是不允许对应IRR参与中断优先级仲裁。

论坛徽章:
0
20 [报告]
发表于 2008-04-28 14:09 |只看该作者
多谢大家顶帖
但我更希望大家看了后多提一点问题或多指出一些文中的错误。
不要怕问的问题简单,或者太异想天开。发文章的目的就是希望能借此和大家讨论把很多不清楚的地方搞清楚。
dengcainiao 兄弟就问了我很多问题,给了我不少启发让我纠正文中的错误。一个人能想到的东西毕竟有限,希望能集思广益。

比如dengcainiao 兄弟问我
就是为什么level触发不像edge触发一样也让io apic在CPU处理中断的时候也可以发送新的中断信息到LOCAL APIC呢?

我原先想是电路实现保证的,后来又想想这样实现有什么好处,得出的结论是:
在一个中断在处理过程中,让同一类型的中断发送到LAPIC是种落后的机制。
因为中断只是要通知CPU该为设备服务了,驱动程序完全可以一次处理设备发生的多个中断。
例如:
设备发生了第一次中断A,CPU开始处理 ---->在CPU执行设备的中断处理函数前第二次中断发生了 ---> IOAPIC阻止该中断到达CPU ---->CPU执行中断处理函数,该函数发现设备有两次中断,一次处理掉 ---->设备拉低中断线

这样,就避免多打断CPU一次。更为先进的APIC,例如IA64平台的SAPIC,就有中断批处理的功能,减少因每次中断而引起的上下文切换开销。也是类似道理。


欢迎类似的问题

[ 本帖最后由 zx_wing 于 2008-4-28 14:12 编辑 ]
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP