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

计算机组成原理的学习笔记(9)-- CPU·其一 CPU的基本概念/流水线技术/数据通路

学习笔记

前言


本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。

CPU(中央处理器)


1. 组成

  • 定义:计算机的核心部件,负责执行指令和处理数据。

  • 组成部分:

    • 核心:多个处理单元,提升多任务处理能力。

    • 控制单元(CU):解码指令并协调各组件运作。

    • 算术逻辑单元(ALU):执行算术和逻辑运算。

    • 寄存器:临时存储器,用于存放数据和指令。

    • 缓存(Cache):提高数据访问速度,减少对主存的访问。包括L1、L2、L3缓存。

    • 总线接口单元:负责与外部设备或内存交换数据。


2. 时钟周期

  • 定义:计算机内部时钟信号完成一次周期所需的时间。

  • 频率:时钟频率以赫兹(Hz)为单位,表示每秒电路振荡的次数。

  • 时钟周期与指令周期的关系:时钟周期决定了CPU每个操作的速度,而指令周期是完成一条指令所需的时间。不同的指令可能需要不同数量的时钟周期来完成。

  • 影响性能的因素:

    • 高频率通常意味着短的时钟周期,但也可能导致功耗和热量增加,影响稳定性。

    • 时钟频率并不是唯一决定CPU性能的因素,还需要考虑指令集架构、缓存等因素。


3. 机器周期

  • 定义:CPU完成一次基本操作所需的时间。

  • 与时钟周期的关系:一个机器周期通常由多个时钟周期组成,具体依赖于CPU的架构和指令复杂度。

  • 机器周期的组成:

    • 一个机器周期通常包括取指周期间址周期(地址计算)和执行周期。不同类型的操作可能需要不同的机器周期。


4. 指令周期

  • 定义:执行一条指令所需的总时间,常由多个机器周期组成。

  • 主要阶段:

    • 取指(Fetch):从内存中读取指令。

    • 解码(Decode):将指令解析为控制信号,准备执行。

    • 执行(Execute):根据指令执行相应的算术或逻辑运算,或进行数据传输。

    • 访存(Memory Access):如果指令涉及内存操作(如读取或写入数据),则进行访存。

    • 写回(Write-back):将运算结果写回寄存器或内存。


5. 流水线技术

  • 定义:将指令的执行过程分解为多个阶段,允许同时处理多条指令。

  • 优势:提高指令吞吐量,优化资源利用,减少空闲时间。

  • 流水线分段:流水线通常包括多个阶段,如取指、解码、执行、访存、写回等。

  • 流水线的深度:流水线的阶段越多,每个阶段的任务越简单,但也可能带来更多的冒险问题。

  • 冒险问题:

    • 数据冒险:指令之间的数据依赖造成的冲突。可以通过数据转发流水线停顿来解决。

    • 控制冒险:由分支指令引起的指令流不确定性。通过分支预测延迟槽来优化。

    • 结构冒险:由于资源不足引起的冲突。通过增加硬件资源(如多个执行单元)来缓解。


6. 超标量技术

  • 定义:允许在一个时钟周期内同时发射多条指令的处理器架构。

  • 特点:

    • 多个执行单元并行处理指令,提高处理效率。

    • 动态调度:处理器通过动态调度(如乱序执行)来提高指令吞吐量,尽可能利用空闲的执行单元。

    • 指令发射:多个指令同时发射到不同的执行单元,减少了CPU的空闲时间。

    • 复杂的调度机制:通过硬件或者编译器技术,处理器可以动态安排指令执行,优化指令间的空闲时间。


7. 超流水线技术

  • 定义:将执行过程中的每个阶段进一步细分,以增加流水线的阶段数量。

  • 优化目标:通过细化每个阶段的操作,使得每个阶段执行的任务更简单,从而提高流水线的吞吐量。

  • 挑战:虽然细化阶段可以提高吞吐量,但也可能增加指令之间的延迟,尤其是在增加了很多分支预测指令重排的情况下。


8. 超长指令技术

  • 定义:将多个操作合并为一个长指令字,允许并行执行多个操作。

  • VLIW(超长指令字):通过将多个操作(如加法、乘法、数据传输等)打包成一个超长指令,在硬件上进行并行执行,指令调度通常由编译器完成,而非硬件。

  • 特点:

    • 编译器在编译时负责指令调度。

    • 每条指令包含多个操作,可以在多个执行单元中并行执行。

    • 增加了编译器的复杂性,但可以有效提高处理器性能。


9. 数据通路

  • 定义:用于数据传输与处理的硬件部分,是执行指令的基础。

  • 组成:

    • 寄存器、算术逻辑单元(ALU)、多路复用器(MUX)、数据总线。

  • 工作流程:在各个阶段中,负责从寄存器读取,执行操作,和存储结果。


专用数据通路
1. 取指周期(Instruction Fetch Cycle)

取指周期的任务是从内存中获取指令并加载到指令寄存器(IR)。在这一周期内,处理器执行以下微操作:

  • PC → MAR:程序计数器(PC)的内容送到内存地址寄存器(MAR),以便确定当前要取指令的内存地址。

  • (MAR) → M:打开MAR送到地址总线的输出门。

  • 1 → R:CU通过控制总线向主存发出读命令。

  • M(MAR) → MDR:主存通过数据总线根据MAR中的地址所对应的存储单元中的内容(指令)送入MDR。

  • MDR → IR:打开控制门,将内存数据寄存器(MDR)中的数据(即指令)送到指令寄存器(IR)中。

  • OP(IR) → CU:打开指令操作码送往CU的输出门。

  • PC + 1 → PC:程序计数器(PC)自增,准备下一条指令的地址。

2. 间址周期(Address Calculation Cycle)

间址周期通常用于指令中的寻址操作。例如,对于ADD R1, M(将内存地址M中的值加到寄存器R1中)指令,间址周期的任务是计算指令中的操作数地址。在这一周期中,微操作如下:

  • Ad(MAR) → MAR:打开MDR和MAR的控制门,将形式地址送到MAR。

  • (MAR) → AB → M:打开MAR送到地址主线的输出门。

  • 1 → R:CU 通过控制总线向主存发出读命令。

  • M(MAR) → MDR:主存通过数据总线,将MAR中地址所对应的存储单元的内容(有效地址)送到MDR。

3. 执行周期(Execution Cycle)

执行周期是实际进行运算的过程。对于加法指令,它的任务是执行加法操作,并将结果存储回目的寄存器或内存。微操作如下:

  • MDR → MAR:将有效地址送到MAR。

  • (MAR) → AB → M:打开MAR送往地址总线的输出门。

  • 1 → R:CU通过控制总线向主存发出读命令。

  • M(MAR) → DB → MDR:将操作数存入MDR。

  • C6,C7同时有效:打开ACC和MDR链接ALU的控制门。

  • ACC + MDR → ACC:打开ALU通往ACC的控制门,存入计算结果。

执行加法指令的微操作过程可总结为:

  • 取指周期:从内存中取出指令,并更新PC。

  • 间址周期:计算操作数的地址,并从内存中读取操作数。

  • 执行周期:执行加法操作,并将结果存储到目标寄存器。


内部总线结构
1. 取指周期(Instruction Fetch Cycle)

在取指周期中,主要任务是从内存中获取当前要执行的指令,并更新程序计数器(PC)。通过内部总线将各个模块连接在一起以进行数据传输。

  • PC → MAR:程序计数器(PC)的内容送到内存地址寄存器(MAR),确定当前要获取的指令的内存地址。

  • 1 → R:CU发出 "R"(读指令),

  • M(MAR) → MDR:主存通过数据总线根据MAR中的地址所对应的存储单元中的内容(指令)送入MDR。

  • MDR → IR:内存数据寄存器(MDR)中的数据(即当前的指令)通过总线传送到指令寄存器(IR)中。

  • PC + 1 → PC:程序计数器(PC)自增,为下一条指令准备地址。

  • 数据通过总线从PC传送到MAR,再从内存(通过MDR)传送到IR,最后更新PC指向下一条指令。总线在整个过程中充当着数据传输的媒介。


2. 间址周期(Address Calculation Cycle)

间址周期的任务是从指令中提取操作数的地址,并从内存中读取操作数。指令可能包含一个操作数地址,需要通过间址周期进行地址计算和数据获取。对于ADD R1, M,这里的M是内存地址。

  • Ad(MAR) → MAR:将指令的形式地址经内部总线送至MAR。

  • 1 → R:C通过控制总线向主存发出读命令

  • M(MAR) → MDR:主存通过数据总线,将MAR中地址所对应的存储单元的内容(有效地址)送到MDR。

  • MDR → A:将内存数据寄存器(MDR)中的数据(即 M 的值)传送到寄存器A(临时寄存器,用于存放操作数)。


3. 执行周期(Execution Cycle)

执行周期是指令执行的核心部分,主要任务是通过ALU进行加法运算,并将结果存储到目标寄存器中。对于 ADD R1, M,目标是将内存 M 的值加到寄存器 R1 的值上。

  • (MDR)→ MAR:将有效地址经内部总线送至 MAR。

  • 1→R:CU通过控制总线向主存发出读命令(R)。

  • M(MAR)→ MDR:主存通过数据总线,将 MAR 中地址所对应存储单元的内容(数据)送至 MDR。

  • (MDR)→Y:将操作数送至奇存器Y,直接作为 ALU 的一个输入。

  • ACC + Y → Z:CU 向 ALU发出“ADD"加法指令的控制信号,完成 ACC和 MDR 内容的相加得到的结果直接送往寄存器 Z。

  • Z → ACC:结果写入ACC。


比较:
特性内部总线结构(Bus-Based Architecture)专用数据通路(Dedicated Data Path Architecture)
带宽和延迟带宽较低,延迟较高,因为总线是共享资源带宽较高,延迟较低,避免了总线瓶颈
硬件资源消耗硬件资源节约,减少了布线和硬件复杂性需要大量的硬件资源,为每个操作设计专用通路
灵活性灵活性高,适合扩展和变更灵活性差,设计固定,扩展困难
系统扩展性扩展性好,容易增加新组件扩展困难,增加新组件需要重新设计硬件
并行性并行性较差,多个组件访问总线时会造成冲突高并行性,可以同时处理多个数据流
复杂性和维护设计较简单,维护较容易设计和维护较复杂,需要更多的工程资源


结语

关于指令系统的部分,中间涉及汇编的内容我暂时搁置了,我决定后面再系统地学一下汇编。

另外,怎么感觉越到后面越累了,是我的错觉吗?


http://www.kler.cn/a/453475.html

相关文章:

  • 如何训练Stable Diffusion 模型
  • JS 异步 ( 一、异步概念、Web worker 基本使用 )
  • FPGA的DMA应用——pcileech
  • 海格通信嵌入式面试题及参考答案
  • 【Compose multiplatform教程08】【组件】Text组件
  • 【ANGULAR网站开发】初始环境搭建
  • docker compose deploy fate cluster
  • 免费证件照大师 3.3 | 界面极简的免费证件照制作软件,支持无水印导出
  • 大型3d模型应用内容的云推流之国产信创系统方案
  • python常见数组操作
  • Linux-----进程处理(子进程创建)
  • Java项目中Oracle数据库开发过程中相关内容
  • AI绘图丨中国风 古典 产品展台电商场景第三弹(附关键词)
  • 路由策略
  • 学习C++:关键字
  • 每天40分玩转Django:Django静态文件
  • SLAM/数字图象处理基础
  • 【QT常用技术讲解】QTablewidget点击表头自动排序的两种方式
  • Map接口 及其 实现类(HashMap, TreeMap)
  • 基础组件:
  • MySQL为什么选择使用B+树作为索引结构?
  • 如何使用React,透传各类组件能力/属性?
  • python脚本:批量提取excel数据
  • WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
  • Unity自定义Inspector属性名特性以及特性自定义布局问题
  • 散户应该持有哪些代币?