- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux中断机制
Linux中断机制(2)--软中断 梁 冰 北大网络分布式实验室 2004.11.15 1.软中断简介 回忆前面的知识 硬中断最后的处理do_IRQ()函数中,最后的一个处理是什么?do_softirq()! 为什么要软中断? 硬中断中是需要尽快响应和处理的,不能将太多时间放在中断事件的处理上,否则会丢失掉另外的相同类型的中断 一些中断需要处理的工作不是那么急迫 硬件中断打断CPU,软中断打断内核序列 2.软中断分类 Linux2.4.*系列有三种可延迟中断内核函数: 软中断(softirq) 小任务(tasklet) 下半部分(bottom half) 三者之间关系 Tasklet用softirq实现,bottom half用tasklet实现 3 软中断,tasklet及下半部 软中断 非动态分配,需要内核编译 同类软中断可以并发运行在几个CPU上 Tasklet 可以编程时动态分配,内核运行时,模块载入 不同种类的taskelt可以并发在接个CPU上运行,同种的不行 下半部分 非动态分配,需要内核编译 下半部分不能并发在几个CPU上运行 注意 任何可延迟函数都不能与其他的可延迟函数在同一个CPU上交错执行。 3.1 可延迟函数的一般操作 初始化(Initialization) 定义一个新的可延迟函数 激活(Activation) 标记一个可执行函数成为pending态 激活可以在任何时候进行(中断处理中也可) 屏蔽(Masking) 有选择地屏蔽一个可延迟函数,使它即使被激活也不会被内核执行 执行(Execution) 执行一个可延迟函数和其他任何的可延迟函数 给定CPU激活的可延迟函数一般在同一CPU上运行 4 可延迟函数---软中断详解 在2.4.*内核中,定义了4种软中断 低下标意味着高优先级,软中断函数从下标0开始执行 4.1 软中断主要数据结构 Softirq_vec数组 由softirq_action结构体组成的数组,默认内核只有前4项有用。 struct softirq_action { void (*action)(struct softirq_action *); void *data; }; 4.1 软中断主要数据结构 Irq_stat 是irq_cpustat_t数组,每一个CPU一个。其实在硬中断处理部分已经使用了其中的许多数据项了。 typedef struct { unsigned int __softirq_pending; unsigned int __local_irq_count; unsigned int __local_bh_count; unsigned int __syscall_count; struct task_struct * __ksoftirqd_task; /* waitqueue is too large */ unsigned int __nmi_count; /* arch dependent */ } ____cacheline_aligned irq_cpustat_t; 4.1 软中断数据结构 Irq_cpustat_t __softirq_pending字段存放一组标志表示挂起的软中断 __local_bh_count字段,禁止软中断的执行,为0则软中断被激活,为负数则被禁止 __ksoftirq_task字段,存放ksoftirqd_CPUn内核线程的进程描述符,这种内核线程致力于可延迟函数的执行 4.2 软中断的相关调用 初始化 open_softirq()函数处理软中断的初始化,三个函数分别是软中断下标,要执行的软中断的 激活 __cpu_raise_softirq宏激活 cup_raise_softirq函数激活,同时唤醒ksoftirq_CPUn内核线程 4.2 软中断的相关调用 屏蔽 __local_bh_count为0时打开软中断,为负(正?)数时禁止 执行 检查软中断的挂起是在内核代码的几个点上进行的。且挂起点的个数和位置随内核版本的变化而改变。以下以2.4.*内核为例: 当local_bh_enable宏重新接活软中断时 当do_IRQ完成时处理I/O的中断时 当smp_apic_timer_interrupt函数完成了处理一个本地时钟中断时 一个特定的ksoftirq_CPU内核线程被唤醒时 当在网络接口卡上获取一个数据包时 4.2 软中断的相关调用 关键代码: asmlinkage void do_softirq() { int cpu = smp_processor_id(); __u32 pending; unsigned long flags; __u32 mask;
您可能关注的文档
- Electromagnetics电磁学-物理与电子科学学院.PDF
- Einstein的革命性思维-西安电子科技大学电子工程学院.PDF
- ENSP模拟器介绍.DOC
- FD86T导压型液位变送器-淄博西创.DOC
- FHZHJSZ0178水质有机磷农药的测定毛细柱气相色谱法.PDF
- FHZHJSZ0156水质可吸附有机卤素的测定离子色谱法-仪器信息网.PDF
- EPROM的存储单元电路.PPT
- ff[l2]发明专利申馆公布说明书-清华大学深圳研究生院.PDF
- FIN-AR应收上机模拟试题(ANS).DOC
- Form研究方案模板-仁济医院.DOC
- 场地脚手架工程施工方案(3篇).docx
- 2024年浙江省丽水市松阳县玉岩镇招聘社区工作者真题及参考答案详解一套.docx
- 2024年河南省郑州市惠济区古荥镇招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市淳安县文昌镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省台州市三门县小雄镇招聘社区工作者真题带答案详解.docx
- 2024年浙江省宁波市余姚市河姆渡镇招聘社区工作者真题及完整答案详解1套.docx
- 2024年浙江省丽水市景宁畲族自治县雁溪乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省杭州市临安市板桥乡招聘社区工作者真题及答案详解一套.docx
- 2024年湖北省宜昌市点军区土城乡招聘社区工作者真题及答案详解一套.docx
- 2024年浙江省台州市路桥区桐屿街道招聘社区工作者真题附答案详解.docx
最近下载
- JGJ33-2012 建筑机械使用安全技术规程.docx VIP
- TB_10307-2020 铁路通信、信号、信息工程施工安全技术规程.docx VIP
- 简明新疆地方史读本电子版 .pdf VIP
- 基于PLC的加热反应炉自动控制系统设计.pdf VIP
- 抗病毒药物的合理使用课件.pptx VIP
- TB10181-2017 铁路隧道盾构法技术规程.docx VIP
- 静脉输液课件(共87张PPT).pptx VIP
- 《商业银行经营与管理》22春平时作业1答卷.doc VIP
- 2024-2025学年小学美术五年级上册桂美版(2024)教学设计合集.docx
- 2022年版初中物理课程标准新课标考试题库及答案1 .pdf VIP
文档评论(0)