关于 进程休眠

Panda_熊猫 2012-12-25 10:03:55
如果已经禁止了中断,不能休眠。 原因为什么

自旋锁,或原子上下文,休眠的后果?
...全文
233 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
流水恋歌 2012-12-29
  • 打赏
  • 举报
回复
PS:头像确实很亲切,哈哈
流水恋歌 2012-12-29
  • 打赏
  • 举报
回复
第三个问题: 原子上下文 可否被中断 如,自旋锁 在第三个问题: 原子上下文 可否被中断 如,自旋锁 在执行原子上下文时, 中断会响应?? 解答下,如果你没加其他什么操作,执行原子上下文时,中断会相应的,但是你会发现,由于原子操作不能睡眠,是很快完成的,所以如果原子上下文出现中断,这样原子操作就被打断了,这样是不好的。所以,我们在驱动设计时候,在原子上下文有一个关中断的操作,当原子上下文结束时候,再开中断,这样在原子上下文做关闭和打开中断的操作就是为了避免在执行原子上下文时, 中断会响应。
Panda_熊猫 2012-12-29
  • 打赏
  • 举报
回复
[quote=引用 5 楼 weiqing1981127 的回复:] quote] 咱俩的头像 从各个方面看,都很对称: 男 女 头像中头的方向 对称 还有头像的 宽窄 表情
Panda_熊猫 2012-12-28
  • 打赏
  • 举报
回复
第三个问题: 原子上下文 可否被中断 如,自旋锁 在执行原子上下文时, 中断会响应?
流水恋歌 2012-12-26
  • 打赏
  • 举报
回复
一旦假如,检查不仔细,在原子上下文(如自旋锁中),不小心引入休眠的代码。很可能会出现什么后果呢? 这样可能就会出现死锁,具体讲,如果原子上下文中,例如自旋锁中你引入了休眠,由于你在原子上下文前进行了一个获取自旋锁的操作,理论上要求你立马释放锁,所以,要求不能睡眠。如果你在自旋锁中你引入了休眠,那么这个原子上下文就会休眠,而假如此时有另一个进程被执行,同时该进程第一步是获取在休眠进程中获取的同一个自旋锁,这样,你现在的进程就无法获取自旋锁而一直自旋着,这样就进入死锁状态。所以,原子上下文不能休眠。
流水恋歌 2012-12-26
  • 打赏
  • 举报
回复
第一问:因为中断分为上半部和下半部,而上半部要求迅速执行,把可以延缓执行的放在下半部。常说的中断是指的是上半部,所以需要快速执行完毕,这样就不能在中断中睡眠了,因为一旦随眠,中断就不能快速执行完毕了。 第二问:可以休眠的同步操作,一般用在进程上下文,却不能用在中断上下文的。
Panda_熊猫 2012-12-26
  • 打赏
  • 举报
回复
休眠的时候你不能有资源或占有中断。这个应该好理解吧。你一旦禁止了中断去休眠,谁知道你什么时候起来呀,那中断在你睡着了时一直都不能被别人用,你也不能用,那不是浪费吗? 我觉得上面说的很对。
Panda_熊猫 2012-12-26
  • 打赏
  • 举报
回复
第二问, 自旋锁,或原子上下文,休眠的后果? 我是想知道,一旦假如,检查不仔细,在原子上下文(如自旋锁中),不小心引入休眠的代码。很可能会出现什么后果呢。 请大家畅所欲言。
Panda_熊猫 2012-12-26
  • 打赏
  • 举报
回复
引用 1 楼 weiqing1981127 的回复:
第一问:因为中断分为上半部和下半部,而上半部要求迅速执行,把可以延缓执行的放在下半部。常说的中断是指的是上半部,所以需要快速执行完毕,这样就不能在中断中睡眠了,因为一旦随眠,中断就不能快速执行完毕了。 第二问:可以休眠的同步操作,一般用在进程上下文,却不能用在中断上下文的。
我的第一个问题的意思,不是说,为什么在中断上下文中不能休眠。 而是,如果CPU 已经禁止了 中断 , 就不能休眠。 的原因是什么

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧