Linux系统中的中断、软中断与优先级继承机制解析
1. 工作线程与系统挂起问题
在系统运行过程中,如果工作线程不会被接收到的数据包抢占,那么工作线程的任务会持续运行,从而阻止该CPU上优先级较低的任务运行,最终可能导致系统挂起。若其他所有线程的优先级都低于工作线程,那么这些线程将无法获取CPU的控制权。
2. 中断与CPU亲和性
在多处理器系统中,操作系统调度器会尽量让每个线程在其启动的CPU上运行,以避免代价高昂的缓存刷新,这种特性被称为CPU亲和性。需要注意的是,IRQ线程的CPU亲和性由中断本身的CPU亲和性决定。每次中断处理程序执行时,会将线程的CPU亲和性与中断的亲和性进行比较,如果不同,中断服务线程的亲和性会更新为中断的亲和性。
下面通过一个示例来说明如何设置中断服务线程的亲和性:
# 查看ide0相关中断信息
# cat /proc/interrupts | grep ide0
14: 13602 1720 IO-APIC-edge ide0
# 查找IRQ-14的中断服务线程的pid
# ps ax | grep IRQ-14
790 ? S< 0:00 [IRQ-14]
从上述输出可以看出,系统使用了两个CPU,IDE0控制器的中断14在CPU 0上触发了13,602次,在CPU 1上触发了1,720次, ps 命令找到了IRQ 14中断服务线程的pid为790。
接下来,我们检查中断的亲和性并尝试进行修改:
超级会员免费看
订阅专栏 解锁全文
55

被折叠的 条评论
为什么被折叠?



