本文主要是介绍计算机系统基础笔记(8)——存储器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
这章的重点也挺多的 大家好好学==
一、存储技术
(一)随机访问存储器
1.面向字节的存储器组织
- 程序根据地址引用数据
- 地址就像数组的下标
- 用指针来存储地址
- 用指针来存储地址
回顾:几种简单的存储器寻址模式
- 间接寻址 :寄存器R指向了存储器的地址
- 与C语言的指针作用相同
- movq (%rcx),%rax
- 基地址+偏移量寻址 :寄存器 R 指定了存储器区域的开始位置
- 常数 D 是偏移量
- movq 8(%rbp),%rdx
2.使用传统总线结构连接CPU和内存
- 总线:一组用于传输地址、数据和控制信号的并行线路
- 总线通常由多个设备共享
- 系统总线分为
- 数据总线(传输数据或者指令):CPU——寄存器
- 地址总线
- 控制总线(传输控制信号):CPU——输入输出设备
3.内存读
-
CPU把地址A发送到总线上
-
主存从总线上接收到地址A,检索到数据x(字)(这是控制区域的开关),然后发送到总线上
3.CPU从总线上接收数据x(字),然后写入到%eax寄存器中
4.内存写
- CPU将地址A发送到总线上,主存收到地址并等待相应数据的到达
2.CPU通过总线发送数据y (字)
3.主存从总线上接收到数据y(字),然后存储到地址A
5.随机访问存储器(重点)
需要了解英文名、相关特点及不同
- 随机访问存储器Random-Access Memory (RAM)
- 两者实现和存放都是二进制
(1)静态随机访问存储器(SRAM)
常用于高速缓存等等
- 每个单元用四个或六个晶体管构成的电路存储一个比特
- 只要保持供电,内容就会一直保持
- 比DRAM更快也更贵
- 对电噪声(EMI)、辐射等相对不敏感(抗干扰能力强
- 很难改变电路
(2)动态随机访问存储器(DSAM)
1.不同
- 比SRAM更慢也更便宜
- 对干扰(电噪声,辐射,…)比SRAM更敏感
- 数据必须每10-100毫秒刷新一次(为了保持内容)
- 每个单元用一个电容器存储一个比特
- 还需要一个晶体管用于存取
- 主要特征
- 传统上,DRAM通常被封装成一个芯片
- 大多数计算机上的主存都是有多个DRAM芯片构成的
3.技术特点 - 以两个维度(行和列)组织
- 在DRAM芯片内访问:先选择行,然后选择列(所以这就是空间局部性的源头^^)
- 结果:第二次访问同一行比不同的行更快
常规的DRAM组织
-
d x w DRAM:
总容量:d x w位
d 个超单元,每个超单元有w位(每格为一个超单位存放一些二进制数据)
-
读DRAM超单元(2,1)
- 第一步(a):**行访问选通信号(RAS) **(也就是行地址)选择第2行
第一步(b):行2复制到DRAM阵列的行缓冲区中
第二步(a):列访问选通信号 (CAS) (也就是列地址)选择第1列
第二步(b):超单元(2,1)从缓冲区复制到数据线,并最终返回CPU
3.内存条:由多个DSAM芯片组成
增强型DRAM
- 同步DRAM
- 使用常规时钟信号代替异步控制
- 双数据速率同步DRAM(通过发送多几倍的数据来使指令读取的更快)
- 采用双沿时钟触发,每周期每引脚发送两比特
(3)SRAM和DRAM的比较
6.非易失存储器(重点)
需要知道一些经典的非易失存储器
- 易失存储器:DRAM和SRAM都是易失存储器
- 最常见的非易失存储器是硬盘
- 硬盘是旋转的盘片(像DVD一样),大容量,但非常慢
- 还有 ROM(可读)、PROM(可编程)、EPROM(可擦写)、EEPROM、Flash Memory(散存)
- 非易失存储器可以在断电时保持信息
- 应用:存储程序固件(BIOS、磁盘控制器、网卡、图形加速卡、安全子系统等)、固态硬盘(作为机械硬盘的替代,应用于智能手机、平板电脑、笔记本电脑等电子产品中)
(二)磁盘存储
1. 磁盘的组成
2.磁盘构造(重点)
- 磁盘由多个转盘组成,每个盘有两个面
- 每个面由多个同心圆,称为磁道
- 每个磁道由多个扇区组成,扇区之间通过间隙分隔开
如图
- 柱面:所有盘片的面上到主轴中心距离相等的磁道的集合
3.磁盘的容量(重点)
- 容量:能被存储的最大位数
◼ 厂商一版使用 GB 作为容量单位(非标准单位)(跟内存中GB的量级相同但是大小不同 因为生产技术不同)
1 GB = 10 9 Bytes
-
决定容量的因素:
◼ 记录密度(位/英寸):每英寸的磁道上可以放入的位数
◼ 磁道密度(磁道/英寸):每英寸半径内的磁道数
◼ 面密度(位/平方英寸):记录密度与磁道密度的乘积 -
容量 = (#字节/扇区) x (avg. # 扇区/磁道) x (# 磁道/面) x (# 面/转盘) x (#转盘/硬盘)
下面是例子
Example:
512 bytes/sector
300 sectors/track (on average)
20,000 tracks/surface
2 surfaces/platter
5 platters/disk
Capacity = 512 x 300 x 20000 x 2 x 5
= 30,720,000,000
= 30.72 GB
4.多区记录
- 现代磁盘将磁道划分为不相交的子集,称为记录区
- 区域中的每个磁道具有相同数量的扇区,由最内侧的磁道的周长决定
- 记录区之间的扇区磁道比是不同的
5. 磁盘操作
- 磁盘的盘片以固定的转速旋转
- 沿着径向移动,臂可以将读/写头定
位在任何磁道上 - 读写头步调一致的从一个扇区移动
到另一个扇区
6.磁盘访问
- 寻道:寻找目标扇区所在磁道
如图 - 旋转延迟:等待目标扇区旋转到读写头
- 读:通过磁道旋转 读写头接触到不同的磁道并进行读的操作
如图
7.磁盘访问时间(重点)
- 由刚刚对磁盘访问的分析知道 磁盘的访问时间分为三部分
- 寻道时间
- 将读写头移动到目标扇区所在柱面的时间
- 典型值:3 - 9ms
- 旋转延迟
- 待目标扇区第一个比特通过读写头所花费的时间
- T avg rotation = 1/2 x 1/RPMs x 60 sec/1 min
- 传输时间
- 读取扇区内所有数据的时间
- T avg transfer = 1/RPM x 1/(avg # sectors/track) x 60secs/1 min
总结
磁盘访问时间 = 平均寻道时间 + (60/转速) **(1/平均每个扇区的磁道数)1000 +1/2 (60/转速)*1000
下面是例子
已知:
◼ 转速 = 7200 RPM
◼ 平均寻道时间 = 9 ms
◼ 平均每个扇区的磁道数 = 400
可得:
◼ T avg rotation = 1/2 x (60 secs/7200 RPM) x 1000 ms/sec = 4 ms.
◼ T avg transfer = 60/7200 RPM x 1/400 secs/track x 1000 ms/sec = 0.02 ms
◼ T access = 9 ms + 4 ms + 0.02 ms
- 补充:磁盘比SRAM慢四万倍左右,比DRAM慢2500倍,SRAM的访问时间是4ns/双字,DRAM是60ns/双字
8.逻辑磁盘块
- 建立逻辑块与物理扇区之间的映射
- 将对逻辑块的请求转换为三元组(盘面、磁道、扇区
9.I/O总线
- I/O桥:用于实现高速总线与低速总
线的协同工作
10.读磁盘扇区
- CPU通过向与磁盘控制器相关的端口
(地址)写入命令、逻辑块号和目标存
储器地址来开启磁盘读取。 - 磁盘控制器读取扇区信息,并启动DMA
将磁盘数据向主存的传输。(DMA:直接内存访问技术(绕开CPU))(DMA是重点^^) - 当DMA传输完成时,磁盘控制器用一个
中断通知CPU(即在CPU上触发一个特
殊的中断引脚)
(三)固态存储
了解即可
1.固态硬盘(SSD)
页:512B – 4KB
块:32 – 128 个页
数据读写以页为单位
页仅能才擦除后被写入
通常擦除操作以块为单位
块的寿命大约是100,000次写入
2.固态硬盘性能特点
为什么随机写慢?
◼ 擦除一个块的时间很慢(将近1ms)
◼ 写入页将触发当前块中所有有效页的一次复制
◼ 找到一个用过的块(新块)并擦除它
◼ 将页面写入新块
◼ 块将其他页面从旧块复制到新块
3.硬盘与磁盘之间的选择
优点(固态硬盘)
◼ 没有机械结构 → 更快,更低能耗,更结实
缺点
◼ 寿命问题
◼ 可以通过Flash转换层(FTL)的负载均衡来缓解
◼ 例如:Intel X25 保证 1PB(10 15 byte)数据的随机读写寿命
◼ 在2010年,大约每字节的成本是(磁盘)的100倍
(四)存储技术趋势
- DRAM,磁盘和CPU间性能差距越来越大
二、局部性原理
(一)问题的提出:内存的访问速度慢
- 与CPU指令周期相比,DRAM的访问速度相当慢
- ◼ DRAM芯片的访问时间大约是30-50ns
◼ 将数据从主存传输至寄存器的时间更是至少要3倍于此
◼ CPU指令周期是亚纳秒级的,每次内存访问的时间大约是100多个CPU指令周期
◼ 而且这种差距还有扩大的趋势
- ◼ DRAM芯片的访问时间大约是30-50ns
- 结果:内存的访问效率对计算机系统的性能有重要的影响
- ◼ 程序中近乎1/3的指令时内存数据的加载和存储
◼ 这个问题需要硬件设计者和程序员共同来解决
- ◼ 程序中近乎1/3的指令时内存数据的加载和存储
2.局部性原理
-
局部性原理:程序倾向于使用最近访问过的数据和指令,或是与之临近的数据和指令(会考)
-
时间局部性
- 最近使用过的指令/数据很可能在不久的将来还会再次被使用
- 最近使用过的指令/数据很可能在不久的将来还会再次被使用
-
空间局部性
- 临近地址的指令/数据在短期内可能会使用
- 临近地址的指令/数据在短期内可能会使用
下面是例子
- 数据使用
◼ 连续使用数组元素(步长为1)(空间局部性)
◼ 每一次循环都会使用sum 变量(时间局部性) - 指令使用
◼ 按照顺序使用指令(空间局部性)
◼ 通过循环反复使用指令(时间局部性)
三、存储器层次结构
(一)软件与硬件
- 建构一种用与组织存储器与存储系统的方法,称之为存储器层次结构
(二)存储器结构
下面是经典的存储器金字塔,需要了解他的特征以及大概的分布
- 缓存:更小、更快速存储设备来暂时存储较大、较慢存储设备中数据子集(快暂存慢的)
- 基本思想是对于更小、更快的第k层,缓存较大、较慢的第k+1层中的数据
- 为什么能提高效率: 程序的局部性原理:程序访问第k层的数据的概率要比第k+1层更大
- 重要思想:存储器层次结构构建了一个巨大的存储池,其成本接近于最底部的廉价存储,其速度接近于最顶部的快速存储
(三)缓存
1.高速缓存与主存间的缓存
- 以“块”作为基本传输单元
如图
2.命中
- 若请求的数据在块中即为命中
如下例
3.局部性特征如何导致缓存命中
- 时间局部性
◼ 如果第二次到第N次都访问相同位置,将会导致命中 - 空间局部性
◼ 缓存块中包含多个数据,第二次到第N次数据访问可能会命中在第一次访问数据所处的缓存块上
◼ DRAM的行缓冲器也是一个缓存的案例
4.未命中
- 块未在高速缓存中: 未命中
- 各种类型的未命中(重点)
- 冷(强制)未命中
- 对块的第一次访问必然会错过
大多数冷未命中发生在(程序、系统)启动时,因为缓存是空的
- 对块的第一次访问必然会错过
- 容量未命中
- 当活跃的缓存块集合(工作集)大于缓存容量时发生 - 冲突未命中
- 大多数缓存机制都是将k+1层的块的位置映射在k层指定的一个子集中(有时甚至固定的某个位置
- 例如:级别k+1的块i必须放在级别k的块(i mod 4)中
- 即使k层缓存足够大,但当k+1层的多个数据对象都映射到相同k级块时,也会发生冲突未命中
- 例如:按下列次序引用快0、8、0、8、0、8 ……,每次都会出现未命中
- 冷(强制)未命中
- 解决方案
- 块放置策略
决定了块#12存储在缓存中
的那个位置 - 块替换策略
决定了高速缓存中那个块要
被换出(牺牲)
- 块放置策略
重点
- 局部性原理
- 磁盘的两个指标 容量和访问磁盘的时间的计算
- 了解常见的易失存储器和非易失存储器
- 需要了解随机访问存储器的英文名、相关特点及不同
- 存储器的结构特点
- 未命中的类型
这篇关于计算机系统基础笔记(8)——存储器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!