存档

文章标签 ‘睡眠’

中断中为什么不能睡眠

2011年11月14日 1 条评论

中断上下文或者其他不允许阻塞的代码中为什么不能调用会睡眠的函数?

“睡眠”指的是进程的状态,tast_struct结构体内的state专门描述进程状态,变为”TASK_INTERRUPTIBLE”或者“TASK_UNINTERRUPTIBLE”的时候就变成睡眠状态了。内核调度机制会在state变为”TASK_RUNNING”时重新调度。中断上下文中内核运行中断处理程序,不属于任何进程,所以一旦休眠,就没有办法唤醒(睡眠和唤醒都是针对”进程“而言)。

从中断本身的特点,要求立即响应,如系统内的定时器就是用时钟中断产生的,如果时钟中断休眠,定时器就没法用了。

分类: 内核 标签: , ,