欢迎来到天天文库
浏览记录
ID:39899637
大小:328.36 KB
页数:26页
时间:2019-07-14
《chp7下半段和推后执行的工作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章下半段和推后执行的工作下半部下半部的任务主要是执行与中断相关的工作,这些工作没有被中断服务程序本身完成.主进程中断topbottom1.与时间相关的工作2.与硬件相关的工作3.不希望被其他中断打断其他工作历史最初的机制:BH2.5内核后被废止任务队列2.5内核之后被工作队列替代2.3内核引入软中断(softirq)和tasklet32个软中断,实际上只用到6个tasklet实现于软中断之上2.5内核引入工作队列为什么要把中断分为两部分中断服务程序异步执行,可能会中断其他的重要代码,包括其他中断服务程序。因此,为了避免被中断的代码延迟太长的时间,中断服
2、务程序需要尽快运行.希望限制中断服务程序所做的工作,因此处理中断的时间越短越好。中断服务程序只作必须的工作,其他的工作推迟到以后处理。2.6内核的三种方法:softirqs,tasklet,和workqueue软中断Softirqskernel/softirq.c定义了一个32个元素的结构数组/*本结构代表了一个软中断项*/structsoftirq_action{void(*sction)(structsoftirq_action*);/*带执行的函数*/void*data;/*传给函数的指针*/}固定–登记的softirqs最大数目不能动态改变.工作时
3、允许中断.一个softirq不能抢占另一个。它只能被中断服务程序抢占.另一个softirq,甚至是同一个可运行于另一个CPU.使用软中断分配索引注册处理程序open_softirq(索引号,处理程序,NULL)触发软中断raise_softirq(索引号)softirq_pending(CPU)宏:返回指定CPU上未处理的软中断软中断优先级Softirq描述HI_SOFTIRQ0优先级最高的taskletsTIMER_SOFTIRQ1定时器的下半部NET_TX_SOFTIRQ2发送网络数据报NET_RX_SOFTIRQ3接受网络数据报SCSI_SOFTIR
4、Q4SCSI的下半部TASKLET_SOFTIRQ5Tasklets软中断的执行中断处理程序在返回前标记它的软中断,使其在稍后执行检查和执行待处理的软中断的时机:-从硬件中断代码返回;-在ksoftirqd内核线程中;-显式检查和处理软中断的代码中使用软中断的情况:对时间要求最严格和最重要的下半部使用-网络和SCSI设备-内核定时器和taskletSoftirqs的执行u32pending=softirq_pending(cpu);if(pending){structsoftirq_action*h=softirq_vec;softirq_pending(
5、cpu)=0;do{if(pending&1)h->action(h);h++;pending>>=1;}while(pending);}111031Bitmap①Pending=100101②Pending=001010③Pending=010100④Pending=101000⑤Pending=010000⑥Pending=100000100101Tasklet的类型Tasklet优先级Softirq描述HI_SOFTIRQ0优先级最高的taskletsTIMER_SOFTIRQ1定时器的下半部NET_TX_SOFTIRQ2发送网络数据报NET_RX_
6、SOFTIRQ3接受网络数据报SCSI_SOFTIRQ4SCSI的下半部TASKLET_SOFTIRQ5TaskletsTasklets的结构structtasklet_struct{structtasklet_struct*next;unsignedlongstate;//见下atomic_tcount;/*referencecount锁*/void(*func)(unsignedlong);/*tasklet处理函数*/unsignedlongdata;/*tasklet处理函数的参数*/};File:includeinterrupt.hEnum{T
7、ASKLET_STATE_SCHED,/*Tasklet已被调度*/TASKLET_STATE_RUN/*Tasklet正在运行(只用于SMP)*/};TaskletsTasklets实现于softirq之上,实际上也是softirqs.Tasklet同时只运行于一个CPU.注:softirq,甚至是同一个可运行于另一个CPU.不同的tasklets可同时运行于不同的CPU.tasklet_schedule()的调度过程检查tasklet的状态是否为TASKLET_STATE_SCHED,如果是,则立即返回;保存中断状态,禁止本地中断;把需要调度的task
8、let指定处理器的tasklet_vec或tasklet_hi_v
此文档下载收益归作者所有