- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX中断处理程序及内核同步 系统调用和中断(回顾上节课内容) 中断处理程序的上、下半部机制 LINUX下半部处理机制 同步的经典问题 LINUX内核同步实现 实验问题解答 系统调用和中断(回顾上节课内容) 系统调用原理 INT 80H 中断描述符(80H指向system_call) 系统调用表(system_call_table) 系统调用编号(系统调用在系统调用表中的位置) 中断 中断描述符 中断号 中断处理程序 中断处理程序的上、下半部机制 中断处理程序为什么要分上下半部 中断处理程序以异步方式执行,可能打断重要的操作的执行,越快越好 中断处理程序屏蔽其他中断,执行越快越好 中断处理程序往往需要对硬件操作,通常有很高的时限要求 中断处理程序不在进程的上下文中运行,所以不能阻塞 以上说明:中断处理程序必须执行快,否则影响并发性;中断处理程序在某些时候必须屏蔽其他的中断。 把必须屏蔽中断的一些操作放在上半部 把有些操作放在下半部,可以被打断 这就是操作系统中断处理的上下半部机制。(网络通信的例子) 上、下半部怎样分开 如果一个任务对时间非常敏感,将其放在中断处理程序中(上半部)执行。 如果一个任务和硬件相关,放在中断处理程序执行 如果一个任务要保证不被其他中断打断,则放在中断处理程序执行 其他的所有任务,考虑放在下半部执行。 下半部实现机制 LINUX的上半部就是中断处理程序 下半部有多种机制 软中断机制 Tasklet机制 工作队列机制 软中断机制 此处的软中断和系统调用用大INT80H不同,是操作系统支持的一种中断机制。 软中断机制的实现 软中断在编译期间静态分配(由softirq_action结构表示,定义在linux/interrupt.h中) Struct softirq_action { void (*action)(struct softirq_action*);/*将要执行的函数*/ void *data; /* 传递给函数的参数*/ Kernel/softirq.c中定义了一个包含有32个该结构体的数组 Static struct softirq_action softirq_vec[32]; 软中断机制 32个是最大值,目前用到6个 软中断处理程序 Void softirq_handler(struct softirq_action*)(传的是整个结构) 当内核运行一个软中断处理程序的时候,会执行这个action函数 如若my_softirq指向softirq_vec数组的某项,内核已下方式调用函数: My_softirq-action(mysoftirq); 执行软中断 标记(raising the softirq) 处理完一个硬件中断后 在ksoftirqd内核线程中 显示检查和执行待处理软中断的代码中 软中断机制 do_softirq(不管执行的时机,软中断都要在do_softirq中执行) 核心部分代码: u32 pending = softirq_pending(cpu); if (pending) { struct softirq_action *h = softirq_vec; softirq_pending(cpu) = 0; do { if (pending 1) h-action(h); h++; pending =1;} while (pending); 软中断机制 使用软中断 分配索引 linux/interrupt.h中,已用的: HI_SOFTIRQ 0 优先级高的TASKLets TIMER_SOFTIRQ 1 NET_TX_SOFTIRQ 2 NET_RX_SOFTIRQ 3 SCSI_SOFTIRQ 4 TASKLET_SOFTIRQ 5 添加自己的项时要根据优先级定义加入,一般在SCSI的下面。 软中断机制 注册你的处理程序 OPEN_SOFTIRQ(NET_TX_SOFTIRQ,actions,NULL); 触发你的软中断 Raise_softirq(NET_TX_SOFTIRQ)(在你的中断处理程序里触发) 与中断处理程序一起的一般处理过程。 Tasklets机制 基于软中断实现的下半部机制 接口更简单,锁保护也要求较低 Tasklets的实现(linux/interrupt.h) Struct tasklet_struct { Struct tasklet_struct *next; Unsigned long sate;(0/TASKLET_STATE_SCHED/TASKLET_STATE_RUN) Atomic_t count;/*引用计数器,0允许执行,否则禁
您可能关注的文档
- 新情境下化学方程式的书写.ppt
- CAD制图规范及技巧整理.docx
- 画册印刷应该注意的问题.pptx
- 6--清华附中-植物的生殖.ppt
- 2012二级建造师继续教育学习考试题4.doc
- Transcad培训内容(更新).docx
- 热点课程第十讲--学生讲义-8.25晚雷宇老师讲义.pdf
- pmp培训公式汇总.pdf
- 成熟的人和成熟的社会.docx
- 论现代公司之董事注意义务.pdf
- 2023年12月河南女子职业学院招考聘用人事代理人员笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月广东茂名健康职业学院2024年度赴高校现场招聘13急需紧缺教师笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月广东省高州市2024年度赴陕西师范大学现场公开招聘19名教师1314笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月河南开封杞县事业单位工作人员127人笔试历年典型考题及考点剖析附答案详解.docx
- 2023年山西省教育考试命题中心招考聘用博士研究生笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月安徽马鞍山市博望区新市镇村(社区)招考聘用工作人员笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月安徽蚌埠固镇县县级公立医院使用周转池编制招考聘用工作人员93人笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月山东潍坊高密市人民医院招考聘用“县管乡用”派遣合同制人员7人笔试历年典型考题及考点剖析附答案详解.docx
- 2023年12月山东滨州博兴县教体系统招考聘用中小学教师7人笔试历年典型考题及考点剖析附答案详解.docx
- 2023年11月重庆市石柱土家族自治县教育事业单位面向2024年应届高校毕业生公开招聘35名工作人员3314笔试历年典型考题及考点剖析附答案详解.docx
文档评论(0)