




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LINUX中断处理程序及内核同步 系统调用和中断 回顾上节课内容 中断处理程序的上 下半部机制LINUX下半部处理机制同步的经典问题LINUX内核同步实现实验问题解答 系统调用和中断 回顾上节课内容 系统调用原理INT80H中断描述符 80H指向system call 系统调用表 system call table 系统调用编号 系统调用在系统调用表中的位置 中断中断描述符中断号中断处理程序 中断处理程序的上 下半部机制 中断处理程序为什么要分上下半部中断处理程序以异步方式执行 可能打断重要的操作的执行 越快越好中断处理程序屏蔽其他中断 执行越快越好中断处理程序往往需要对硬件操作 通常有很高的时限要求中断处理程序不在进程的上下文中运行 所以不能阻塞以上说明 中断处理程序必须执行快 否则影响并发性 中断处理程序在某些时候必须屏蔽其他的中断 把必须屏蔽中断的一些操作放在上半部把有些操作放在下半部 可以被打断这就是操作系统中断处理的上下半部机制 网络通信的例子 上 下半部怎样分开 如果一个任务对时间非常敏感 将其放在中断处理程序中 上半部 执行 如果一个任务和硬件相关 放在中断处理程序执行如果一个任务要保证不被其他中断打断 则放在中断处理程序执行其他的所有任务 考虑放在下半部执行 下半部实现机制 LINUX的上半部就是中断处理程序下半部有多种机制软中断机制Tasklet机制工作队列机制 软中断机制 此处的软中断和系统调用用大INT80H不同 是操作系统支持的一种中断机制 软中断机制的实现软中断在编译期间静态分配 由softirq action结构表示 定义在中 Structsoftirq action void action structsoftirq action 将要执行的函数 void data 传递给函数的参数 Kernel softirq c中定义了一个包含有32个该结构体的数组Staticstructsoftirq actionsoftirq vec 32 软中断机制 32个是最大值 目前用到6个软中断处理程序Voidsoftirq handler structsoftirq action 传的是整个结构 当内核运行一个软中断处理程序的时候 会执行这个action函数如若my softirq指向softirq vec数组的某项 内核已下方式调用函数 My softirq action mysoftirq 执行软中断标记 raisingthesoftirq 处理完一个硬件中断后在ksoftirqd内核线程中显示检查和执行待处理软中断的代码中 软中断机制 do softirq 不管执行的时机 软中断都要在do softirq中执行 核心部分代码 u32pending softirq pending cpu if pending structsoftirq action h softirq vec softirq pending cpu 0 do if pending 软中断机制 使用软中断分配索引中 已用的 HI SOFTIRQ0优先级高的TASKLetsTIMER SOFTIRQ1NET TX SOFTIRQ2NET RX SOFTIRQ3SCSI SOFTIRQ4TASKLET SOFTIRQ5添加自己的项时要根据优先级定义加入 一般在SCSI的下面 软中断机制 注册你的处理程序OPEN SOFTIRQ NET TX SOFTIRQ actions NULL 触发你的软中断Raise softirq NET TX SOFTIRQ 在你的中断处理程序里触发 与中断处理程序一起的一般处理过程 Tasklets机制 基于软中断实现的下半部机制接口更简单 锁保护也要求较低Tasklets的实现 linux interrupt h Structtasklet struct Structtasklet struct next Unsignedlongsate 0 TASKLET STATE SCHED TASKLET STATE RUN Atomic tcount 引用计数器 0允许执行 否则禁止 Void func unsignedlong 执行函数 Unsignedlongdata Tasklets机制 调度taskletsTasklets放在tasklet vec和task hi vec两个链表中 由tasklet schedule 和tasklet hi schedule 进行调度Task schedule执行的步骤 检查tasket的状态是否为tASKLET STATE SCHED 若是返回 保存中断状态 然后禁止本地中断把需要调度的tasklet放在每个处理器的tasklet vec表头上去 唤起TASKLET SOFTIRQ或TASKLET HI SOFTIRQ 恢复中断 Tasklets机制 Tasklet action 和tasklet hi action 做的工作 禁止中断将当前处理器上的该链表清空允许中断循环遍历链表上每一个待处理的tasklet若是多处理器系统 看是否RUN 若是下一个若没有执行 设为RUN检查count是否为0 若不是 下一个调用执行TASKLET 后清空相应的标志 下一个 Tasklets机制 使用tasklets声明TaskletDECLARE TASKLET name func data DECLARE TASKLET DISABLED 以上是静态的方式Tasklet init t tasklet handler dev 动态创建 编写处理程序Tasklet handler unsignedlongdata Tasklets机制 调度自己的tasklet实际上是标记 或称挂起Tasklet schedule 总结tasklet机制 Ksoftirqd 软中断和tasklet机制中 当中断或tasklet频繁发生时其处理方式要慎重选择 尽快执行 系统忙时 用户进程得不到响应 滞后执行 系统闲的时候 中断处理的也不快 折中的办法 低优先级核心进程专门处理软中断 Ksoftirqd n For If softirq pending cpu shedule set current state TASK RUNNING While softirq pending cpu Do softirq If need resched schedule 工作队列机制 工作队列机制和上面两中机制不同 它将下半部功能交由内核线程执行 有线程的上下文环境 可以睡眠 工作队列机制的实现提供创建workerthreads的接口提供默认的工作者线程处理排到队列里的下半部工作提供把需要推后执行的任务排到队列里的接口 工作队列机制 表示线程的数据结构Structworkqueue struct Structcpu workqueue structcpu wq NR CPUS Structcpu workqueue struct Spinlock tlock Structlist headworklist wait queue head tmore work Wait queue head twork done Structworkqueue struct wq Tast t thread Structcompletionexit 工作队列机制 表示工作的数据结构Structwork struct Unsignedlongpending Structlist headentry Void func void Void data Void wq data Structtimer listtimer 工作队列机制 核心线程见书81页 处理机制如下 线程将自己设置为休眠状态若工作连表为空 休眠若不空 调用run workqueue 函数执行工作 Run workqueue的执行 p82 当工作链表不空时 选取下一个节点对象 获取要执行的函数和参数 待处理标志清0调用函数重复执行 工作队列机制 工作队列机制的使用创建工作DECLARE WORK name void func void void data Init work 工作队列处理函数voidwork handler void data 对工作进行调度shedule work shedule delayed work cancel 创建新的队列 选择推后任务的处理机制 上下文顺序执行保障软中断中断没有Tasklet中断同类型的不能同时执行工作队列进程没有 加锁的问题 下半部之间下半部与用户进程之间有共享资源的地方要加锁 内核同步问题 临界区临界区就是访问和操作共享资源的代码段 必须保证原子地执行才能保证安全 共享变量的例子 p90 内核同步问题 加锁一个简单共享变量的操作问题还容易解决一些 比如让硬件本身提供原子操作的复合指令 但若是共享的是一个复杂的数据结构 比如一个结构的链表 就不能这样解决啦 加锁的思路是 保证在临界区中执行的线程只有一个 P91 内核同步问题 同步问题一般必须事先设计好 否则很难调试 即使不加处理 有时也很难出现错误 内核中有并发执行 所以也有同步问题 引起并发的原因 中断内核抢占睡眠及用户空间的同步对称多处理 内核同步问题 死锁死锁产生的四个必要条件 内核同步方法 原子操作原子整数操作Atomic dec and test atomic t v 原子位操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业市场推广策略与效果评估工具
- 童话王国的故事1000字(8篇)
- 技术创新与研发项目管理工具
- 员工考勤统计表格:考勤统计月度报告
- 产品包装及说明书标准化设计模板
- 现场应急预案培训课件
- 2025年大模型推理批处理优化(含答案与解析)
- 2025年联邦学习通信延迟优化考题(含答案与解析)
- 药具基本知识培训教材课件
- 第十五章抽样调查
- GB 11122-2025柴油机油
- 锂电池充电安全管理制度
- 大便常规检查
- 广东省深圳市海韵中学2026届中考押题语文预测卷含解析
- 重庆市荣昌区招聘社区工作者后备人选考试真题2024
- 2025年贵州省中考英语真题含答案
- DB42T 1833-2022 河道管理范围钻孔封孔技术规程
- 2025秋 名师金典高考总复习 英语 课件05 第一部分 必修第一册 UNIT 4 NATURAL DISASTERS
- 陶瓷功能检测培训
- 2025至2030中国锅炉行业市场深度调研报告
- 颈椎损伤的急救与护理
评论
0/150
提交评论