计算机组成

参考

《计算机组成与设计》

计算机概要与技术

计算机系统结构中的8大伟大思想

  1. 摩尔定律
  2. 抽象简化设计
  3. 加速大概率事件
  4. 通过并行提高性能
  5. 通过流水线提高性能
  6. 通过预测提高性能
  7. 存储器层次
  8. 通过冗余提高性能

处理器

处理器从逻辑上包括两个主要部件:数据通路和控制器

  • 数据通路 执行算术操作
  • 控制器 指导数据通路、存储器和I/O设备按照程序的指令正确执行

数据安全

内存是程序运行时的存储空间,用于保存程序运行时所使用的数据,内存由
DRAM芯片组成,DRAM是dynamic random access memory的缩写,无论数
据存储在什么位置,DRAM访问内存的时间基本相同。缓存是一种小而快的存
储器,一般作为DRAM的缓冲,缓存使用静态随机访问存储器SRAM,全称是
Static Random Access Memory

  • 易失性存储器 类似DRAM的存储器,仅在加电时保存数据,也称主存储器,
    内存是靠电平来保存数据的,一旦断电数据就会丢失
  • 非易失性存储器 在掉电时仍可保持数据的存储器,例如磁盘、闪存光盘
    (CDROM, DVD),是靠磁性来保存数据的,断电不会影响数据

早期DRAM在主存储器中占主导地位,而磁盘在二级存储器中占主地位,后来
非易失性半导体存储器–闪存在个人移动设备中替代了磁盘,比如手机宣传
8+128G,8就是指手机内存,128G就是手机闪存,相当于电脑的磁盘

接口

性能

  • 响应时间 也叫执行时间,是计算机完成某任务所需的总时间,包括硬盘
    访问、内存访问、I/O活动、操作系统开销和CPU执行时间
  • 吞吐率 也叫带宽,性能的另一种度量参数,表示单位时间内完成的任务
    数量
  • X是Y的n倍快 性能X/性能Y=n=执行时间Y/执行时间X

性能的度量

  • CPU执行时间 只表示在CPU上花费的时间,可以细分为用于用户程序的时
    间和操作系统为用户服务花去的CPU时间。前者称为用户CPU时间,后者称为
    系统CPU时间
  • 时钟周期 为计算机一个时钟周期的时间,通常是处理器时钟
  • 时钟长度 每个时钟周期持续的时间长度
  • 一个程序的CPU执行时间=一个程序的CPU时钟周期数*时钟周期时间

指令的性能

指令数:执行某程序所需的总指令数量

  • CPU时钟周期数=程序的指令数*每条指令的平均时钟周期数
  • CPI 表示执行每条指令所需的时钟周期数的平均值,不同的指令需要的时间
    可能不同,CPI是所有指令所用时钟周期数的平均值
  • CPU时间=指令数*CPI/时钟频率

Amdahl

改进后的执行时间=受改进影响的执行时间/改进量+不受影响的执行时间

MIPS

MIPS=指令数/(执行时间*10^6) 指令执行的频率

计算机的语言

目前有四种流行的指令集,接下来会介绍MIPS指令架构

  • ARMv7
  • Intel x86
  • ARMv8
  • MIPS

操作数

32个64bit的寄存器文件,每个地址都是由8位地址符表示也就是字节编址,
使用大端法表示,一个字是32位

汇编语言

  • 加法 dadd $r1,$r2,$r3 $r1=$r2+$r3
  • 减法 dsub $r1,$r2,$r3 $r1=$r2-$r3
  • 立即数加法 daddi $r1,$r2,20 $r1=$r2+20

处理器

计算机的性能由指令数目、时钟周期长度和CPI决定,编译器和指令集决定了一
个程序所需要的指令数目,处理器的实现方式决定了时钟周期长度和CPI。要想
实现一个处理器,首先要构建一个数据通路,然后进一步构建一个简单的处理
器以实现MIPS这样的指令集

基本的MIPS实现

首先要设计的实现方式包含一个MIPS的核心子集

  • 存储访问指令 lw sw
  • 算术逻辑指令 add sub and or slt
  • 分支指令 beq j

实现方式

指令的实现过程大致相同,而与具体的类型无关,前两步都是一样的

  1. 程序计数器指向指令所在的存储单元,并取出指令
  2. 根据指令内存取出一个或两个寄存器

接下来的步骤取决于具体的指令类型,每个类型的指令都大致相同,比如除了
跳转指令外所有的指令在读取寄存器后都要使用算术逻辑单元,可能用于计算
地址、执行运算或比较

逻辑设计

MIPS实现中的数据通路功能部件包括两种不同的逻辑单元:处理数据值的单元
和存储状态的单元。处理数据值的单元都是组合单元,它们的输出只决定与当
前的输入

  • 组合单元 一个操作单元,如与门或ALU
  • 状态单元 一个存储单元,如寄存器或存储器

建立数据通路

首先分析执行每种MIPS指令时需要哪些主要部件

  • 数据通路部件 用来操作或保存处理器中数据的单元
  • 程序计数器 存放下一条将要被执行指令的地址的寄存器

流水线

流水线是一种实现多指令重叠执行的技术

MIPS指令流水

5级, 每级完成一个操作步骤

  1. IF: 从内存中取指令
  2. ID: 指令解码& 读寄存器
  3. EX: 执行运算或计算地址
  4. MEM: 访问内存操作
  5. WB: 将结果写回寄存器

流水线冒险

冒险现象:下一周期不能按时执行下一条指令

  1. 结构冒险 所需的部件忙,暂不可用
  2. 数据冒险 需要前面某条指令的计算结果,用于本次计算输入
  3. 控制冒险 需要根据前面某条指令的结果来确定分支的选择执行

结构冒险

某个资源使用上的冲突,如果某个MIPS流水实现,且只有一个内存部件,这个
部件执行一次操作需要多个时钟周期(比如乘法器和除法器)

  • 存取操作都需要访问内存
  • 取指令因此而停顿

数据冒险

一条指令依赖前一条指令的执行结果

1
2
add $s0,$t0,$t1
sub $t2,$s0,$t3

解决方法有三种

  1. 编译器安排指令序列–出现太频繁,效果不好
  2. 推迟执行,保持因果关系,性能下降
  3. forwarding 不要等待计算结果保存到目的寄存器,直接给下一条指令使用

控制冒险

下一条要取出的指令取决于分支指令的输出

数据通路

Author: 高明
Link: https://skysea-gaoming.github.io/2020/09/16/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.