preempt_enable 和 preempt_disable
2016-03-25 16:27
375 查看
允许抢占和禁止抢占。
例如:内核态程序 和 中断处理程序的互斥
因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。
如果在第二条指令执行时发生中断,而中断处理程序也需要将counter加1等操作,那么counter变量的值就会变得紊乱。
因此,只要非中断处理代码要更新一个与中断处理程序共享的数据结构,那么它就首先禁止中断,执行临界段,然后再重新允许中断。在linux中,如下
调用preempt_disable()后当前进程将不能被强抢占
例如:内核态程序 和 中断处理程序的互斥
因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。
load %r0, counter add %r0,1 //发生中断 store %r0,conter |
因此,只要非中断处理代码要更新一个与中断处理程序共享的数据结构,那么它就首先禁止中断,执行临界段,然后再重新允许中断。在linux中,如下
preempt_disable(); load %r0, counter add %r0,1 //发生中断 store %r0,conter preempt_enable(); |
相关文章推荐
- 获取info
- DICOM文件下载
- jvm最终配置
- java 集合框架
- bzoj2150部落战争 最小路径覆盖
- HDU 1224 Free DIY Tour(DP求最短路)
- 展示组织机构的树形组件
- 批处理
- 机器学习实战--kMeans
- jquery validate自定义扩展实例,以及一些常用验证
- Android自定义Dialog带Dialog的显示消失动画(一)
- GCC内嵌汇编
- Light OJ 1354 IP Checking
- 委托开发合同与合作开发合同的区别
- xUtils的介绍
- 简洁的滚动鼠标 改变图片大小js
- Linux的僵尸进程处理2
- C# 中const和readonly的区别
- NGUI实现Sprite裁切成圆形或者椭圆形(不完美)
- MyEclipse Trial Expired,手动注册MyEclipse