中断上下文以及下文延后执行
中断的上下文与进程上下文并没有什么瓜葛,当执行一个中断处理函数时,内核处于中断上下文。由于中断相当于打断了当前执行的程序,而且中断也没有后备的进程,所以中断上下文不可以睡眠(注意某些函数会睡眠),中断处理也必须做到迅捷,有一定的时限要求。
中断处理程序存在希望中断程序运行的尽量快以及希望中断处理程序完成的工作量多这一对矛盾。因此我们一般将中断分为上下两个部分,成为上半部,下半部。上半部完成有严格时限的工作(必须),例如回复硬件等,这些工作都是在禁止其他中断情况下进行的。能够延后执行的都放在下半部进行。
上半部只能通过中断处理程序实现,下半部的实现目前有3种实现方式,分别为:1、软中断、2、tasklet 3、工作队列(work queues).
软中断用的比较少,这里不做介绍。
tasklet运行于中断的上下文,不允许睡眠
1)定义一个tasklet_struct结构(也可以通过宏来创建)
struct tasklet_struct mytasklet;
2)定义一个处理函数(执行延后的工作任务)
void my_tasklet_func(unsigned long);
3)将tasklet结构与my_tasklet_func(data)函数相关联(将处理程序封装到tasklet_struct)
tasklet_init(&my_tasklet, my_tasklet_func, data);
4)调度tasklet
tasklet_schedule(&my_tasklet);
工作队列的本质就是将工作交给内核线程events处理, 运行在进程的上下文中,工作队列允许睡眠
我们把推后的任务称之为工作,描述他的数据结构为work_struct.这些工作以队列结构组织成工作队列(workqueue),其数据结构为
workqueue_struct.而工作线程就是负责执行工作队列中的工作。系统默认的工作线程为events。
1)定义一个工作队列
struct work_struct my_wq;
2 )定义一个处理函数 (执行延后的工作任务)
void my_wq_func(unsigned long) ;
3)初始化工作队列并将其与处理函数绑定(将处理程序封装成了一个work_struct)
INIT_WORK(&my_wq, my_wq_func);
4)调度工作队列执行
schedule_work(&my_wq);
参考资料:LINUX内核设计与实现
中断上下文以及下文延后执行相关推荐
- 私有变量访问/延后执行代码块
1.私有变量访问 NSString *str; Mobj *obj = [[Mobj alloc] init]; object_getInstanceVariable(obj, "mt_&q ...
- 进程上下文和中断上下文
1.进程上下文 进程上下文实际上是进程执行活动全过程的静态描述.我们把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文,把正在执行的指令和数据在寄存器和堆栈中的内容称为正文,把待执行的指令和 ...
- 进程上下文与中断上下文的理解
一.什么是内核态和用户态 内核态:在内核空间执行,通常是驱动程序,中断相关程序,内核调度程序,内存管理及其操作程序. 用户态:用户程序运行空间. 二.什么是进程上下文与中断上下文 1.进程上下文: ( ...
- 【中断】中断上下文、进程上下文
Linux中断知识汇总: [深入理解Linux内核][中断]内容汇总帖 目录 中断上下文和进程上下文 什么是中断上下文? 什么是进程上下文? 为什么要进行不同之间状态的切换? 什么情况下进行用户态到内 ...
- 对Linux内核中进程上下文和中断上下文的理解
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间.现代的CPU都具有不同的操作模式,代表不同的 级别,不同的级别具有不同的功能,在较低的级别中将禁止某 ...
- 进程上下文与中断上下文
最近学习驱动程序中总是发现在某些资料或书籍中提到进程上下文和中断上下文,但是又都没有讲解什么是上下文:因此笔者查阅资料补充了一下所谓的Linux上下文知识.(注:以下知识度娘而来) 上下文(conte ...
- 进程上下文、中断上下文及原子上下文
谈论进程上下文 .中断上下文 . 原子上下文之前,有必要讨论下两个概念: a -- 上下文 上下文是从英文context翻译过来,指的是一种环境.相对于进程而言,就是进程执行时的环境: 具体来说就是各 ...
- 用户空间与内核空间,进程上下文与中断上下文[总结]【转】
转自:http://blog.csdn.net/lizuobin2/article/details/51791863 本文转载自:http://www.cnblogs.com/Anker/p/3269 ...
- linux中断--进程上下文和中断上下文
一.前言 中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断.这个处理过程中的上下文就是中断上下文. 为什么可能导致睡眠的函数都不能在中断上下文中使用呢? 首先睡眠的含义 ...
最新文章
- setTimeout 第一个参数类型
- 互联网协议 — BGP 边界网关协议 — Router(路由器)
- ipsec***原理与配置
- c语言链表删除前一个节点,最简单的链表删除第一个节点时释放内存的问题
- ASP.NET MVC
- 王式安概率论与数理统计基础课手写笔记-第一章概率与事件-第二章随机变量及其分布
- win7冒险岛java,win7玩冒险岛不兼容怎么办?解决win7玩冒险岛不兼容的方法
- 恶作剧程序之炸弹窗口
- 小程序中神秘的用户数据
- java快排原理_Java数据结构与算法——快速排序
- php mysql 一级分类_无限级分类 for PHP+Mysql
- Windows 8 Directx 开发学习笔记(四)示例程序小结
- Atitit 常见项目角色与职责 目录 1.1. 常见项目角色与职责	1 1.2. 解决问题思路:一般百度,问同事,问上一级	1 1.3. 解决问题时限:与跳过法	1 1.4. 解决方法,一般实
- 在北京租房 舒舍的租客素质怎么样?
- 微信开放平台、公众平台的区别
- 注意力机制-CA注意力-Coordinate attention
- css translate 坐标,CSS3 位移转换 translate3d()translatez()应用实例
- Android获取明天日期
- MySQL之Xtrabackup备份与恢复
- 线上沉浸式购物,VR购物让店铺营销更有差异化!