Appearance
题目
在操作系统内核中,中断向量表适合采用的数据结构是( )。
错因
B
把"中断要按时间先后处理"映射到"队列"。但中断向量表不是用来排队的——它是根据中断号直接找到对应处理程序入口的查表结构。"先到先处理"是中断调度层面的事,不是中断向量表的功能。队列做不到 按号索引。
C
链表是顺序访问数据结构——给定中断号 要找第 项必须从头扫到第 个,复杂度 。中断处理对延迟极敏感(响应时间是硬件时钟周期级别), 完全不可接受。链表的优势是动态增删,但中断号是硬件设计阶段就固定下来的,无需动态增删。
D
双向链表只是单向链表加上反向指针,对"按编号查找"没有任何加速作用——按下标访问仍然是 。双向链表的优势是双向遍历和"已知节点位置时 删除",这两个特性中断向量表都用不上。
总解析
中断向量表的需求:
- 中断号是稠密的小整数(如 x86 的 0~255);
- 每次中断要在极短延迟内根据中断号找到处理程序入口;
- 数量固定(硬件设计阶段就定下来);
- 不需要插入/删除。
最匹配的数据结构:数组。
| 数据结构 | 按编号查找 | 内存连续 | 是否适合中断向量表 |
|---|---|---|---|
| 数组 | 是 | ✓ 完美匹配 | |
| 队列 | 不支持 | — | ✗ 用途不对 |
| 单向链表 | 否 | ✗ 太慢 | |
| 双向链表 | 否 | ✗ 同上 |
数组用中断号当下标即可一次访存拿到入口地址——这正是 x86 IDTR、ARM 向量表等硬件机制的实际实现。
最终答案是 A(数组)。