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

news/2024/12/27 8:31:30/

学习笔记

前言


本文主要是对于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.ppmy.cn/news/1558477.html

相关文章

在C#中制作一个字符串扩展来确定字符串是否与正则表达式匹配

正则表达式可以让你(相对)轻松地确定字符串是否与某种模式匹配。此示例展示了如何在 C# 中创建字符串扩展方法来确定字符串是否与正则表达式匹配 下面的StringExtensions类定义了Matches字符串扩展方法。 public static class StringExtensions {// Ext…

《CS2》报错dxgi.dll缺失怎么办?《CS2》游戏提示dxgi.dll缺失要怎么解决?

一、dxgi.dll缺失的根源 游戏安装问题:dxgi.dll文件是DirectX图形接口的一部分,如果游戏安装不完整或安装过程中出现问题,可能会导致该文件缺失。 系统更新或配置变动:Windows操作系统的更新或某些系统配置的变动,有时…

Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品

随着技术的成熟和 AI 的崛起,很多原本需要团队协作才能完成的工作现在都可以通过自动化和智能化的方式完成。于是乎,单个开发者的能力得到了极大的提升 - 借助各种工具,一个人就可以完成开发、测试、运维等整条链路上的工作,渡劫飞…

斐波那契数【东北大学oj数据结构10-1】C++

编写一个程序,打印给定整数 n 的第 n 个斐波那契数。 第 n 个斐波那契数由以下递归公式定义: f(n){1 n0,1; f(n−1)f(n−2)​​ n>1​.} 输入 给出一个整数 n。 输出 在一行中打印第 n 个斐波那契数。 约束 0≤n≤44 输入样例 3 输出…

2024国赛A问题2

问题二 由于问题一只考虑了圆孔之间的固定距离与运动状态,问题二需要考虑整个板凳的长度与宽度以及板凳之间相互位置是否产生干扰,故需要在第一问圆孔运动的基础上加入板凳长与宽的具体条件,构建各个板凳的具体数学模型,通过求解…

【Linux】进程间关系与守护进程

目录 进程组 什么是进程组 组长进程 会话 什么是会话 作业控制 守护进程 进程组 什么是进程组 我们在命令行中输入sleep 1 | sleep 2 | sleep 3,然后查看进程, 我们看到它们有不同的pid,表明它们是不同的进程,它们的ppid…

qwenvl 以及qwenvl 2 模型架构理解

qwenvl 模型理解: 参考资料: https://qwenlm.github.io/zh/blog/qwen2-vl/ https://github.com/QwenLM/Qwen2-VL?tabreadme-ov-file https://qwenlm.github.io/zh/blog/qwen2-vl/ 论文: qwenvl https://arxiv.org/abs/2308.12966 Qwen2-VL …

纯真社区版IP库CZDB数据格式使用教程

1. 概述 纯真社区版IP库是一种免费且公开的IP地理位置数据库,主要面向非商业用途。其最新推出的CZDB格式是一种全新的数据文件格式,自2024年10月起将成为官方维护和更新的唯一版本。该格式支持同时存储IPv4和IPv6地址信息,具备以下优点&…