免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 807777 | 回复: 117
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-27 20:47 |只看该作者 |正序浏览
前段时间讨论了中断,写了篇文章,大家帮忙看看。把文章中错误和问题都发到这个帖子里,大家讨论一下,争取把不清楚的地方都搞清楚。
水平有限,写的不好,将就看吧:" />:" />:" />:" />:" />:" />

内容提要
第一章:介绍了PIC和APIC系统的基本架构,提供了了解现代中断系统构成的基本知识。
第二章:论述了Linux如何探测中断硬件,以及如何初始化它们。
第三章:补充了一些中断系统的硬件知识,没有它们你也应该能读懂前两章的内容。
文中用大量“题外话”介绍了中断相关的知识和原理,它们大部分是笔者感兴趣的,例如“Remote IRR的作用”、“Edge中断的共享与丢失”、“伪中断产生的原因”等。以“笔者”开头的文字,是作者自己对一些问题的看法,其中有很多不能解决的疑问,如果你知道答案,希望能通过 xing5820@163.com告诉我,让我及时更新相关内容。同时,非常欢迎指出文中的错误之处。
此文虽取名为“硬件篇”,但不代表就有一个“软件篇”存在。虽然目前内核使用了Generic Interrupt Layer,但这只是对原__do_IRQ()路径的封装,ULK3的内容完全适用于当前内核中断系统,软件相关内容可以参考此书。


al老大帮忙把目录加上了:" />:" />:" />:" />:" />:" />


多谢大家顶帖
但我更希望大家看了后多提一点问题或多指出一些文中的错误。
不要怕问的问题简单,或者太异想天开。发文章的目的就是希望能借此和大家讨论把很多不清楚的地方搞清楚。
dengcainiao 兄弟就问了我很多问题,给了我不少启发让我纠正文中的错误。一个人能想到的东西毕竟有限,希望能集思广益。
比如dengcainiao 兄弟问我
  1. 就是为什么level触发不像edge触发一样也让io apic在CPU处理中断的时候也可以发送新的中断信息到LOCAL APIC呢?
复制代码
我原先想是电路实现保证的,后来又想想这样实现有什么好处,得出的结论是:
  1. 在一个中断在处理过程中,让同一类型的中断发送到LAPIC是种落后的机制。
  2. 因为中断只是要通知CPU该为设备服务了,驱动程序完全可以一次处理设备发生的多个中断。
  3. 例如:
  4. 设备发生了第一次中断A,CPU开始处理 ---->在CPU执行设备的中断处理函数前第二次中断发生了 ---> IOAPIC阻止该中断到达CPU ---->CPU执行中断处理函数,该函数发现设备有两次中断,一次处理掉 ---->设备拉低中断线

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

内容补充:

1、bluesky_jxc老大:对于PIC,IMR即使置位,IRR也会设置的。IMR不影响IRR,只是不允许对应IRR参与中断优先级仲裁。
作者理解:在内核邮件列表也看到有人说道:对于edge中断,即使mask了也会pending住,在unmask的时候发送给CPU。应该就是bluesky_jxc说的这个机制了。该机制保证了edge触发中断不会在mask的时候丢失。
对于APIC情况下的edge中断,操作系统应该不会在处理中断的时候mask它(至少linux没有),最大程度避免了丢失中断的情况。

2、此文中中断初始化的路径只适用于系统使用MP spec的情况,惭愧,现在才发现把ACPI的初始化路径写掉了

Revision History
日期
版本
描述
2008.5.3
1.1
Ÿ 根据 albcamus 同学的建议,修改了文中多处错误
Ÿ 根据Bluesky_jxc同学的补充,修改了edge中断共享与丢失的内容
Ÿ Bluesky_jxc同学补充了PIRQ Table章节
2008.4.27
1.0
最初发表版本

[ 本帖最后由 zx_wing 于 2008-5-3 18:39 编辑 ]

interrupt in linux-1.1.pdf

924.66 KB, 下载次数: 8418

论坛徽章:
0
118 [报告]
发表于 2012-12-18 11:26 |只看该作者
看 了 一半了,然后开始晕了,下次再继续看。
楼主好用心,辛苦了

论坛徽章:
0
117 [报告]
发表于 2012-12-18 11:11 |只看该作者
这个要顶!

论坛徽章:
0
116 [报告]
发表于 2012-10-17 09:50 |只看该作者
要是还有系统的软件篇就更好了

论坛徽章:
0
115 [报告]
发表于 2012-05-21 22:17 |只看该作者
谢谢楼主分享了   

论坛徽章:
0
114 [报告]
发表于 2012-02-17 11:28 |只看该作者
不错,好文章

论坛徽章:
0
113 [报告]
发表于 2011-11-17 16:39 |只看该作者

论坛徽章:
0
112 [报告]
发表于 2011-11-14 20:11 |只看该作者
cu就是好,下载东西不会叫你注册个**帐号 赞一个

论坛徽章:
0
111 [报告]
发表于 2011-11-13 01:02 |只看该作者
不知道看不看的懂 反正我下了  顶一个!

论坛徽章:
0
110 [报告]
发表于 2010-08-29 21:58 |只看该作者
如何将/dev/md0和/dev/md1添加到volgroup卷组中,并在该卷上创建一个名为data的逻辑卷,其大小为180M~200M之间,并挂载在/data目录上????????????
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP