中央处理器——指令执行过程

简介: 中央处理器——指令执行过程

指令周期


指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。


指令周期常常用若干机器周期来表示,机器周期又叫CPU周期


一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。


每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。如下图可分为定长的机器周期与不定长的机器周期。


CLK:时钟脉冲



几种常见的指令周期


每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。



指令周期流程



四个工作周期都有CPU访存操作,只是访存的目的不同。


  1. 取指周期是为了取指令


  1. 间址周期是为了取有效地址


  1. 执行周期是为了取操作数


  1. 中断周期是为了保存程序断点。


这四个周期在计算机内部是用触发器控制的


触发器,可以存放1个二进制位。


CLK(时钟脉冲)通过判断四个触发器的状态来判断该指令执行的是哪个周期。具体状态判断如下图



指令周期的数据流


取指周期


取指周期步骤:


  1. 当前指令地址送至存储器地址寄存器,记做:(PC) → MAR


  1. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR


  1. CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1 → R


  1. 将MDR中的内容(此时是指令)送入IR,记做:(MDR) → IR


  1. CU发出控制信号,形成下一条指令地址,记做:(PC)+1 → PC


具体数据流向图如下图所示:



间址周期


间址周期步骤:


  1. 将指令的地址码送入MAR,记做:Ad(IR) → MAR或Ad(MDR) → MAR


  1. CU发出控制信号,启动主存做读操作,记做:1 → R


  1. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR


  1. 将有效地址送至指令的地址码字段,记做:(MDR)→ Ad(IR)


具体数据流向图如下图所示:



执行周期


执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。


不同指令的执行周期操作不同,因此没有统一的数据流向。


中断周期


中断:暂停当前任务去完成其他任务。


为了能够恢复当前任务,需要保存断点。


一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。


中断周期步骤:


  1. CU控制将SP减1,修改后的地址送入MAR记做: (SP)-1 → SP,(SP) → MAR

本质上是将断点存入某个存储单元,假设其地址为a,故可记做:a → MAR


  1. CU发出控制信号,启动主存做写操作,记做:1 → W


  1. 将断点(PC内容) 送入MDR,记做:(PC) → MDR


  1. CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址→ PC


具体数据流向图如下图所示:



指令执行方案


一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。


方案1.单指令周期


对所有指令都选用相同的执行时间来完成 。


指令之间串行执行;


指令周期取决于执行时间最长的指令的执行时间。


缺点:


对于那些本来可以在更短时间内完成的指令,要

使用这个较长的周期来完成,会降低整个系统的

运行速度。


方案2.多指令周期


对不同类型的指令选用不同的执行步骤来完成 。


指令之间串行执行;


可选用不同个数的时钟周期来完成不同指令的执行过程 。


缺点:


需要更复杂的硬件设计。


方案3.流水线方案


在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中 。


指令之间并行执行


例如这个样子



本章小结


相关文章
|
存储 人工智能 大数据
云计算平台:AWS、Azure和Google Cloud的比较与选择
在当今数字化时代,云计算平台成为了企业和个人的首选。本文将重点比较三大主流云计算平台:AWS、Azure和Google Cloud,从性能、功能、可用性以及定价等方面进行综合评估,帮助读者更好地选择适合自己需求的云计算平台。
|
Scala 流计算
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
CountWindow 数量窗口分为滑动窗口与滚动窗口,类似于之前 TimeWindow 的滚动时间与滑动时间,这里滚动窗口不存在元素重复而滑动窗口存在元素重复的情况,下面 demo 场景为非重复场景,所以将采用滚动窗口。......
1220 0
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
|
存储 C语言
大端存储和小端存储
1.大小端字节序 2.大端存储 3.小端存储 4.为什么会有大小端存储模式之分? 5.如何判断当前机器是大端存储还是小端存储 方法1 方法2
4337 0
|
网络协议 安全 网络安全
计算机网络:IP地址、子网掩码、网关都是什么?
计算机网络:IP地址、子网掩码、网关都是什么?
10491 0
计算机组成原理(6)-----指令执行过程
计算机组成原理(6)-----指令执行过程
2080 0
|
存储 安全
什么是内存管理单元(MMU)?
【8月更文挑战第23天】
1200 0
|
网络协议
伪头部校验
伪头部校验
1164 6
|
存储 缓存 算法
带你理清CPU,cache和存储器之间的逻辑运作
带你理清CPU,cache和存储器之间的逻辑运作
4073 3
|
存储
计算机组成原理(7)----CPU内部单总线数据通路
计算机组成原理(7)----CPU内部单总线数据通路
1905 0
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch中的自动微分机制:深入理解反向传播
【8月更文第27天】PyTorch 是一个强大的机器学习框架,它因其灵活性和易用性而受到广泛欢迎。其中一个关键特性就是它的自动微分机制,这个机制使得 PyTorch 能够自动计算任何张量操作的梯度,这对于训练深度学习模型至关重要。本文将详细介绍 PyTorch 中自动微分机制的工作原理,并通过具体的代码示例来展示如何使用这一机制来实现反向传播。
926 1