【kernel】中断中能不能让出CPU呢?

先说结论:事实上在中断处理中调用schedule或sleep等函数,未必会直接进入panic(部分厂商提供的内核会,这样保证了程序员可以更早的发现问题)

有些内核版本,中断会单独开一些中断栈,并没有task_struct等结构,被调度走了以后,就调度不回来了,那么中断处理就有问题了

但早期有些内核版本中,中断中函数运行的栈是借用内核栈的,想要调度回当前“中断线程”的现场,并不难做到(也就是说可以这么设计,问题的关键是为什么不这么设计),但这会导致许多问题,比如内核线程持锁后被中断,中断中调度后,调度到其他进程,这就有可能导致死锁。

而且中断本就是非常宝贵的资源,执行时间必须又快又好,执行过程中不应该切出去。

ret_from_irq中可以调用scedule原因是设计者认为从中断中返回,这是一个可行的调度时机,此时中断处理而压在栈中的内容都已经被清空了

posted on 2022-09-15 10:56  甲鱼写代码  阅读(61)  评论(0编辑  收藏  举报

导航