存储器保存内容:程序和数据
局部性原理
- 时间局部性:现在被访问的信息在不久的将来还将再次被访问,程序结构体现:循环结构
- 空间局部性:现访问信息,下一次访问其附近的信息,程序结构体现:顺序结构
缓存-主存层次起加速作用
主存-辅存层次起扩容作用
计算机存储系统采用分级方式主要是为了解决容量、速度、价格三者的矛盾
MAR:存储器地址寄存器
MDR:存储器数据寄存器
对于24位地址线的主存而言
- 若字长为32位:
- ①按字节寻址的范围为16M。【 2 24 2^{24} 224B / 1B=16M】
- ②按字寻址的范围为4M。【 2 24 2^{24} 224B / 4B = 4M】
- 若字长为16位:
- ①按字节寻址的范围为16M。【 2 24 2^{24} 224B / 1B=16M】
- ②按字寻址的范围为8M。【 2 24 2^{24} 224B / 2B = 8M】
- 1MB = 2 20 2^{20} 220B
- 下边有详解~
1字节 = 1B
= 8b = 8位1字 = 4B
= 32b = 32位1Byte=8bit
主存存放二进制代码的总位数
存储容量 = 存储单元个数 × 存储字长(每个存储单元的位数)
存储容量 = 存储单元个数 × 存储字长/8
存取周期 = 存取时间 +恢复时间
,所以存取时间 < 存取周期带宽 = 时钟频率 × 总线宽度
带宽 = 存储字长/存储时间
在题目中体悟方法,直接上题目——
- 一个16K×32位的存储器,其地址线和数据线的总和是多少❓
- 选用如下规格(A.1K×4位芯片 B.4K×8位芯片)的存储器芯片时,需要多少片❓
已知存储器的容量为1MB,那地址线和数据线一共多少根❓
比较 | 动态RAM(DRAM) | 静态RAM(SRAM) |
---|---|---|
存储原理 | 电容 | 触发器 |
集成度 | 高 | 低 |
芯片引脚 | 少 | 多 |
功耗 | 小 | 大 |
价格 | 低 | 高 |
速度 | 慢 | 快 |
刷新 | 有 | 无 |
因为动态存储器依靠电容上的存储电荷存储信息,集成度最高,但信息易失,所以需要定时刷新内容
动态RAM时序——行列地址分开传送
刷新与行地址有关。刷新是一行行进行的,必须在刷新周期内,由专用的刷新电路来完成对基本单元电路的逐行刷新,才能保证DRAM内的信息不丢失。
- 集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。
- 速度高,但死时间长,关注死区和死时间率
- 分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。其中,把机器的存取周期 t C t_C tC分成两段,前半段 t M t_M tM用来读/写或维持信息,后半段 t R t_R tR用来刷新。
- 即在每个存取操作后绑定一个刷新操作,延长了存取周期,这样存取周期就成了0.5μs + 0.5μs =1μs,也就不需要专门给出一段时间来刷新了
- 这样,每有128个读取操作,就会把0-127行全部刷新一遍。故每隔128μs 就可将存储芯片全部刷新一遍,即刷新周期是1μs×128=128μs,远短于2ms。
- 不存在停止读/写的死时间,但是存取周期长了,整个系统速度降低了。
- 分散刷新与集中刷新相结合,既可以缩短“死时间”,又充分利用最大刷新间隔为2ms的特点
- 具体操作为:在2ms内对128行各刷新一遍,即每隔15.6μs刷新一行(2000μs/128≈15.6μs),而每行刷新的时间仍为0.5μs。
- 这样,刷新一行只能停止一个存取周期,对每行来说,刷新间隔时间仍为2ms,而死时间为0.5μs。相对每一段来说,是集中式刷新,相对整体来说,是分散式刷新
- 如果将DRAM的刷新安排在CPU对指令的译码阶段,由于这个阶段CPU不访问存储器,所以不会出现“死区”问题,从根本上上提高了整机的工作效率。
存储容量 = 存储单元个数 × 存储字长
- 存储单元个数扩展——>字扩展
- 存储字长扩展——>位扩展
位扩展就是将两个存储芯片当成一个存储芯片来用,让两个存储芯片同时工作,同时被选中,同时做读/写操作。要想保证同时,就是把两个芯片的片选CS,用相同的信号连接
2片1K X 4位的芯片,可以组成1K X 8位的存储器(4位→8位)
2片1K X 8位的芯片,可以组成2K X 8位的存储器(1K→2K)
1K X 4位的芯片,组成4K X 8位的存储器(1K→4K,4位→8位)
上边这张图是理论上的方法,但我个人觉得没啥用 ,这里贴一个讲的很好的小破站视频,用一道例题把细致的点几乎都讲到了,点此直达,看完视频后建议再过一下以下两道例题,应该就能懂啦~
系统程序区——>ROM
,用户地址区——>RAM
字扩展和位扩展都可选时,首选位扩展(位扩展优于字扩展优于字位扩展)
G 1 G_1 G1高电平, G ‾ 2 A \overline{G}_{2A} G2A, G ‾ 2 B \overline{G}_{2B} G2B低电平, Y ‾ 0 到 Y ‾ 7 \overline{Y}_0到\overline{Y}_7 Y0到Y7都是低电平,低电平要画小圈圈
G 1 G_1 G1若有空余,外接5V
M R E Q ‾ \overline{MREQ} MREQ把它看作是0,如果最后 G 1 G_1 G1只能和它连,但是 G 1 G_1 G1按道理要连1,那就在它俩之间加一个非门
RAM连接 W R ‾ \overline{WR} WR,ROM只读外接 P D ‾ / P r o g r \overline{PD}/Progr PD/Progr
- 同一编码中,任意两个合法编码之间相应位不同的数目称为码距
- 计算方法:对两个位串进行异或运算,并计算异或运算结果中1的个数
110⊕011=101
——>110和011之间码距等于2- 码距越大,抗干扰能力越强,纠错能力越强,编码效率低
海明校验:在位序是2的整数次幂的位置放置检验位,其他位置放有效信息
- m个数据 + k个校验位 = m+k个码字
- m+k+1≤ 2 k 2^k 2k
上边提到的系统了解就好,主要知道求【顺序存储】和【交叉存储】的带宽的方法
映射类型 | 映射特点 |
---|---|
直接映射 | 某一主存块只能固定映射到某一缓存块(不灵活) |
全相联映射 | 某一主存块能映射到任一缓存块(成本高) |
组相联映射 | 某一主存块只能映射到某一缓存组中的任一块 |
参考博客
按字寻址和按字节寻址
DRAM的三种刷新方式的刷新周期问题
字扩展、位扩展、字位扩展