Skip to content

Latest commit

 

History

History
895 lines (363 loc) · 15.1 KB

计组.md

File metadata and controls

895 lines (363 loc) · 15.1 KB

同一个结构可以有不同组成

structure

  1. CPU
  2. main memory
  3. I/O
  4. system interconnection

使用stored program concept

表现指标

  1. branch predition
  2. data flow analysis
  3. speculative execution

指令流水 超标量

阻碍clock speed

  1. power
  2. RC delay(电容电阻延迟)
  3. memory latency

the system clock

系统时钟

clock rate: 时钟频率

clock cycle: 时钟周期

cycle time: 周期时间

CPI: cycles per instruction

MIPS: millions of instruction per second 避免指令系数的情况出现

MFLOPS: millions of floating-point operations per second 复杂指令的情况

SPEC 程序集合, 用来测试指令运行情况

  • SPEC存在专门的不同测试标准, 针对不同的情况

Amdahl's Law 阿姆达定理

$$ speedup = \frac{timetoexcuteinsingleprocessr}{timetoexcuteinmanyprocessr} $$

当核足够多的时候, 并发需要的时间接近0, 所以, 和程序有关

top-level view of computer

早期programming in headware

后期programming in software

  1. 数据和指令都存储在内容中

interrupt

使用中断

program

timer

I/O

hardware failure

字节和字

计算机的内存单元可以是按字节分和按字分的

  • 内存单元的长度一样

是一个数据内容的所占的内容

比如一个INT就是一个字, 字长代表长度

大端顺序/小端顺序: 内存中不同的存放方式

总线

存在总线竞争的问题

多个部件的速度不一样, 总线的速度需要依靠速度最慢的设备

可能使用高速总线, 低速总线

  • 双总线/三总线模式
  • 同步传输方式, 使用一个clock总线控制全部的设备

操作数

可能在内存或者寄存器或者指令(常量)中

内存的速度没有寄存器快

  • 存在间接寻址的方法
  • 有符号的数字使用第0位作为符号位, 0是正数
  • 补码是把负数可以和正数一样表达

program counter

值是要被执行的指令

一个一个+1操作, 使得指令不断下移

可以通过转移改变偏移量实现if操作

接口电路(port)

使用不同的标准, 配置适配器, 适配不同的model(外部输入输出)

  • 有不同的接口电路编号

direct memory access

DMA控制器

自动操作从I/O到memory, 或memory到I/O

  • CPU只需要处理一次, 传输两者开始的地址和写入的长度

cache memory

内存有DRAMSRAM

SRAM速度更快, 容量小

命中率: CPU访问的时候, 多少可能在SRAM中找到需要的数据

cache连接CPU和main memory

  • 缓存可以有多层, 每一层的缓存速度是不一样的

CPU

寄存器,总线,ACU(计算单元)

存储器

顺序访问,随机访问,DMA,相联访问的方式

顺序访问就和磁带一样, 访问的时间是变量, 存储数据的叫做record

随机访问

  • 随机访问的地址不同, 但是每个访问的时间都是一样的

相联访问同时比较多个, 键值对一样, 使用关键字匹配实现, 一般用在缓存中

DMA: 直接访问, 访问硬盘, 访问的时间是变量

  • 内存是用电容实现的, 每次读出内容都是破坏性的, 所以需要写回去
  • RAM: 读取哪个位置的时间是一样的

评价存储器性能

access time: 完成一个访问需要的事件

cycle time: 从上一次访问结束开始到下一次访问结束需要的时间

切换访问的时候可能需要消耗其他时间, 连续访问的效果

transfer rate: 传输的速度

物理特性

volatile 易失性 nonvolatile

erasable 可以擦除的

内部存储和外部存储

internal 内存等

external 磁盘等

内存条的层次(memory hierarchy)

inboard memory

  1. register
  2. cache(SRAM) 静态随机访问存储器 不是用电容存储,使用MOS管构成的寄存器存储内容
  3. main memory 使用电容存储内容

outboard memory

  1. magnetic disk 机械盘
  2. CD-ROM
  3. CD-RW
  4. DVD-RW
  5. DVD-RAM
  6. blue ray

off-line storage

  • DVD能存储4.3G, CD只有700MB左右

cache 和 main memory

分块, 一个块有多个字节

cache 有 tag, 作为索引的key

缓存和内存是以块为单位传输的

CPU会自动检查内存内容是否在缓存(hit cache)中

命中, 然后进行地址转换

不命中, 先从main memory读取内容到cache, 然后再读取到CPU

  • 缓存不是越大越好, 大的缓存判断命中需要的时间也要更长

给内存块分配在缓存块中的地址

映射方式:

  1. 全相联映射方式(assocative): 任意对应
  2. 直接映射(direct): 一一对应
  3. 替换算法(replacement algorithm): 淘汰原来已经在里面的内容, 替换掉, LRU/FIFO/LFU/RANDOM

写入政策

cache address

一段代码的地址不是真实的地址, 是由虚拟地址写着的

虚拟存储器(virtual memory)

当内存的物理空间不足的时候, 把内存部分不是特别需要的内容交换到硬盘中

MMU(存储器关系单元)

一段代码的地址不是真实的地址, 是由虚拟地址写着的

使用MMU转换你的虚拟地址为一个物理地址

logical/physical cache

logical cache

不需要经过MMU, 直接使用虚拟地址访问缓存

physical cache

使用物理地址存放的, 需要使用MMU

mapping function

不同的映射方式

映射方式:

  1. 全相联映射方式(assocative): 任意对应
  2. 直接映射(direct): 一一对应
  3. 替换算法(replacement algorithm): 淘汰原来已经在里面的内容, 替换掉, LRU/FIFO/LFU/RANDOM

比如使用取模数的运算的直接映射运算方式

全相联的缓存存放的内容可能来自任何一个内存内容

set assocative(集合相联):

  • 以block为单位作为转移的最小单位, 而不是block中的unit

内存地址的计算

1024 = 2^10

以byte作为一个最小单位

所以16MB就是24位的地址信息

  • 内存的总位数由main memory的大小决定

direct mapping function

包含以下三个字段

memory address = tag + line + word

word(存储字): 代表当前内容是内存块内第几个单元

line: 代表这个内容在第几个内存块中

在缓存中的LINE = 内存中的LINE 整除 缓存的总的块数

从缓存块确定是来自哪个内存块中地址, 检查TAG字段

  • 缓存中的同一块内容的TAG一定是相同的
  • TAG+LINE(来自缓存的LINE) = LINE(在main memory)

fully associative mapping

内存地址分成 TAG + WORD

  • 不存在LINE, 因为缓存块可以存储任意一块内存块的内容

  • TAG直接代表内存中的块的信息

set-associative mapping(主相联)

缓存由set构成, 一个set中块的位置是任意存储的, 但是一个块属于哪个set是确定的

缓存的内存一个地址包含多个block, 内存中的地址和缓存中的set是一一对应的, 但是在一个set中如何存放block是随意的

memory address = tag + set + word

set为0000-1fff的时候, set使用13bits

  • 一个set有K个block的时候, 叫做K way mapping

边界对齐

一个变量的数据可能存放在不同的内存block中, 访问不同的block会造成性能的丢失, 所以对齐的时候, 可能可以减少对内存的访问

victim cache

直接内存映射缓存可能造成很多的冲突问题

使用victim cache, 可以减少冲突造成的问题

当出现冲突的时候, 存放从缓存中淘汰的旧的缓存内容, 当出现再次使用这个旧的缓存的时候, 直接从牺牲缓存中获取

定义大小计算

image-20240318184826501

替换算法(replacement algorithm)

当CPU需要访问某个内存中的内存的时候, 但是这个内存内容不存在在缓存中, 需要把缓存中的一个内容和需要使用的内存内容替换

  1. LRU

least recently used 最少最近使用

  • 一个内容在最近被访问, 之后被访问的概率也很高

在近期没有被访问的数据在未来也可能不会访问

替换最近最长时间没有被访问的内容

  1. FIFO(first in first out)

  2. LFU(least frequently used)

和LRU的区别是LRU存在时间限制, LFU没有时间限制

写入数据

使用write throughwirte back

write through: 同时对内存和缓存都要操作, 效率低

write back: 只对缓存操作

被替换的时候, 直接覆盖内存的内容

unified versus split caches

分离成指令数据两部分缓存

RAM

DRAM: 动态随机存储器

使用电容来存储数据

有电子代表1

每隔一段时间需要充电, refresh(全部读取一遍其实就实现了刷新, 叫做行再生装置)

  • 单管的DRAM cell是破坏性的读取, 每次读取会破坏原先里面的内容, 会让全部变成0
  • 需要刷新, 所以叫做动态的RAM

SRAM: 静态随机存储器

使用寄存器实现, 不需要定期充电刷新, 所以速度快

需要一直供电

共同处:

都是volatile(易失的)

DRAM: 内存条

SRAM: 缓存

SDRAM: 同步随机存储器

传统的DRAM是异步的, 因为执行的速度不一样, 使用异步可以不依赖最慢的硬件速度, 但是需要等待响应码

使用SDRAM没有等待状态, 使用外部的时钟信号同步

DDR SDRAM: double data rate SDRAM

一个上升沿或者下降沿都作为数据传输的同步信号(以前只是上升沿有效)

ddr的提升让prefetch buffer提升, 一次可以取出的内容

flash memory

介于eprom(可擦除的编程ROM)和eeprom(电子可擦除的ROM)

  • 不支持字节级别的擦除, 支持的是block级别的擦除

ROM

只读的

不需要供电

不需要从外存中读入内存

chip logic

4M*4 代表有有4M个units, 4代表4bits

有21bits的地址使用11个地址线的时候, 所以需要输入两次, 需要使用锁存器

  • 输入的时候分成row addresscolumn address, 获取行地址和列地址放入锁存器

timing and control: 分成RAS(row address), CAS,WE(write enable),OE

全部读取一遍其实就实现了刷新, 叫做行再生装置

在刷新期间无法被访问, 这是弊端(集中式刷新)

分布式刷新: 把全部内容的读取刷新分步到2ms(刷新间隔)中, 每次刷新一部分就给CPU访问

  • 因为DRAM的容量很大, 所以需要拆分到row address和column address

多个存储芯片合成一个芯片的时候, 实现位扩展, 每个芯片代表其中的一bit(全部工作)

比如四个存储芯片的时候, address的最后2bits作为选择哪个储存芯片工作,叫做自扩展(只有一个存储芯片工作)

  • 可以组合实现新的扩展

多体交叉存储器(interleaved memory)

多个主体可以并行, 速度快

读取经过MAR,BODY,MDR(memory data register)

可以使用交叉编址/顺序编址

顺序编址: 一个从0到4G - 1,一个从4G到8G-1

交叉编址: 一个存放奇数地址, 一个存放偶数地址

最后1bit作为分位地址(低位交叉编址)

前面的作为体内地址

error

hard failure

硬件问题, 物理上永久的损伤

soft error

软件问题, 可能来自供电问题

校验方法

奇偶校验法不能精确到哪一位错误

外存

FAT: file allocation table(文件分配表)

  1. wait for device (等待硬盘空闲)
  2. wait for channel (外部设备访问的隧道, 外围控制器)
  3. seek (寻道)
  4. ratational delay
  5. data transfer

access time = seek + ratational delay

RAID: 磁盘阵列

SSD: 固态硬盘

CD-ROM: 使用铝层反光, 有land,pit

光盘的数据在螺旋线(光道)上面

block访问的方式

使用MIN,SEC,SEC作为访问到第几个部分的信息

CR-R: CD recordable

write once and read many

CD-RW: CD rewritable

tape: 磁带

有多个磁道, 一下子可以读取多个磁道

也是使用多个block存储的

I/O model

接口模块

地址线,数据线,控制线三个部分

使用控制信号, 数据在buffer中, 使用transducer转换信号

  • 处于外部设备和系统的总线之间, 系统总线不直接和外部设备接触, 之间有I/O model

作用:

控制, 定时

控制器通信

设备通信

数据缓冲

错误检查

  • 外部设备也存在多种状态, 使用二进制编码表示, 存储在state/control register
  • 对外部设备的操作命令存入control register, 被I/O logic解析执行

三种方式实现I/O操作

programmed i/o: 用编程实现, 效率低

interrupt-driven i/o: 使用中断技术, 不会打断CPU

DMA: direct memory access

对于不同的接口寄存器, 使用不同的PORT, 有不同的编号

使用memory-mapped i/o

设备和内存在同一个地址空间中

对设备的操作看起来像是对内存操作

好处: 不用设计访问设别的特殊指令

坏处: 使用地址表示的时候, 内存的address是太长了

使用isolated I/O(独立编址)

设别是一套编址方式, 内存是一套

PSW: programe state word 程序状态字

根据逻辑部件, 把一个数字操作得出它的状态, 使用PSW表示

使用程序状态字寄存器存储

PC: 程序计数

数字系统

weight: 权重

radix/base: 基

十进制转换二进制: 整数部分除以2, 小数部分乘以2

使用十六进制的原因:

比二进制表示的数字更加紧凑, 使用的数字的存储个数大多是4bits的倍速

ALU(arithmetic logic unit)

算法运算单元 ALU

control signal: 用来选择运算模式

flags: 用来表示不同标志, 比如, 进位标志, 符号位.

使用状态实现一些功能, 比如if语句的判断检查sf(symbol flag), zf(zero flag)的内容

定点数: 小数点的位置固定

不同的定点防止定义混淆的问题: 不同的指令可以区分定点整数定点小数

浮点数: 小数电的位置不固定

可以分成小数部分和整数部分

原码: 直观

补码: 运算简单, 基本都是使用补码表示数据

正数原码就是补码

负数的补码需要原码保留符号位, 其他位置取反然后末尾+1

  • 补码的0是唯一的, 10000表示-16
  • 表示范围-2^n~2^n-1

获取补码的方法再执行一遍就是原码

  • 补码按照符号位扩展可以保证正常扩展数字

补码的位置全部取反然后取反, 末尾+1, 可以取到相反数

  • 对于最小值-2^n
  • 补码的运算可能会溢出, 溢出之后符号可能会发生改变(不同的符号相加一定不溢出, 同号不一定溢出)

  • 减法使用被减数+减数的相反数实现

补码获取原码:

最高位符号位的权重作为-2^n, 加权相加

$$ OF(offset) = f_a f_b\bar{fh} + \bar{f_a} \bar{f_b}fh $$

乘法实现

一组数组存储上4位, 一组数组存储下4位

每次相加, 然后, 移位一位, 小的部分移到后4位数组

对于有符号的乘法, 符号位异或, 然后数据位执行乘法.

逻辑右移: 不考虑符号, 空出来的高位补零 (给无符号数字用)

算术移位: 空出来的最高位需要和原来的最高位是相同的, 需要保持出现的数字和符号位相同. (给有符号的数字用)