前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

文章目录

  • 前言
  • 第七章 CPU 的结构与功能
    • 7.1 控制器概述
      • 7.1.1 控制器的功能
      • 7.1.2 指令周期
      • 7.1.3 机器周期
      • 7.1.4 时钟周期
      • 7.1.5 多级时序系统
      • 7.1.6 超线程技术与双核处理器
    • 7.2 指令周期的操作命令分析
      • 7.2.1 取指周期
      • 7.2.2 间址周期
      • 7.2.3 执行周期
      • 7.2.4 中断周期
      • 7.2.5 指令执行的完整分析
    • 7.3 流水线技术
      • 7.3.1 指令的二级流水
      • 7.3.2 指令的六级流水
      • 7.3.3 流水线性能
      • 7.3.4 流水线的相关问题
      • 7.3.5 提高机器速度的方法
      • 7.3.6 流水线的多发技术

第七章 CPU 的结构与功能

7.1 控制器概述

7.1.1 控制器的功能

  1. 取指令
  2. 分析指令
  3. 执行指令,发出各种操作命令
  4. 总线管理
  5. 处理中断、异常等特殊情况

控制单元的外特性

控制信号分为 CPU 内部的控制信号,以及传到系统总线上的外部控制信号。

7.1.2 指令周期

概念

  • 计算机读取并执行完一条指令的全部时间,称为指令周期
  • 指令周期大体可以分成四个阶段
    • 取指周期: 从内存中取得指令,并分析指令。
    • 间址周期: 间接寻址的指令都包含间址周期。发出指令中的形式地址,从内存中读回有效地址。
    • 执行周期: 除空操作以及 NOP 指令外,所有指令都包括执行周期,用以完成指令的主要功能。
    • 中断周期: 如果在前面三个过程中有设备发出了中断请求,则在执行完上述三个周期后,执行中断隐指令。
  • 并不是每一条指令都包括完整的四个阶段。

7.1.3 机器周期

概念

指令执行的每个阶段,称为一个机器周期,也称为工作周期。

如何确定机器周期的长度

  • 每条指令的执行步骤
  • 每一步骤所需的时间
  • 以完成最复杂、最慢指令功能的时间为准

统一机器周期的确定

  • 计算机中,最慢指令为访存指令,因此以一次访存所需时间作为机器周期。
  • 若 “指令字长 = 存储字长”,则 “访存周期 = 机器周期”。

CPU 工作周期的标志

我们需要根据下述 4 个触发器的输出值来确定 CPU 当前所处的工作周期。

其中,若 CPU 处于取指周期,则会将 FE 置 1,若为间址周期,则会置 IND 为 1,以此类推。

7.1.4 时钟周期

概念

  • 将一个机器周期分成若干个时间相等的时间段,每段称为一个时钟周期。(节拍、状态)
  • 时钟周期是控制计算机操作的最小单位时间。
  • 用时钟周期控制微操作命令,每个时钟周期产生一个或几个微操作命令。
  • 常用 T0,T1,T2,T3T_0,T_1,T_2,T_3T0​,T1​,T2​,T3​ 来描述时钟周期。

时钟周期的产生方法

用计数器和译码器来控制每次执行的微操作。

7.1.5 多级时序系统

指令周期、机器周期、时钟周期(节拍、状态)组成多级(三级)时序系统。

其中如果每个机器周期都包含了相同数量的时钟周期,则称为定长机器周期,否则为不定长机器周期。一个指令周期包含了若干个机器周期,一个机器周期包含了若干个时钟周期。

7.1.6 超线程技术与双核处理器

超线程技术的概念

  • 超线程技术(Hyper-Threading)是 Intel 公司提出的一种提高 CPU 性能的技术,可将一个物理 CPU 当作两个逻辑 CPU 使用,同时执行多个线程,从而提高效率。
  • 超线程处理器内部的两个逻辑处理器共享一组处理器执行单元,运算能力提高 30%。
  • 超线程技术可将处理器内部的闲置资源利用起来,当并行执行两个线程时,负责处理第二个线程的逻辑处理器,仅使用运行第一个线程的处理器不使用的资源。

超线程技术的实现

  • 实现超线程技术的前提是需要五大支持:CPU、主板芯片组、主板 BIOS、操作系统、应用软件
  • 执行单个线程时,该技术反而下降,因为打开超线程后,处理器内部缓存被划分为几个区域,互相共享内部资源,单个子系统性能反而下降。
  • 超线程技术最早出现在 2002 年的 pentium4 处理器,以及后续 2009 的 Core i 系统处理器。

双核处理器

  • 双核处理器是在一个处理器芯片上集成了两个 “物理的” 运算核心。
  • 1989年, Intel 工程师首先提出了双核的概念,1995 年首先发布了双核产品,2005 年首先提供主流价位的双核处理器。
  • 双核处理器并不能达到同频率两个单核处理器的计算能力,IBM 公司曾对比过 AMD 和 Intel 双核处理器的性能,在多线程任务环境下,大约比单核提高 60%。

超线程与双核处理器的区别

  • 开启了超线程技术的单核处理器与双核处理器在操作系统中都被识别为两个处理器,二者的区别在于,前者是两个 “逻辑” 处理器,后者是两个 “物理” 处理器。
  • 超线程的逻辑处理器并没有独立的执行单元、整数单元、寄存器甚至缓存,它们在运行时仍需要共用执行单元、缓存和总线接口。
  • 执行多线程时,超线程的两个处理器交替工作,当争用某资源时,一个线程必须暂停并让出资源。

多核多线程技术

处理器有多个物理内核,每个内核采用超线程技术。

几种微处理器的内部结构

7.2 指令周期的操作命令分析

7.2.1 取指周期

  1. PC →\rightarrow→ MAR →\rightarrow→ 地址线
  2. 1 →\rightarrow→ R(CU 发信号到控制总线)
  3. M(MAR) →\rightarrow→ MDR
  4. MDR →\rightarrow→ IR
  5. OP(IR) →\rightarrow→ CU(将操作码部分交给 CU 译码)
  6. (PC)+1 →\rightarrow→ PC

微操作数据传递的原理

以下图 PC 将数据传给 MAR 为例,数据传递通道中间有一个受控门,只有当受控门中的受控端收到有效信号后,受控门就会打开,PC 的数据就会流向 MAR。

控制单元根本任务

  1. 根据指令要求依次发出一系列控制信号
  2. 控制信号依次打开一系列受控门
  3. 依次打开的受控门导致一系列数据流动

控制信号也称为微操作命令。

7.2.2 间址周期

  1. Ad(IR) →\rightarrow→ MAR(将指令中的地址部分送到 MAR 中)
  2. 1 →\rightarrow→ R(CU 发信号到控制总线)
  3. M(MAR) →\rightarrow→ MDR(从主存中读回数据到 MDR 中)
  4. MDR →\rightarrow→ Ad(IR)(将数据写回到指令的地址部分)

7.2.3 执行周期

非访存指令

指令的执行阶段,都不会访存到存储器。

  • CLA

清 0 指令,微操作是 0→ACC0 \rightarrow ACC0→ACC,将累加器清零。

  • COM

取反指令,微操作是 ACC‾→ACC\overline{ACC} \rightarrow ACCACC→ACC,累加器内容按位取反。

  • SHR

算术右移,有两个微操作。

  1. L(ACC)→R(ACC)L(ACC) \rightarrow R(ACC)L(ACC)→R(ACC),表示累加器每一位都移到右边一位。
  2. ACC0→ACC0ACC_0 \rightarrow ACC_0ACC0​→ACC0​,表示最左边的符号位保持不变,因此是算术右移。
  • CSL

循环左移,有两个微操作。

  1. R(ACC)→L(ACC)R(ACC) \rightarrow L(ACC)R(ACC)→L(ACC),表示累加器每一位都移到左边一位。
  2. ACC0→ACCnACC_0 \rightarrow ACC_nACC0​→ACCn​,表示最左边的位移动到最右边,因此是循环左移。
  • STP

停机指令,微操作是 0→G0\rightarrow G0→G,一旦控制信号有效机器就会停掉。

访存指令

  • 加法指令(ADD X)
  1. Ad(IR)→MARAd(IR)\rightarrow MARAd(IR)→MAR(将指令的地址部分送到 MAR)
  2. 1→R1\rightarrow R1→R(读信号)
  3. M(MAR)→MDRM(MAR)\rightarrow MDRM(MAR)→MDR(将加法所需数据从内存读出)
  4. (ACC)+(MDR)→ACC(ACC)+(MDR)\rightarrow ACC(ACC)+(MDR)→ACC(与 ACC 中的数相加)
  • 存数指令(STA X)
  1. Ad(IR)→MARAd(IR)\rightarrow MARAd(IR)→MAR(将指令的地址部分送到 MAR)
  2. 1→W1\rightarrow W1→W(写信号)
  3. ACC→MDRACC\rightarrow MDRACC→MDR(将存数写入MDR)
  4. MDR→M(MAR)MDR\rightarrow M(MAR)MDR→M(MAR)(写入数据)
  • 取数指令(LDA X)
  1. Ad(IR)→MARAd(IR)\rightarrow MARAd(IR)→MAR(将指令的地址部分送到 MAR)
  2. 1→R1\rightarrow R1→R(读信号)
  3. M(MAR)→MDRM(MAR)\rightarrow MDRM(MAR)→MDR(读出数据到 MDR)
  4. MDR→ACCMDR\rightarrow ACCMDR→ACC(将数据写入累加器)

转移指令

  • 无条件转(JMP X)

Ad(IR)→PCAd(IR)\rightarrow PCAd(IR)→PC(将跳转地址赋给PC)

  • 条件转移(BAN X,负则转)

ACC0Ad(IR)+A0‾(PC)→PCACC_0Ad(IR)+\overline{A_0}(PC)\rightarrow PCACC0​Ad(IR)+A0​​(PC)→PC(ACC0ACC_0ACC0​ 为累加器中数据的符号位,若符号位为 1,即为负数,则跳转)

7.2.4 中断周期

一、保存断点

中断隐指令中需要保存断点,通常断点都保存在内存的 0 号单元中。

  1. 0 →\rightarrow→ MAR(CU 传 0 到 MAR,作为断点保存地址)
  2. 1 →\rightarrow→ W(CU 发出写命令)
  3. PC →\rightarrow→ MDR(将即将要执行的指令地址送到 MDR,PC 中的内容就是断点)
  4. MDR →\rightarrow→ M(MAR)(将断点写入内存中)

二、执行中断处理程序(PC跳转)

  1. 向量地址 →\rightarrow→ PC(实现 PC 的跳转,CU 将数据流交给 PC)

三、硬件关中断

  1. 0 →\rightarrow→ EINT(将中断总允许位置 0)

7.2.5 指令执行的完整分析

以 ADD@XADD\ @XADD @X 指令为例来分析指令执行周期。

取指周期

CU 下的点为各种控制信号,数据通道中的小圈为受控门,受控门收到控制信号的控制。

  1. C0:PC→MARC_0:PC\rightarrow MARC0​:PC→MAR
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)→MDRC_2:M(MAR)\rightarrow MDRC2​:M(MAR)→MDR
  4. C3:MDR→IRC_3:MDR\rightarrow IRC3​:MDR→IR
  5. C4:OP(IR)→CUC_4:OP(IR)\rightarrow CUC4​:OP(IR)→CU
  6. (PC)+1→PC(PC)+1\rightarrow PC(PC)+1→PC

间址周期

此处的指令需要间址,因此有间址周期。

  1. C5:MDR→MARC_5:MDR\rightarrow MARC5​:MDR→MAR(将 MDR 指令中的形式地址传给 MAR)
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)→MDRC_2:M(MAR)\rightarrow MDRC2​:M(MAR)→MDR(取回有效地址)
  4. C3:MDR→Ad(IR)C_3:MDR\rightarrow Ad(IR)C3​:MDR→Ad(IR)(将有效地址送到 IR 的地址部分)

执行周期

接下来需要根据有效地址取回数据,再将数据与累加器中数据相加得到结果。

  1. C5:MDR→MARC_5:MDR\rightarrow MARC5​:MDR→MAR(将 MDR 指令中的有效地址传给 MAR)
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)→MDRC_2:M(MAR)\rightarrow MDRC2​:M(MAR)→MDR(取回数据)
  4. C7:MDR→ALUC_7:MDR\rightarrow ALUC7​:MDR→ALU(将数据送到算术逻辑单元)
  5. C6:AC→ALUC_6:AC\rightarrow ALUC6​:AC→ALU(将累加器中数据送到算术逻辑单元)
  6. CU→ALUCU\rightarrow ALUCU→ALU(加信号有效)
  7. C8:ALU→ACC_8:ALU\rightarrow ACC8​:ALU→AC(将加法结果送到累加器)

7.3 流水线技术

7.3.1 指令的二级流水

  • 采用指令预取的方式,第一条指令还未执行结束,第二条指令就开始取指。

  • 若取指和执行阶段时间完全重叠,则指令周期减半,速度提高 1 倍。

7.3.2 指令的六级流水

将指令的执行分为下述六个阶段。

  1. 取指
  2. 译码
  3. 计算操作数地址
  4. 取数
  5. 执行
  6. 写回

六级流水,则从 T6T_6T6​ 开始,每个时间单位完成一条指令,9 条指令只需 14 个时间单位。

7.3.3 流水线性能

吞吐量

单位时间内流水线所完成指令或输出结果的数量。

设 mmm 级流水线,各段时间为 Δt\Delta tΔt,则最大吞吐率为
Tpmax=1Δt,T_{pmax}=\displaystyle\frac{1}{\Delta t}, Tpmax​=Δt1​,
而实际吞吐率为(连续处理 nnn 条指令的吞吐率)
Tp=nm∗Δt+(n−1)∗Δt,T_p=\displaystyle\frac{n}{m*\Delta t+(n-1)*\Delta t}, Tp​=m∗Δt+(n−1)∗Δtn​,
可以发现,如果 nnn 趋向于无穷大
lim⁡n→∞Tp=Tpmax\lim_{n\rightarrow \infty}T_p= T_{pmax} n→∞lim​Tp​=Tpmax​

加速比 SpS_pSp​

mmm 段流水线的速度与等功能的非流水线的速度之比。

设流水线各段时间为 Δt\Delta tΔt,则完成 nnn 条指令在 mmm 段流水线上共需
T=m∗Δt+(n−1)∗Δt,T=m*\Delta t+(n-1)*\Delta t, T=m∗Δt+(n−1)∗Δt,
而完成 nnn 条指令在等效的非流水线上共需
T′=n∗(m∗Δt),T'=n*(m*\Delta t), T′=n∗(m∗Δt),
则我们可以求得
Sp=nmΔtmΔt+(n−1)Δt=nmm+n−1S_p=\displaystyle\frac{nm\Delta t}{m\Delta t+(n-1)\Delta t}=\displaystyle\frac{nm}{m+n-1} Sp​=mΔt+(n−1)ΔtnmΔt​=m+n−1nm​
当 n→∞n\rightarrow \inftyn→∞ 时,我们可以得到
lim⁡n→∞Sp=m\lim_{n\rightarrow \infty}S_p= m n→∞lim​Sp​=m

效率

  • 效率,即流水线中各功能段的利用率。
  • 由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态。

效率=流水线各段处于工作时间的时空区流水线中各段总的时空区=mnΔtm(m+n−1)Δt=nm+n−1效率=\displaystyle\frac{流水线各段处于工作时间的时空区}{流水线中各段总的时空区}=\displaystyle\frac{mn\Delta t}{m(m+n-1)\Delta t}=\displaystyle\frac{n}{m+n-1} 效率=流水线中各段总的时空区流水线各段处于工作时间的时空区​=m(m+n−1)ΔtmnΔt​=m+n−1n​
当 n→∞n\rightarrow \inftyn→∞ 时,效率趋近于 111。

7.3.4 流水线的相关问题

结构相关

不同指令争用同一功能部件产生资源冲突。

如在上述的六级流水线中,取指与取数发生了冲突。

解决办法:

  1. 后续指令停顿
  2. 指令存储器和数据存储器分开,多部件(哈佛结构)
  3. 指令预取技术(仅适用于访存周期短的情况)
    • 指令执行过程中,只要取指部件空闲,就一直去内存中取指令,将指令放入CPU的指令预取队列中。
    • 将来一旦发现取指与取数冲突的情况,就以取数为有限,取指暂停。

数据相关

不同指令因重叠操作,可能改变操作数的读/写访问顺序,数据相关有三种,分别是 (1) 写后读相关,(2) 读后写相关,(3) 写后写相关。下面主要分析写后读相关冲突。

现有上述两条指令,其流水线执行过程如下。

可以看到在 R1R_1R1​ 还未写回时,就在取数过程中被取走了,因此发生了错误。

解决办法:旁路技术。

  • 我们将 ALU 的输出端直接连向输入端,即可在第一条指令执行结束时,就将 R1R_1R1​ 写入 ALU 的输出端口,从而避免错误发生。

控制相关

控制相关问题由转移指令引起,如下述的执行指令。DIV 指令已经执行了几个周期了,但是 BNE 指令是跳转指令,因此 DIV 指令执行的多余周期全部作废,造成了流水线效率的浪费。

解决办法:

  • 为了解决这个问题,我们采用了分支预测法。
  • 例如对于一个 100 次的循环,不管循环内容,只要知道对于这种 100 次的循环来说,前 99 次走到循环的末尾,都要跳回到循环的上部继续往下走。因此我们我们遇到跳转指令时,就直接从跳转位置开始取指令,降低出错概率。

7.3.5 提高机器速度的方法

一、提高访存速度(CPU 与主存)

高速芯片、Cache、多体并行

二、提高 I/O 和主机之间的传送速度

中断、DMA、通道、I/O处理机、多总线

三、提高运算器速度

高速芯片、改进算法、快速进位链

总结

因此,提高整机处理能力,主要从两个角度入手。

  1. 高速器件
  2. 改进系统结构,挖掘系统的并行性

7.3.6 流水线的多发技术

一、超标量技术

  • 每个时钟周期内可并发发射多条独立指令,配置多个功能部件。
  • 不能调整指令的执行顺序: 通过编译优化技术,把可并行执行的指令搭配起来。

二、超流水线技术

  • 在一个时钟周期内再分段(3段),在一个时钟周期内一个功能部件使用多次(3次)
  • 不能调整指令的执行顺序: 靠编译程序解决优化问题

三、超长指令字技术

  • 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
  • 采用多个处理部件。

计算机组成原理完整学习笔记(七):CPU 的结构与功能相关推荐

  1. 《王道计算机组成原理》学习笔记和总目录导航

    <王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...

  2. 《计算机组成原理》学习笔记

    目录 第一章 计算机系统概论 1.计算机的软硬件概念及系统的层次结构 2.计算机的基本组成 3.计算机体系结构与组成 4.冯·诺伊曼机基本组成.特点 5.计算机基本概念:CPU(由哪几部分构成)机器字 ...

  3. 计算机组成原理(哈工大)学习笔记

    文章目录 计算机组成原理 一.计算机系统概论 1.1计算机系统简介 一.计算机的软硬件概念 二.计算机系统的层次结构 三.计算机体系结构和计算机组成 1.2计算机的基本组成 1.3计算机硬件的主要技术 ...

  4. 《王道计算机组成原理》学习笔记总目录+思维导图

    本篇文章是对<2021王道组成原理>知识点的笔记总结归档,虽说是2021年的,但是这些都是最核心的底层基础知识,过多少年都不会有很大的变化,核心都差不多. 我的武功秘籍:note.bith ...

  5. 计算机二级Python学习笔记(七)

    上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...

  6. 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰

    文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...

  7. 853计算机科学基础综合,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库...

    2022考研853计算机专业基础综合<计算机组成原理>复习笔记及考研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连续的. ...

  8. 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...

    2022考研 853计算机专业基础综合 <计算机组成原理>复习笔记及考 研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连 ...

  9. 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练

    [K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...

  10. 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么

    嵌入式算法移植优化学习笔记5--CPU,GPU,TPU,NPU都是什么 一.什么是CPU? 二.什么是GPU? 三.什么是NPU? 四.什么是TPU? 附: 随着AI的广泛应用,深度学习已成为当前AI ...

最新文章

  1. Linux JSP连接MySQL数据库
  2. SDN商用落地:遍地开花不代表全面实现
  3. java方法体逻辑不会写怎么办,想自己写框架?不会写Java注解可不行
  4. Amazon S3和Swift鉴权机制分析
  5. 在MYSQL中输入net stop mysql没有反应?
  6. 03 Oracle分区表
  7. 鬼才项斌,用人工智能推动教育服务创新
  8. 软件定义数据中心—Windows Server SDDC技术与实践
  9. python删除列表中的重复值_如何从 Python 列表中删除重复项
  10. python下载大文件mp4_Python3 使用requests模块显示下载大文件显示进度
  11. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_9 Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式...
  12. Atitit bootsAtitit bootstrap布局 栅格.docx目录1. 简述container与container-fluid的区别 11.1.1. 在bootstrap中的布局
  13. Python 代码练习
  14. 问答题库(路由与交换){简答版}
  15. 查询iphone邮箱服务器,iPhone上的各种邮箱设置
  16. 360安全杀毒软件扫描计算机病毒,360木马查杀能扫描病毒吗
  17. 通信教程 | 波特率、比特率、通信速度的区别
  18. RDD -- 其他操作
  19. Spring retry重试框架
  20. android tts实现方案,Android自动朗读(TTS)的实现

热门文章

  1. VM虚拟机安装centos6.3详细图文教程
  2. 数学问题(一):进制转换
  3. Java将xml转docx,java对象与xml间的转换.docx
  4. python contains类似函数_介绍几款Python性能优化工具
  5. js获取歌曲时长_小白的js——html播放器(3)
  6. C语言中scanf和printf格式化输入输出
  7. python机器学习-乳腺癌细胞挖掘(基于真实美国临床数据)
  8. 容器技术Docker K8s 37 Serverless Kubernetes(ASK)详解-Serverless容器进化
  9. 阿里云云计算 16 块存储的概念
  10. 查看AWS中Identity and Access Management(IAM)的Access Key和Secret Access