实时系统中的中断、软中断与优先级继承
线程优先级与系统挂起
在多线程系统中,如果工作线程未被接收到的数据包抢占,工作线程的任务将持续运行,阻止该 CPU 上优先级较低的任务运行,最终可能导致系统挂起。若其他线程的优先级均低于工作线程,那么这些线程将无法获得 CPU 的控制权。
中断与 CPU 亲和性
在多处理器系统中,操作系统调度程序会尽量让线程在其启动的 CPU 上运行,以避免代价高昂的缓存刷新,这种特性被称为 CPU 亲和性。需要注意的是,中断请求(IRQ)线程的 CPU 亲和性由中断本身的 CPU 亲和性决定。每次中断处理程序执行时,都会将线程的 CPU 亲和性与中断的亲和性进行比较。若二者不同,则会将中断服务线程的亲和性更新为中断的亲和性。
以下是一个示例,展示了如何查看和操作中断服务线程的亲和性:
# 查看 ide0 相关中断信息
# cat /proc/interrupts | grep ide0
14: 13602 1720 IO - APIC - edge ide0
# 查看 IRQ - 14 中断服务线程的进程 ID
# ps ax | grep IRQ - 14
790 ? S< 0:00 [IRQ - 14]
从上述输出可知,系统使用了两个 CPU,IDE0 控制器的中断号为 14,在 CPU 0 上触发了 13602 次,在 CPU 1 上触发了 1720 次, ps 命令获取到 IRQ - 14 中断服务线程的进程 ID 为
超级会员免费看
订阅专栏 解锁全文
958

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



