计算机组成原理(4) - 存储系统
存储系统
[TOC]
一 存储器概述
1.1 存储器的分类
1. 按照存储介质分类
(1) 磁存储器
(2) 半导体存储器
(3) 光存储器
2. 按照存取方式分类
(1) 随机存储器(RAM)
可以按照地址随机读写数据存储单元
(2) 顺序存储器(SAM)
存储单元中的内容只能按照顺序进行访问,访问的时间和地址有关
3. 按照信息的可改写性分类
既可以读也可以写的被称为是读写存储器,否则被称为是只读或者是只写寄存器。
4. 按照信息的可保存性分类
存储器可以被分为易丢失和不易丢失,易丢失指的是当断电后保存的信息会丢失
5. 按照功能和读写的速度进行分类
- 寄存器存储器
- 高速缓冲存储器
- 主存储器
- 外存储器
1.2 存储器的技术指标
- 存储容量, 存储器可以存储的二进制信息总量称为是存储容量
- 存储速度
1.3 存储器层次结构
按照我们之前存储方式设置的存储顺序进行排列
1.4 主存的基本结构
地址译码器接收到来自CPU的n位地址信号,通过译码器翻译为对应的地址,选择对应的单元,输出m组数据
1.5 主存中数据的存放
1. 存储字长和数据字长
存储字长指的是主存中一个存储单元所能存储的二进制位数
数据字长指的是计算机一次能处理的二进制的位数
2. 地址访问模式
按照访问的单元大小可以被分为是字节地址, 半字地址,字地址
字节地址逻辑右移可以得到半字地址, 右移两位可以得到字地址。
3. 大端和小端方式
大端存储:指的是存储器的低字节单元存放的是数据中的最高字节
小端存储:指的是存储的低字节单元存放的是数据中的最低字节
4. 数据的对齐
对于数据的存储方式可以选择直接存放进去,也可以选择进行对齐的存放。
二. 半导体存储器
存储单元是存储器中最小的存储单元。
2.1 静态MOS存储器
-
静态MOS存储单元
-
存储单元拓展
-
静态MOS存储器的结构
使用x, y两边进行译码,每一边都有 个
三 主存的组织和CPU的连接
1. 存储器和CPU的连接
2. 存储器的拓展
-
位拓展,就是从不同的存储器中输出不同的数据位,将所有的数据位组成一个整体的数据位!
-
字拓展,也被称为是容量拓展和地址总线拓展,将数据位数相同的几个RAM并联在一起,使用一个3-8译码器进行数据的选择。
四 并行主存系统
- 高位交叉方式下的数据组织,相邻地址的数据在同一个存储体中,不同存储体中的地址不相邻
- 低位交叉方式中的数据组织,相邻地址处于不同的存储体中,每个存储体均需要地址寄存器
五 高速缓冲存储器
1. cache 工作原理
SRAM相对于DRAM的储存速度更快,但是容量有限, 通常在cpu和主存之间加上一个小容量的快速SRAM,称为cache
2. 程序局部性
指的是程序在执行中呈现出的局部性规律。在一段时间内,只执行程序的一部分,如同我们的jupyter notebook
一样,所执行的指令和数据也只局限在某个区域中。
3. cache的基本概念
首先在cache中查找数据,如果查找不到数据,那么从主存中进行读取,加入到我们的cache中。将命中所需要的时间称为是, 将从主存中进行加载的时间设置为, 假设命中的次数为, 从主存中加载的次数为
总体的加载时间为
称为访问的效率
r的值一般为5-10,h 越大程序的访问效率越高
4. cache的读写
tag用来判断当前的数据是否在cache中,index表示在cache中的哪个位置
cache被分为四个部分
- tag 从主存中剥离出来
- data 表示从主存中交换的数据
- vaild表示数据是否有效
- dirty表示主存中
- 的数据是否是最新的n
例子:
某计算机的字长为32位,已知主存的容量为4MB,按字节编码,cache使用直接相联映射,cache数据体容量为4KB,cache块·长度为8个字。
一个cache块的长度为8*32 = 32B, 所以w = 5, 4x1024/32 = 32x4 = 128 ,所以一共有128行,r = 7, 访问4MB的空间需要22位地址线,所以此时tag =22 - 5 - 7 = 10
4.1 读操作
首先在cache中进行查找,如果查找不到则在主存中进行查找,将数据的副本读入到我们的cache中,在载入的过程中还需要进行数据的替换等操作。
4.2 写操作
1 | 写入 --> 不在cache中 --> 写入主存 -->分配cache --> 可能进行数据的替换 |
4.3 cache的关键技术
- 数据查找
- 地址映射
- 替换策略
- 写入策略
5 相联存储器
相联存储器被称为是RAM,实现的是key和value的映射
6. 地址映射
1.全相联映射
在全相联映射下,主存中的每一个数据块都可以被放入cache中的任意数据块中,主存地址被分为tag offset
两个部分,通过tag来查找是存储在cache中的哪一行,通过offset来查找是在哪个字节位。
2. 直接相联映射
每个固定的主存地址只能映射到cache中的某一行
行号 = (主存块号)%(cache行数)
3. 组相联映射
组相联映射将我们的cache分为固定大小的组,每个组中有k行,称为k-路组相联,
cache组号 = (主存区号)mod (cache组号)
7 替换算法
- 先进先出算法
- 最不经常使用算法
- 近期最少使用算法
- 随机替换算法
六 虚拟存储器
1 虚拟存储器的工作原理
避免将程序中的内存空间全部存入到主存中去,程序员使用提供的虚拟地址进行编程, 使得当主存中的空间用完之后计算机还能正常运作
2 虚拟存储器的地址映射与变换
虚拟存储器下面有三种空间
- 虚拟地址空间
- 主存的地址空间
- 辅存地址空间
虚拟页式存储器的功能就是将虚拟地址上的空间映射到主存中去
3. 页式虚拟存储器
3.1 虚拟地址的划分
页式虚拟存储器中,虚拟地址被分为虚拟页号(VPN)(virtual page number) 和虚拟页偏移 (VPO)(virtual page offset) ,虚拟页号又被称为是虚页号,物理页号被称为是实页号或者是页框号
3.2 页表
物理地址由PPN和PPO构成,虚拟地址到物理地址上的映射就是将VPN映射为PPN
例子
当主存的容量为16MB时,按字节寻址,虚拟存储器的容量为4GB,采用页式虚拟存储器,页面的大小为4KB
此时的页面偏移的位数为 2 + 10 = 12 ,16MB = 4 + 20 = 24 物理页号字段为 24 - 12 = 12
4GB = 2 + 30 = 32 虚拟页号为 32 - 12 = 20 ,页表项的数目是
假设此时有虚拟地址 00015420,那么分离出来的20 位虚拟页号字段 为 00015, 当其对应的有效位为1时,PPO直接等同于VPO
3.3 虚拟存储器访问流程
页面命中时
- 处理器生成一个虚拟地址,将其传送给MMU
- MMU利用页表基址寄存器PTBR和虚页号生成页表项地址PTEA,访问位于主存/cache中的地址,请求和虚拟页号对应的页表项PTE
- cache/主存返回页表项PTE,以构成访问信息的物理地址(PA)
- 若返回的PTE中的有效位为1,那么此时MMU利用返回的PTE构造物理地址,并利用构造出的物理地址PA访问cache或者是主存
- 返回请求的数据
页面未命中时,返回的PTE中的有效位为0
那么此时需要去得到一个虚拟的地址,然后从主存或者cache中重新加载数据,然后重复上面的2-5步,当主存页满的时候,需要按照替换算法进行替换
3.4 结合cache的虚拟存储器访问流程
将cache和主存分拆开,由于主存每次都会缓存主存中常用的数据,所以页表的数据也会作为常用的热数据调度到cache中
在不发生缺页的情况下,可以直接从cache中访问数据,很快,当页表缺失,数据也缺失的时候,则需要从速度很慢的磁盘中缓存数据
3.5 利用TLB加速虚拟存储器地址转化
TLB的位置离cpu更近,访问的速度更快。