深入解析操作系统中断与信号机制
1. 中断请求统计相关宏与函数
1.1 访问 irq_cpustat_t 字段的宏
在操作系统中,为了方便访问irq_cpustat_t中的字段,定义了一些宏。例如:
#define ksoftirqd_task(cpu) __IRQ_STAT((cpu), __ksoftirqd_task) #define nmi_count(cpu) __IRQ_STAT((cpu), __nmi_count)这些宏都使用了__IRQ_STAT()宏,它接收特定 CPU 的 ID 和要引用的字段名作为参数。
1.2__IRQ_STAT()宏的实现
__IRQ_STAT()宏的实现根据系统是对称多处理(SMP)还是单处理器有所不同:
#ifdef CONFIG_SMP #define __IRQ_STAT(cpu, member) (irq_stat[cpu].member) #else #define __IRQ_STAT(cpu, member)((void)(cpu), irq_stat[0].member) #endif在 SMP 系统中,该宏直接计算为对应 CPU 的数组元素的相应成员;在单处理器系统中,它简化为数组元素 0 的相应成员。