现代计算机存储系统结构
存储墙
可以看出1985~2003年,cpu的频率在一直翻倍(摩尔定律) 。但是到了04年发现Pentium 4E,增加频率导致散热相当困难,而是开启了做了多核CPU,甚至频率进行了降低,例如Core 2 Core i7。
8086是第一个微处理器,它出现在1978,386是可以能够将很多有意思的应用到个人电脑,因为它扩展到32位,是个通用的CPU。
后来的Pentium 4E发现是一个奇怪的型号,当然有个很好的点,可以在64位上运行32位代码,毕竟大量软件从32位转为64位是比较漫长的。但是在04年单核CPU运行速度一直在上升,但是多个应用CPU的厂商反馈了芯片功耗问题(CPU百瓦),散热相当困难,所以达到了百瓦瓶颈。所以他们没有增加频率,而是做了多核CPU
,例如Core 2 Core i7。
发现SRAM可以紧跟CPU,但是在CPU,DRAM,DISK存在很大的差距,并且随着时间的推移,这将越来越糟糕
但是程序需要数据和代码,我们的数据和代码都存储在内存和磁盘中,CPU越来越快,访存速度却保持不变,甚至变慢,那么整个计算机系统不会变快。
而弥补这个差距就是靠局部性
时间局部性:某个数据项在被访问之后可能很快的会被再次访问
空间局部性:某个数据项在被访问之后,与其地址相近的数据项可能很快被访问
大部分程序都包含循环结构,这部分指令和数据将被重复访问,很好体现了时间局部性
指令通常是顺序执行的,因此程序也呈现了很高的空间局部性
数据也同样呈现了很高的空间局部性,例如数组
一般的主存设计
运作流程
CPU执行某条指令。他的ALU部件需要这条指令的内容,发送这条指令的虚拟地址,cpu的mmu会查询TLB的映射表是否存在对应的物理位置,如果有就可以生成物理地址,如果没有就会去内存页表(页表中没有需要去外存中找调入),如果找到了,就得到了物理地址,然后再cache中查找有没有这条指令内容,没有就去内存中找,然后内容通过总线传送给CPU,CPU拿到就可以执行了
下面给出王道书上的一种流程图
其中知道什么是操作系统完成的和硬件完成的,比如
Cache缺失:硬件,为了快
TLB缺失:是软件或硬件,OS有专门的TLB缺失异常程序
页面缺失:软件,OS的缺页异常处理程序
地址转换(cache+页式虚存)408真题
存储器的速度提升
存储墙是现在影响计算机性能之一,说的就是存储器太慢而CPU太快
采用更高速的器件
DRAM的发展
1. SDRAM
同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)是有一个同步接口的动态随机存取内存(DRAM),通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化,CPU无需等待。而SDRAM有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。
SDRAM在计算机中被广泛使用,从起初的SDRAM到之后一代的DDR(或称DDR1),然后是DDR2和DDR3进入大众市场,2015年开始DDR4进入消费市场。
2. RDRAM
3. 带Cache的DRAM
调整主存结构
1. 单体多字系统
2. 多体并行系统
存储器读取一个字需要一个周期(即存储周期),总线再将此字传输出去需要一个周期(总线周期)
- 高位交叉编址:高位是体号,低位是体内地址,这种编址依旧是在单个存储体间连续,程序连续存储在同一个存储体内,无法并行
- 低位交叉系统:低位是体号,高位是体内地址,程序存储在不同的存储体内,无法并行
-
题
-
假定一个存储器系统支持四体交叉存取,某程序执行过程中,CPU访问的主存地址序列为3,9,17,2,51,37,13,4,8,41,67,10,则哪些地址访问会发生体冲突?
注意:因为前提是四体,所以T肯定满足T=4t,所以只要找到从自身开始四位出现与自己相同的就冲突了
3 | 9 | 17 | 2 | 51 | 37 | 13 | 4 | 8 | 41 | 67 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
3 | 1 | 1 | 2 | 3 | 1 | 1 | 0 | 0 | 1 | 3 | 2 |
9和17 17和37 13和37 13和41 4和8