当前位置: 首页 > news >正文

考研408《计算机组成原理》复习笔记,第五章(2)——CPU指令执行过程

一、指令执行基本流程

为了方便下面的知识点理解,要先明白一个指令到底是怎样一个执完整行流程

中断是操作系统OS的知识点,各位应该都学过,这里懒得解释了

二、指令周期

【指令周期】:就是CPU【取出指令  并  执行完一条指令】所需要的时间

1、【指令周期】分为哪些阶段

回顾指令知识点:

根据指令类型不同,【指令周期】分为两种:

  • 1、【无条件转移指令】:通常执行阶段无需访问主存,就算取指阶段也只用访问一次主存
    • 所以只包含取指阶段】+【执行阶段
      • 取指阶段】还包括取指】+【分析(不然看不懂指令怎么执行?)
    •   对应所花费的时间就叫取指周期】+【执行周期】   
  • 2、【间接寻址指令】:给出的是形式地址,需要先去主存取指令有效地址,然后再访问主存取出指令,要访问2次主存
    • 所以需要取指阶段】+【间址阶段】+【执行阶段
    • 对应所花费的时间就叫取指周期】+【间址周期】+【执行周期
  • 最后不管是哪种指令,如果CPU采用中断方式,指令结束前CPU会发出中断查询,若有【中断请求】,CPU还会进入【中断阶段】
    • 所以!最完整的【指令周期】包含间接寻址的指令)是4个阶段
    • 取指周期】+【间址周期】+【执行周期】+【中断周期

注意:

  • 题目没提到上面提到的【总线周期】或【I/O周期】,默认不存在、不用管
  • 然后我说的最完整的【指令周期】涵盖了【间接寻址】的
    • 如果是直接【无条件转移指令】就无需考虑【间址周期】

2、机器周期、时钟周期回顾

        那么一个指令周期究竟多长怎么表达?那就是用到专门的单位【机器周期】、【时钟周期】了(就像描述时间的单位是小时、分钟、秒.......)

注意:

  • 【时钟周期】又称【节拍】【CPU时钟周期】
    • 最小的时间单位、cpu操作的最基本单位,一段信号里【时间周期】之间都是固定一样大小
    • 【主频】是数字脉冲信号震荡的频率,是【时钟周期的倒数】(可以理解【时间周期】是【主频】的份数),频率越高,则时钟周期越短
  • 一个【机器周期】又叫【CPU周期】
    • 包含多个【时钟周期】一段信号里各个【机器周期】之间没有固定的长度

那么一个【指令周期】又由多个【机器周期】组成

然后【指令周期】又分为【定长指令周期】和【变长指令周期】:

  • 【定长指令周期】:1个指令内的【机器周期】长度一样
  • 【变长指令周期】:1个指令内的【机器周期】长度不一样
    • 因为【取指令】需要访问【主存】
    • 但是【执行指令】时只要指令到了CPU,若不再需要访问主存的话,就会以飞快的速度执行
    • 所以不同阶段所需要的【机器周期长度】应该是不同的,就会有【变长指令周期】甚至可以说【变长指令周期】的依据是【时钟周期】

不同指令所需要的【机器周期数量】也是不同的:

3、例题

三、指令周期数据流

由于教材和视频的写法不统一,很乱,所以我做了一个统一的写法

而且标出了专业的流程写法,比如(PC)—>MAR,请务必记住

1、【取指周期】

取指周期的任务是根据PC中的指令地址,从主存里取出指令并送到IR进行分析指令

注意:

  • 取指令的同时,CU会发出控制信号,让【PC+“1”】
    • 但要留意后面我们会学到【中断周期】,涉及到的是【堆栈】,堆栈地址是自上到下、地址高位到低位,所以PC+“1”】对应【SP-“1”
  • 【1—>R】意思是【Read读信号】为【1】,发出【读命令】
  • 【M(MAR)—>MDR】是【MEM(MAR)—>MDR】的缩写,【MEM(M)】就是【Memory寄存器】
    • 之所以是(MAR)—>(MDR),并不是主存会把数据先给MAR再给MDR,而是因为主存收到读命令后,根据MAR指向的地址找到内容,再给MDR
    • 或者你可以理解为CPU里的MAR把地址给到主存的MAR,在CU发出读命令后,主存再根据自己的MAR去找该地址指令

说白了就是:1去(去主存) ——> CU发命令(读命令) ——> 1回(回CPU的IR) ——> 下一轮

2、【间址周期】

间址周期的任务:根据指令地址码的形式地址,去主存取出操作数有效地址

  • 将指令中的【地址码】送到【MAR】并经过【地址总线】送到主存,CU发出读命令存取出有效地址,最后返回【MDR】

注意:

  • 其中【Ad(IR)】表示取出IR中存放指令的地址字段,也就是【操作码的形式地址】

说白了就是:1去(去主存) ——> CU发命令(读命令) ——> 1回(回CPU的MDR)

3、【执行周期】

4、【中断周期】

中断周期的任务:保存断点,将中断程序的入口地址】给到【PC】

  • PC放下一次预执行的指令嘛,把中断程序的起始指令地址给他就能开始执行中断的程序指令了;同时还得保存老PC值,一遍执行完中断回来干旧活

要理解中断周期,需要先知道几个事:

  • 1、中断其实有点像函数调用,CPU收到【中断请求】,就会暂停当前任务,转而处理【中断程序】,也就暂时改变【PC+“1”】流程,跳转到别的指令
    • 那么【新PC】记录的会是【中断程序】里的指令位置,为了处理完中断程序后能恢复原来任务,还得考虑保存断点(【旧PC】)
  • 2、中断阶段一般采用【堆栈】保存断点,而堆栈用的是【SP指针】
    • 保存在【栈顶】
    • 然后由于【堆栈】和【主存】的地址顺序不一样(从栈底到栈顶,由高地址到低地址)
    • 所以PC+“1”】对应【SP-“1”
    • 【堆栈】是主存中的一部分数据结构,所以本质还是【写入主存

注意:

  • 【1 —> W】意思是【Write写信号】为【1】,发出【写命令】
    • 因为【SP】代表【旧PC】存在堆栈栈顶,但是堆栈本质也是【主存一部分】,所以要【写入主存

说白了就是:存旧PC —> CU发命令(写命令) ——> 改新PC(CU设置)

【总结特点】(重要!!)

所以其实可以发现,这些流程都是有特点的,如果你死记硬就会崩(我靠单押了)

CU的【读 / 写控制信号】有很大的作用:

  • 1、控制数据总线上数据流的方向
    • 是流入存储器
    • 还是流出存储器
  • 2、控制存储器操作的是【读信息】还是【写信息】
    • 那我画一下大致套路:
      • 【读信号】:让主存数据流出存储器,读入到R0寄存器,套路都是:
        • 1——>R
        • M(MAR)——>MDR
        • (MDR)——>R0         
      • 【写信号】:让数据流出R0,流入主存存储器,写入到主存,套路都是:
        • 1——>W
        • R0——>MDR
        • M(MDR)——> MAR

【例题】

四、指令执行方案

首先回顾一下知识点【CPI】、【IPS】

1、单周期处理器(CPI=1)

第一种方案是采用【单指令周期】,重点:

  • 所有指令都规定用【1个时钟周期】完成,【CPI = 1
  • 时钟周期大小】取【需耗时最长的指令的执行时间
  • 指令之间【串行】执行!!
  • 看似很快很牛逼,但是实则还是要适应最久的指令,还是大家要干等着浪费时间
    • 注意:下一条指令只能等上一条指令结束才能启动
  • 【难点】:
    • 留意这么个知识点:
      • 1、单周期CPU没有【IR】,因为每个指令固定用【1个时钟周期】,所以指令一取出直接执行,以最快速度完成一条指令
      • 2、【控制信号不会变】:【取指令】、【取数据】有专门的部件分开工作,所以不需要改变控制信号,记住就行了
      • 3、单周期CPU需要搭配【多总线CPU结构】或【专用通道结构】不能用【单总线CPU结构】,这里不理解可以看下一节的笔记会讲,大概原因就是单总线会导致数据冲突,所以单总线只允许同一时刻一个部件允许、发数据,那要想在一个时钟周期完成一个指令的那么阶段操作,肯定得要求同一时刻各个部件能够同时工作

2、多周期处理器(CPI>1)

 第二种方案是采用【多指令周期】,重点:

  • 【不同类型】的指令都选用【不同时钟周期】完成,【CPI > 1
  • 时钟周期大小】取【需耗时最长的指令的执行时间
  • 指令之间【串行】执行!!
  • 但是多周期处理器需要更复杂的硬件设计,总体上还是又快性能又好
  • 【难点】:
    • 留意这么个知识点:
      • 1、多周期CPU有【IR】,因为每个指令不确定要用几个时钟周期,不知道啥时候取下一指令,就需要IR控制发一下指令
      • 2、【控制信号会改变】:因为在不同的时钟周期里(取指阶段、执行指令时取数据...)都共享一个部件(比如存储器),所以一条指令会多次用到同一个部件做不同操作,就需要改变控制信号

3、流水线处理器(CPI=1)

 第3种方案是采用【流水线方案】,重点:

  • 1个时钟周期】启动一条指令
    • 注意,并不是一个时钟周期执行完一条指令启动下一条指令的时候,可能上一条指令并没有执行完
    • 前面我们学过【一条指令的执行】可以分为【多个阶段】,所以这里意思就是上一指令或许刚完成一个阶段,有一些部件比如PC、IR用完了空闲了下一条指令刚好可以使用这些部件,就马上启动了
    • 只有【理想状态】下,真的每一个指令能达到一个时钟周期就执行完毕,才会CPI = 1
  • 指令之间【并行】执行!!尽量让多个指令近乎同时执行

具体后面会研究

【例题】

总结

http://www.lryc.cn/news/620708.html

相关文章:

  • 使用 Docker 部署 PostgreSQL
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • Java设计模式之《策略模式》
  • Effective C++ 条款41:理解隐式接口和编译期多态
  • 应用系统连达梦数据库报“服务器模式不匹配”的根源与修复方案
  • 使用colmap自制3DGaussian_Splatting数据集
  • BotCash:GPT-5发布观察 工程优化的进步,还是技术突破的瓶颈?
  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
  • 通过机器学习框架实现Android手写识别输入功能
  • Spring Boot 3中JWT密钥安全存储方案
  • Python训练营打卡Day32-神经网络的训练
  • 【Golang】Golang内存泄漏问题排查(二)
  • OpenCv(三)——图像平滑处理
  • 8. 函数简介
  • OpenCV中对图像进行平滑处理的4种方式
  • HarmonyOS AI辅助编程工具(CodeGenie)智慧调优
  • 力扣(LeetCode) ——225 用队列实现栈(C语言)
  • 信息vs知识:人类学习与AI规则提取
  • 异步编程的 8 种实现方式:疑难点与注意事项解析
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 安全加固4(K8S最小化微服务安全)
  • C++ 中的元控制流与概念化类型擦除
  • Elasticsearch 中如何配置 RBAC 权限-实现安全的访问控制
  • 论郑和下西洋元素融入课件编辑器的意义与影响​
  • 智能门锁:安全与便捷的现代家居入口
  • UE小:编辑器模式下「窗口/鼠标不在焦点」时仍保持高帧率
  • UE5配置MRQ编解码器输出MP4视频
  • Mybatis学习笔记(三)
  • PostgreSQL 免安装
  • AXI GPIO 2——ZYNQ学习笔记