四、控制单元(CU)在加载中断入口地址时的具体角色


加载中断服务程序(ISR)入口地址这个操作,是由控制单元(CU)主导和负责执行的

CU是整个中断响应过程的“大脑”和“指挥中心”。它不仅负责执行这个加载操作,还负责协调中断周期中的所有步骤。


控制单元(CU)在加载中断入口地址时的具体角色

CU在这个过程中并非亲自“存储”地址,而是发出精确的控制信号,来控制数据通路,将正确的地址从源头加载到目的地(PC)。以下是其工作原理的分解:

1. 中断源的识别

当硬件中断请求(IRQ)信号到达CPU时,CU会首先识别中断源(是哪个设备发出的中断)。这通常通过一个中断控制器(如8259A PIC或现代的APIC)来完成,该控制器会提供一个中断向量号

2. 查询中断向量表(IVT)/中断描述符表(IDT)

  • CPU内存中有一个预定义的表,叫做中断向量表(IVT)中断描述符表(IDT)
  • 这个表的索引就是中断向量号
  • 每个表项(或称“门”)包含了对应中断服务程序的入口地址(在保护模式下,这个地址是段选择子和偏移量的组合)。

3. CU控制加载过程的数据流

CU会激活一条专门的数据通路来完成地址加载。这个过程的数据流如下:

  1. 计算地址

    • CU根据收到的中断向量号,计算出对应中断向量在IVT/IDT中的物理内存地址
    • 公式通常是:中断向量表基地址 + 中断向量号 * 每个向量的大小(例如4字节或8字节)
  2. 发出内存读命令

    • CU将计算出的内存地址送入内存地址寄存器(MAR),并通过地址总线发送给内存。
    • CU通过控制总线发出内存读信号。
  3. 读取中断向量

    • 内存将指定地址的内容(即中断服务程序的入口地址)通过数据总线送回CPU,存入内存数据寄存器(MDR)
  4. 将入口地址加载到PC

    • 这是最关键的一步:CU发出控制信号,将MDR中的内容(入口地址)直接写入程序计数器(PC)
    • 这个操作覆盖了PC中原先保存的下一条指令地址(断点已被压栈保存,所以覆盖是安全的)。

流程图:CU如何加载中断地址

graph TD A[硬件中断请求] --> B[CU识别中断源<br>获取中断向量号]; B --> C[CU计算IVT/IDT项地址]; C --> D[地址->MAR->地址总线->内存]; D --> E[CU发内存读信号]; E --> F[内存读出的入口地址->数据总线->MDR]; F --> G[CU发信号: MDR -> PC]; G --> H[PC指向ISR入口<br>下一个取指周期开始执行ISR];

总结:CU的核心作用

在整个“加载中断程序入口地址”的过程中,控制单元(CU) 负责:

  1. 协调时序:确保在断点安全保存到栈中之后,再执行加载PC的操作。
  2. 执行计算:计算中断向量在内存表中的地址。
  3. 发出命令:发出内存读控制信号。
  4. 控制通路:发出内部控制信号,打通“MDR -> PC”这条数据通路,完成最终的加载动作。

可以这样类比:

  • 中断向量号就像一本书在图书馆中的索书号
  • 中断向量表(IVT/IDT) 就像图书馆的目录柜
  • 控制单元(CU) 就是图书管理员:他根据你的索书号(中断向量号)查到这本书的具体书架位置(计算地址),走过去取书(内存读),然后把书交给你(将地址加载到PC)。
  • PC就是,拿到了书就开始阅读(执行ISR)。

因此,“加载中断程序入口地址”这一关键操作,完全是在控制单元(CU)的指挥下完成的。

posted @ 2025-09-11 19:08  guanyubo  阅读(24)  评论(0)    收藏  举报