最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt

最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt

ID:62260053

大小:229.00 KB

页数:48页

时间:2021-04-24

最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt_第1页
最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt_第2页
最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt_第3页
最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt_第4页
最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt_第5页
资源描述:

《最新linux内核源代码分析-中断处理程序与内核同步PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、linux内核源代码分析-中断处理程序与内核同步系统调用和中断(回顾上节课内容)系统调用原理INT80H中断描述符(80H指向system_call)系统调用表(system_call_table)系统调用编号(系统调用在系统调用表中的位置)中断中断描述符中断号中断处理程序中断处理程序的上、下半部机制中断处理程序为什么要分上下半部中断处理程序以异步方式执行,可能打断重要的操作的执行,越快越好中断处理程序屏蔽其他中断,执行越快越好中断处理程序往往需要对硬件操作,通常有很高的时限要求中断处理程序不在进程的上下文中运行,所以不能阻塞以上说明:中断处理程序必须执

2、行快,否则影响并发性;中断处理程序在某些时候必须屏蔽其他的中断。把必须屏蔽中断的一些操作放在上半部把有些操作放在下半部,可以被打断这就是操作系统中断处理的上下半部机制。(网络通信的例子)软中断机制32个是最大值,目前用到6个软中断处理程序Voidsoftirq_handler(structsoftirq_action*)(传的是整个结构)当内核运行一个软中断处理程序的时候,会执行这个action函数如若my_softirq指向softirq_vec数组的某项,内核已下方式调用函数:My_softirq->action(mysoftirq);执行软中断标记

3、(raisingthesoftirq)处理完一个硬件中断后在ksoftirqd内核线程中显示检查和执行待处理软中断的代码中软中断机制do_softirq(不管执行的时机,软中断都要在do_softirq中执行)核心部分代码:u32pending=softirq_pending(cpu);if(pending){structsoftirq_action*h=softirq_vec;softirq_pending(cpu)=0;do{if(pending&1)h->action(h);h++;pending>>=1;}while(pending);软中断机制

4、使用软中断分配索引中,已用的:HI_SOFTIRQ0优先级高的TASKLetsTIMER_SOFTIRQ1NET_TX_SOFTIRQ2NET_RX_SOFTIRQ3SCSI_SOFTIRQ4TASKLET_SOFTIRQ5添加自己的项时要根据优先级定义加入,一般在SCSI的下面。软中断机制注册你的处理程序OPEN_SOFTIRQ(NET_TX_SOFTIRQ,actions,NULL);触发你的软中断Raise_softirq(NET_TX_SOFTIRQ)(在你的中断处理程序里触发)与中断处理程序一起的一般处理过

5、程。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机制调度tasklet

6、sTasklets放在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_actio

7、n()做的工作:禁止中断将当前处理器上的该链表清空允许中断循环遍历链表上每一个待处理的tasklet若是多处理器系统,看是否RUN,若是下一个若没有执行,设为RUN检查count是否为0,若不是,下一个调用执行TASKLET,后清空相应的标志。下一个Tasklets机制使用tasklets声明TaskletDECLARE_TASKLET(name,func,data)DECLARE_TASKLET_DISABLED(…)以上是静态的方式Tasklet_init(t,tasklet_handler,dev);/*动态创建*/编写处理程序Tasklet_ha

8、ndler(unsignedlongdata)Tasklets机制调度自己的ta

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。