spin_lock_irqsave关中断后,为什么要再禁止抢占
来源:互联网 发布:怎么样提高淘宝销量 编辑:程序博客网 时间:2024/03/29 07:41
{
unsigned long flags;
local_irq_save(flags);
preempt_disable();
spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
。。。
我们知道,linux的进程调度时机有:
1、进程状态转换的时刻:进程终止、进程睡眠
2、当前的进程的时间片用完(current->counter=0)
3、设备驱动程序主动调用schedule
4、进程从中断、异常及系统调用返回用户态
所以,你最开始的疑问:“关中断只是屏蔽了中断,并没有阻止任务切换,高优先级的任务任然可以抢占CPU并访问临界区和共享变量啊”
关了中断,就禁止了抢占,如果当前任务也没有进行主动调度,当然系统中也就不会出现比当前优先级更高的任务进入就绪了,也就谈不上去“抢占CPU并访问临界区和共享变量”了。(作者这里说加了条件“如果当前任务也没有进行主动调度”,那如果当前任务进行了主动调度会怎么样?我认为,若是在临界区中进行了主动调度,那么后果就是提问的人说的:“关中断只是屏蔽了中断,并没有阻止任务切换,高优先级的任务任然可以抢占CPU并访问临界区和共享变量”。by imjacob)
由以下网址为证:http://www.gdjy.com.cn/xuexi/UNIX-XIUGAI/ch02/os0203.htm 中2.3.4为证。
上面是这么说的:
关 中 断 之 后, 任 何 外 部 事 件 都 不 能 打 扰 处 理 机 连 续 执 行 临 界 区 程 序。 如 果 临 界 区 程 序 本 身 并 不 包 含 使 它 的 进 程 转 变 为 封 锁 状 态 的 因 素, 那 么 这 种 方 法 就 能 保 证 临 界 区 作 为 一 个 整 体 执 行。 这 种 方 法 的 优 点 是 简 单、 可 靠, 但 是 它 也 有 一 定 的 局 限 性 和 若 干 不 足 之 处。
(1) 它 不 能 用 于 多 处 理 机 系 统。 其 原 因 是: 由 于 该 系 统 中 的多 个 处 理 机 都 有 其 各 自 的 中 断 开 关, 因 此 一 个 处 理 机 并 不 能 阻 止 在 其 它 处 理 机 上 运 行 的 进 程 进 入 同 类 临 界 区。
(2) 在 临 界 区 中 如 果 包 含 有 使 执 行 它 的 进 程 有 可 能 进 入 封 锁 状 态 的 因 素, 则 也 不 能 使 用 这 种 方 法。因 为 在 该 进 程 进 入 封 锁 状 态 后, 系 统 将 调 度 另 一 进 程 使 用 处 理 机, 如 果 需 要, 该 进 程 也 可 以 执 行 临 界 区 程 序, 不 会 受 到 任 何 阻 拦, 所 以 在 这 种 情 况 下, 开、 关 中 断 不 能 实 施 临 界 区 互 斥。
(3) 如 果 临 界 区 比 较 长, 则 本 法 会 降 低 中 断 响 应 速 度。
(4) 这 是 一 把 锁 处 理 各 类 临 界 区, 不 必 要 地 扩 大 了 互 斥 范 围。
- spin_lock_irqsave关中断后,为什么要再禁止抢占
- spin_lock_irqsave关中断后,为什么要再禁止抢占呢,不多余吗?
- 禁止抢占
- 在spin_lock_irqsave与spin_unlock_irqrestore中的内核抢占
- spin_lock_irqsave
- .场效应管在漏端预夹断后,为什么还有漏电ID
- 9.9 内核同步方法_禁止抢占
- [理解] 为什么我的spin_lock_irqsave()没有锁住时钟中断?
- 为什么我的spin_lock_irqsave()没有锁住时钟中断?
- Linux内核之禁止中断和禁止内核抢占
- Qt5中设置禁止软键盘窗口抢占焦点
- 为什么德国禁止学前教育
- 为什么要禁止在正式程序中使用sleep语句?
- 苹果为什么要禁止 JSPatch 等热更新技术?
- 我为什么要禁止回复,以及呵呵呵呵呵
- spin_lock & spin_lock_irqsave
- MSA2312 enclosure 闪断后
- 关中八大怪
- js实现图片变换
- 【昊昊带你学】常见的几种排序2(qsort)
- JSPDirectives
- 第六堂课后作业
- 黑马程序员——java网络编程
- spin_lock_irqsave关中断后,为什么要再禁止抢占
- 九宫格遍历(dfs)深搜图示
- 第五次上机
- 【昊昊带你学】深搜(DFS)
- 【30篇突击 android】源码统计 十七
- 析构函数不能失败的理由
- Hdu 1075+ Hdu 1251 (动态Trie)
- andriod开发之自动开关机实现代码
- Ubuntu 12.10安装后需要做的那些事