四、控制单元(CU)在加载中断入口地址时的具体角色
目录
加载中断服务程序(ISR)入口地址这个操作,是由控制单元(CU)主导和负责执行的。
CU是整个中断响应过程的“大脑”和“指挥中心”。它不仅负责执行这个加载操作,还负责协调中断周期中的所有步骤。
控制单元(CU)在加载中断入口地址时的具体角色
CU在这个过程中并非亲自“存储”地址,而是发出精确的控制信号,来控制数据通路,将正确的地址从源头加载到目的地(PC)。以下是其工作原理的分解:
1. 中断源的识别
当硬件中断请求(IRQ)信号到达CPU时,CU会首先识别中断源(是哪个设备发出的中断)。这通常通过一个中断控制器(如8259A PIC或现代的APIC)来完成,该控制器会提供一个中断向量号。
2. 查询中断向量表(IVT)/中断描述符表(IDT)
- CPU内存中有一个预定义的表,叫做中断向量表(IVT) 或 中断描述符表(IDT)。
- 这个表的索引就是中断向量号。
- 每个表项(或称“门”)包含了对应中断服务程序的入口地址(在保护模式下,这个地址是段选择子和偏移量的组合)。
3. CU控制加载过程的数据流
CU会激活一条专门的数据通路来完成地址加载。这个过程的数据流如下:
- 
计算地址: - CU根据收到的中断向量号,计算出对应中断向量在IVT/IDT中的物理内存地址。
- 公式通常是:中断向量表基地址 + 中断向量号 * 每个向量的大小(例如4字节或8字节)。
 
- 
发出内存读命令: - CU将计算出的内存地址送入内存地址寄存器(MAR),并通过地址总线发送给内存。
- CU通过控制总线发出内存读信号。
 
- 
读取中断向量: - 内存将指定地址的内容(即中断服务程序的入口地址)通过数据总线送回CPU,存入内存数据寄存器(MDR)。
 
- 
将入口地址加载到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) 负责:
- 协调时序:确保在断点安全保存到栈中之后,再执行加载PC的操作。
- 执行计算:计算中断向量在内存表中的地址。
- 发出命令:发出内存读控制信号。
- 控制通路:发出内部控制信号,打通“MDR -> PC”这条数据通路,完成最终的加载动作。
可以这样类比:
- 中断向量号就像一本书在图书馆中的索书号。
- 中断向量表(IVT/IDT) 就像图书馆的目录柜。
- 控制单元(CU) 就是图书管理员:他根据你的索书号(中断向量号)查到这本书的具体书架位置(计算地址),走过去取书(内存读),然后把书交给你(将地址加载到PC)。
- PC就是你,拿到了书就开始阅读(执行ISR)。
因此,“加载中断程序入口地址”这一关键操作,完全是在控制单元(CU)的指挥下完成的。
    Do not communicate by sharing memory; instead, share memory by communicating.

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号