x86 - CPU 如何决定哪个内核应该处理硬件中断?
问题描述
从操作系统的角度来看,哪个处理器将在多核系统中执行硬件中断及其答案的问题似乎集中在这个问题上,但是 CPU 如何在操作系统参与之前决定将硬件中断传递到哪个内核?
解决方案
在操作系统参与之前,CPU 如何决定向哪个内核提供硬件中断?
在操作系统介入之前;只有一个 CPU 在运行(其余的 CPU 卡在“等待启动 IPI”状态,直到操作系统启动它们),并且配置了中断控制器(PIC 芯片或 IO APIC),以便将 IRQ 发送到唯一的正在运行的 CPU。
注意:对于 BIOS;IO APIC 也被禁用,直到操作系统启用/配置它,并且固件使用旧的 PIC 芯片(实际上不能用来决定向哪个 CPU 发送 IRQ)。对于 UEFI,固件大多不使用 IRQ(其设备驱动程序轮询设备)。
在操作系统参与之后(不是之前);操作系统配置 IO APIC/s,也许还有 MSI(消息信号中断),也许还有 IOMMU 来告诉硬件将每个 IRQ 发送到哪个 CPU。
有一种特殊情况(“发送到最低优先级 CPU”功能),芯片组决定将 IRQ 发送到哪个 CPU(基于本地 APIC 或 CR8 中的软件设置“任务优先级”)。不幸的是,芯片组可能不支持此功能,即使支持,操作系统也可能不会使用此功能。
推荐阅读
- java - Reactor REST Mono 返回 ScanAvailable: true
- windows - 发生系统审计事件时如何显示消息?
- javascript - 以纯 javascript 没有 jquery 等从 div 背景图像 url 保存图像
- wpf - app.xaml 中的网格样式使内容不可见
- asp.net - 站点停止时在 IIS 端显示自定义错误页面
- java - 使用 ResultSet 更新行
- c# - 在同一窗口中打开带有菜单项的表单
- c - 如何将 uint8_t 数组更改为数字
- r - RcppEigen:“断言”没有依赖于模板参数的参数
- javascript - SignalR Chat:区分 Css 的 ListItem 发送者和接收者