存储器
大家好呀!我是小笙,由于存储器这部分章节内容较多,我分成二部分进行总结,以下是第一部分,希望内容对你有所帮助!
概述
存储器是计算机系统中的记忆设备,用来存放程序和数据
存储器分类
存储器分类主要按照存储介质、存储方式以及计算机中的作用来进行分类
存储器的层次结构
从速度、容量以及价格三个性能指标来分析存储器
主存储器
概述
主存储器简称主存,是计算机硬件的一个重要部件。它的主要作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取
主存储器的组成
MAR 寻址操作
根据 MAR 中的地址访问某个存储单元时,还需经过地址译码、驱动等电路,才能找到所需访问的单元
MDR 数据读入写出操作
- 读出时,需经过读出放大器,才能将被选中单元的存储字送到 MDR
- 写入时,MDR 中的数据也必须经过写入电路才能真正写入到被选中的单元中
主存和cpu之间的联系
主存中存储单元地址的分配
主存储器被划分为许多存储单元,每个存储单元都有一个唯一的地址
主存中存储单元地址的分配还涉及到字节顺序的问题,即大端模式和小端模式;现在假设用每个存储字32位来存储 12345678H 数据
大端大尾方式:高位字节地址为字地址
字地址 | 字节地址(8位) | 字节地址 | 字节地址 | 字节地址 |
---|---|---|---|---|
0 | 12 | 34 | 56 | 78 |
4 | ||||
8 |
小端小尾方式:低位字节地址为字地址
字地址 | 字节地址 | 字节地址 | 字节地址 | 字节地址 |
---|---|---|---|---|
0 | 78 | 56 | 34 | 12 |
4 | ||||
8 |
主存中的技术指标
主存的主要技术指标是存储容量和存储速度
半导体存储芯片
基本结构
译码驱动能把地址总线送来的地址信号翻译成对应存储单元的选择信号,该信号在读/写电路的配合下完成对被选中单元的读/写操作
地址线是单向输入的,数据线是双向的,他们的位数与芯片容量有关
地址线(单向) | 数据线(双向) | 芯片容量 |
---|---|---|
10 | 4 | 2^10 * 4位 |
14 | 1 | 2^14 * 1位 |
13 | 8 | 2^13 * 8位 |
译码驱动方式
译码驱动方式有两种:线选法和重合法
线选法
线选法是一种直接寻址方式,其中每个存储单元由一个独特的地址线组合直接选中。在这种方法中,每个存储单元或者其对应的存储位都有一个专用的选择线
重合法
重合法是一种寻址技术,它通过减少地址线的数量来实现更高效的存储器寻址。在这种方法中,地址线被复用,即同一组地址线在不同的时间阶段用于传递不同的地址信息
在实际的存储器设计中,通常会根据存储器的容量、性能要求、成本和功耗等因素来选择合适的寻址方法。重合法在较高密度的存储器设计中更为常见,因为它可以更有效地利用地址线资源。而线选法则在一些对速度要求较高或者存储容量较小的应用中更为合适
随机存取存储器(RAM)
静态RAM(SRAM)
存储器中用于寄存“0”和“1”代码的电路称为存储器的基本单元电路
静态RAM基本电路
- 存储器:T1-T4 ;行开关:T5 - T6 ; 列开关:T7 - T8 (T5 - T8 都属于晶体管)
- 位线 A 为触发器原端、位线 A`为触发器非端(A 取反)
读写操作
- 读操作:置行地址、列地址有效,触发器 A 电平会通过 T6、T8 最后通过读出放大器进行读出
- 写操作:置行地址、列地址有效,电平会从 Din 写入,会先取反,然后通过 T5 - T8,将数据保存到触发器中
动态RAM(DRAM)
动态RAM 基本单元电路
概述:靠电容存储电荷的原理来寄存信息。若电容上存在足够多的电荷表示存“1”,电容上无电荷表示存“0”
-
三管 MOS
- 读出时,先对预充电管T4置一预充电信号,使读数据线达到高电平VDD。然后由读选择线打开T2,若T1的极间电容Cg存有足够电荷(被认为原存“1”),使T1导通,则因T2、T1接地,使读数据线降为零电平,读出“0”信息;若Cg没有足够电荷(原存“0”),则T1截止,读数据线为高电平不变,读出“1”信息。可见,读出线的高低电平可以区分“1”和“0”,且读出与原存信息相反
- 写入时,将写信号加到写数据线上,然后由写数据线打开T3,这样,Cg便能随输入信息充电(写“1”)或放电(写“2”),且写入与输入信息相同
-
单管 MOS
- 读出时,字线上的高电平使T接通,若Cs有电荷,视为“1”;若Cs无电荷,视为“0”。(读出结束时,Cs中电荷释放完毕,所以为破坏性读出,必须再生)
- 写入时,字线上的高电平使T接通,若数据线为高电平,经过T对Cs充电,使其存“1”;若数据线为低电平,Cs经T放电,使其存“0”
动态RAM刷新(刷新与行地址有关)
刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写人的再生过程;再生周期就是在一定的时间内,对动态 RAM 的全部基本单元电路作一次刷新操作
-
集中式刷新(存取周期为 0.5 微秒,刷新周期为 2 毫秒)
以128 × 128为例:
死区:0.5μs×128=64μs0.5μs×128 = 64μs (死区就是不能进行读写操作的时间)
死时间率:为= 128/4000×100 = 3.2%
-
分散刷新(存取周期为 1 微秒,刷新周期为 2 毫秒)
以128 × 128为例:
优点:没有死区
-
异步刷新(分散刷新与集中刷新相结合)
以128 × 128为例(若每隔约15.6μs刷新一行):
每行每隔 2ms 刷新一次 ;死区为 0.5μs
优点:将刷新安排在指令译码阶段,不会出现“死区”问题
静态RAM VS 动态RAM
DRAM(动态RAM)常用于做主存;SRAM(静态RAM)常用于做缓存
DRAM | SRAM | |
---|---|---|
存储原理 | 电容 | 触发器 |
集成度 | 高 | 低 |
芯片引脚 | 少 | 多 |
功耗 | 小 | 大 |
价格 | 低 | 高 |
速度 | 慢 | 快 |
刷新 | 有 | 无 |
只读存储器(ROM)
初衷是一旦注入原始信息就不能再改变了,但是随着市场的需要,希望能改变原来的数据,便出现了后续可以修改数据的只读存储器
发展历程
- 早期的只读存储器——由厂家写内容 MROM
- 改进1——用户可以自己写(一次性) PROM
- 改进2——可以多次写(要能对信息进行擦除) EPROM
- 改进3——电可擦写(特定设备)
- 改进4——电可擦写(直接连接到计算机)
掩模ROM(MROM)
一种只读存储器,它在制造过程中被编程,并且一旦编程完毕,其内容就无法再次修改
实现原理:通过行地址以及列地址来确定输出哪个位置的数据,然后通过是否存在 MOS 管来决定输出的数据是 0 还是 1,最后通过放大器输出
- 行列选择交叉处有MOS管为 “1”
- 行列选择交叉处无MOS管为 “0”
PROM(一次性编程)
PROM是可以实现一次性编程的只读存储器
实现原理:通过熔丝是否熔断来进行判断 0 还是 1,但是熔断之后无法再恢复,所以只能让用户实现一次编程
- 熔丝断:“0”
- 熔丝未断:“1”
EPROM(多次性编程)
EPROM是一种可擦除可编程只读存储器
N型沟道浮动栅MOS电路(利用紫外线进行擦除)
- D端加正电压 —— 形成浮动栅 —— S与D不导通为 “0”
- D端不加正电压 —— 不形成浮动栅 —— S与D导通为 “1”
注意:如果需要重置数据,可用紫外线照射的方式驱散浮动栅
EEPROM(多次性编程)
一种可以在电子设备中使用多次的存储器芯片。它允许数据被多次编程和擦除,而不需要从电路板上移除芯片
- 多次编程:EEPROM可以被重新编程多次,这使得它非常适合存储需要定期更新的数据,如配置设置或设备固件
- 非易失性:EEPROM在断电后仍能保留数据,这是因为它使用浮栅晶体管技术来存储电荷,从而保持数据状态
- 擦除和编程速度:EEPROM的擦除和编程速度相对较慢,通常比EPROM慢,但比Flash存储器快
- 有限的生命周期:尽管EEPROM可以多次编程和擦除,但它有一个有限的擦除/编程周期。通常,一个EEPROM芯片可以承受数十万到数百万次的编程
Flash Memory(闪速型存储器)
一种非易失性存储技术,它可以在电力供应的情况下快速擦除和编程
EPROM、EEPROM 、Flash Memory 三者区别
- EPROM —— 价格便宜,集成度高,可编程只读存储器,需要紫外线照射来擦除,不支持多次编程
- EEPROM —— 电可擦洗重写,允许数据被多次编程和擦除
- Flash Memory —— 支持更快速的擦除和编程操作,通常用于更大的存储容量,如USB驱动器和固态硬盘
存储器与CPU的连接
存储器容量的扩展
-
位扩展
用 **2片 **1K × 4位存储芯片组成1K × 8位的存储器
地址线 A0 - A9 ;数据线拼接成 D0 - D7
-
字扩展
用 **2片 **1K × 8位存储芯片组成2K × 8位的存储器
A10 决定是存储在哪个存储芯片里
-
字、位扩展
用 8片 1K × 4位存储芯片组成4K × 8位的存储器
存储器与CPU的连接
- 地址线的连接:通常总是将CPU地址线的低位与存储芯片的地址线相连。CPU地址线的高位或在存储芯片扩充时用或做其他用途
- 数据线的连接:存在线数量不同的情况,此时必须对存储芯片扩位,使其数据位数和 CPU 的数据线数相同
- 读/写命令线的连接:一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写
- 片选线的连接
- 合理选择存储芯片:主要是指存储芯片类型(RAM或ROM)和数量的选择。通常选用ROM存放系统程序、标准子程序等等;RAM则是为用户编程而设置的
- 其他(时序、负载等)
存储器的校验
在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错。为了能及时发现错误并及时纠正错误,通常可将原数据配成汉明编码。
合法代码集合
任意两组合法代码之间二进制位数的最小差异编码的纠错、检错能力与编码的最小距离有关
L - 1 = D + C (D >= C)
- L:编码的最小距离
- D:检错的位数
- C:纠错的位数
具体编码实例 - 海明码
码距:又叫海明距离,是在信息编码中,两个编码之间对应位上编码不同的位数。例如编码100110和010101,第1、2、5、6位都不相同,所以这两个编码的码距就是4,并且可以通过异或的方式求出(异或后计算零的个数)
两个合法编码(码字)
工作流程
-
确定校验码位数 r
- 数据/信息位数为 m
- 校验码位数为 r
- 2 ^ r >= m + r + 1 (已知 m + r 的和,可以通过整个公式分别求出 m、r)
-
确定校验码和数据的位置
假设需要校验数据为 1100,意味着 m = 4,可以通过公式求得,r 的最小值为 3
-
求出校验码的值
根据偶校验可以得出如下(分三组,分别是:xx1、x1x、1xx)
7 6 5 4 3 2 1 1 1 0 x4 0 x2 x1 0 0 1 海明码就是 1100001
-
检错并纠错
假设最后传入的参数为 1100000
计算该海明码的三组校验是否正确
x1 0 0 0 1
x2 0 0 1 1 => 可知 x1 校验错误 0 0 1 说明最小位出错了,但是恰好是校验码出错,可以不用纠错
x4 0 0 1 1
提高访存速度的措施
不仅可以采用高速器件、层次结构 Cache - 主存,还可以调整主存结构的方式来提高访存的速度,如下就是调整主存结构的方式
-
单体多字系统
前提:程序和数据在存储体内是连续存放的,这样就可以在一个存取周期内从同一地址中取出4条指令,然后逐条送至 CPU 中执行
存在的问题:
- 若只需向存储体写入16位数据(单字长),而数据寄存器却多读出了48位,若想让这48位不存入存储体,会增加寄存器的复杂性
- 若需要取出的数据(或指令)不是连续的,必然会使数据寄存器取出无用的数据
-
多体并行系统(顺序编址)
采用多体模块组成的存储器,主要应用于存储器容量的扩展(高位地址可表示体号,低位地址为体内地址)
存在的问题:
- 某个存储体可能会非常繁忙,其余存储体空闲
- 这种方式主要适用于存储器容量的扩展,并不适合提高存储器的带宽
-
低位交叉(各个体轮流编址)
主要应用于存储器的带宽和访问速度的提高(低位地址可表示体号,高位地址为体内地址)
低位交叉的特点:
- 在不改变存储周期的前提下,增加存储器的带宽
注意对体号和体内地址的理解
- 物理地址:物理地址也称为"体号",是指在计算机系统中实际存在的存储器单元的地址。物理地址是硬件直接访问主存储器的地址,它对应于存储器芯片或者其他存储介质上的真实地址
- 虚拟地址:虚拟地址也称为"体内地址",是指程序中使用的地址,它由程序生成并由操作系统进行地址转换。虚拟地址空间是程序员能够访问的抽象地址空间,程序中的变量和数据都是相对于虚拟地址空间来说的
-
高性能存储芯片(了解)
- SDRAM
- RDRAM
- 带 Cache 的 DRAM