Instruction Cycle
指令周期、机器周期与时钟周期
| 概念 | 含义 |
|---|---|
| 指令周期 | CPU 从主存取出并执行一条指令所需的全部时间 |
| 机器周期 | 又称 CPU 周期,一个指令周期通常由若干机器周期组成 |
| 时钟周期 | 又称节拍、T 周期,是 CPU 操作的基本时间单位 |
一个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。不同指令需要的阶段不同:
| 指令情况 | 可能的周期组成 |
|---|---|
空指令 NOP |
取指周期 |
| 普通运算指令 | 取指周期、执行周期 |
| 间接寻址指令 | 取指周期、间址周期、执行周期 |
| 响应中断的指令 | 取指周期、间址周期、执行周期、中断周期 |
单周期、多周期与流水线处理器
| 处理器组织方式 | 基本做法 | 主要特点 |
|---|---|---|
| 单周期处理器 | 每条指令都在一个时钟周期内完成 | 所有指令使用相同周期长度;时钟周期必须按最慢指令设置,硬件控制相对直接,但短指令也要等待这个长周期结束 |
| 多周期处理器 | 一条指令拆成多个阶段,不同指令可使用不同数量的时钟周期 | 每个时钟周期完成一部分操作;不同指令只经历自己需要的阶段;同一硬件部件可以在不同周期复用 |
| 流水线处理器 | 把指令执行过程分成若干级,多条指令在不同级中重叠执行 | 单条指令仍要经过多个阶段,但理想情况下每个周期都能完成一条指令;重点问题变成流水线相关、冲突和性能分析 |
三者的差别是同样的取指、译码、执行、访存、写回等工作如何占用时钟周期。
直观区分
设一条指令大致需要取指、译码、执行、访存、写回五类工作。
- 单周期处理器:五类工作压进一个很长的时钟周期。
- 多周期处理器:五类工作拆到多个较短时钟周期,不需要的阶段可以跳过。
- 流水线处理器:一条指令分阶段前进,同时让后续指令进入前面的阶段。
- 功能层:当前阶段要完成什么微操作。
- 时序层:这些微操作安排在哪个时钟周期或流水线级中。
三种时序组织对应的数据通路特点见 按时序组织方式分类,流水线的阶段、冲突与性能分析见 CPU-Pipeline。
指令周期流程
指令执行的一般流程是:
1 | 取指周期 -> 是否需要间址 -> 执行周期 -> 是否响应中断 -> 下一条指令 |
四个工作周期都可能访问主存,但访存目的不同。
| 工作周期 | 访存目的 |
|---|---|
| 取指周期 | 取指令 |
| 间址周期 | 取有效地址 |
| 执行周期 | 取操作数或保存执行结果,具体取决于指令 |
| 中断周期 | 保存程序断点 |
取指周期
取指周期的任务是从主存中取出当前指令,并形成下一条指令地址。
1 | (PC) -> MAR |
其中 1 -> R 表示控制器向主存发出读命令。
间址周期
间址周期的任务是根据指令中的地址码访问主存,取出有效地址。
1 | Ad(IR) -> MAR |
这里主存读出的不是操作数,而是有效地址。
执行周期
执行周期根据 IR 中指令字的操作码和操作数,通过 ALU 操作产生执行结果。
不同指令的执行周期操作不同,因此没有统一的数据流向。分析执行周期时,应根据具体指令判断数据从哪里来、经过哪些部件、最后写到哪里。
中断周期
中断周期的任务是保存断点并转入中断服务程序。若用栈保存断点,且进栈采用“先修改指针,后写入数据”,可表示为:
1 | (SP) - 1 -> SP |
1 -> W 表示控制器向主存发出写命令。异常与中断的完整响应和处理流程见 Exception-And-Interrupt-Handling。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!