🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
6 存储器层次结构
存储器系统(memory system)是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU 寄存器保存着最常用的数据。靠近 CPU 的小的、快速的高速缓存存储器(cache memory)作为一部分存储在相对慢速的主存储器(main memory)中的数据和指令的缓冲区域。主存暂时存放在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的区域的缓冲区域。
具有良好局部性的程序倾向于一次又一次地访问相同的数据项集合,或者是倾向于访问邻近的数据项集合。
多个具有不同容量、成本和访问时间的存储设备构成了存储器层次结构,称为存储器系统。
执行指令时访问数据所需的周期数:
- CPU寄存器:0个周期
- L1L3高速缓存:475个周期
- 主存:上百个周期
- 磁盘:几千万个周期
6.1 存储技术
几种基本的存储技术
- 随机访问存储器,分为两类:
-
- RAM,同时也是易失性存储器,也分为两类:
-
- SRAM:静态随机访问存储器,速度快,价格高。多用来作为高速缓存存储器。
- DRAM:动态随机访问存储器,速度慢,价格低。多用来作为主存和图形系统的帧缓冲器
- ROM,同时也是非易失性存储器。闪存属于 ROM,固态硬盘就是基于闪存开发而来。
- 机械硬盘
- 固态硬盘(SSD)
6.1.1 随机访问存储器
随机访问存储器 (Random-Access Memory, RAM)分为两类:静态的和动态的。SRAM 比 DRAM 更快,但也贵得多。SRAM 用来作为高速缓存存储器,既可以在 CPU 芯片上,也可以在片下。DRAM 用来作为主存以及图形系统的帧缓冲区。
1、SRAM
SRAM 将每个位存储在一个双稳态的存储器单元内。每个单元由六个晶体管组成。
双稳态即该电路无限期地稳定保持在两个不同的电压状态。
对于 SRAM,只要有电,就永远地保持它的值。即使有干扰,当干扰消除,电路也会恢复到稳定值。
2、DRAM
DRAM 将每个位存储为对一个电容的充电。每个 DRAM 单元由一个电容和一个访问晶体管组成。
DRAM 对干扰非常敏感。当电容的电压被扰乱后,就永远不会恢复了。
3、SRAM和DRAM的区别
只要有电源,SRAM是持续的。与DRAM不同,不需要刷新。SRAM的存取比DRAM快。SRAM对诸如光和电噪声之类的干扰不敏感。其代价是SRAM电池比DRAM电池使用更多的晶体管,因此密度更低,价格更贵,消耗更多电力。
4、传统的 DRAM
DRAM 芯片被分为 d 个超单元,每个超单元包含 w 个 DRAM 单元,w 一般为 8。当从 DRAM 中读取数据时,一次可以读取一个超单元的数据(可以近似的将超单元理解为一个字节)。
DRAM 中的超单元按行列组织,DRAM 中还包含一个行缓冲区。
内存控制器 依次将行地址和列地址发送给 DRAM,DRAM 将对应的超单元的内容发回给内存控制器以实现读取数据。
行地址和列地址共享相同的 DRAM 芯片地址引脚。
从 DRAM 中读取超单元的步骤:
- 内存控制器发来行地址 i,DRAM 将整个第 i 行复制到内部的行缓冲区。
- 内存控制器发来列地址 i,DRAM 从行缓冲区中复制出超单元 (i,j) 并发送给内存控制器。
5、内存模块
许多 DRAM 芯片封装在内存模块中,插到主板的扩展槽上。
常用的是双列直插内存模块 (DIMM),以 64 位为块与内存控制器交换数据。
比如一个内存模块包含 8 个 DRAM 芯片,每个 DRAM 包含 8M 个超单元,每个超单元存储一个字节(8bit)。使用 8 个 DRAM 芯片上相同地址处的超单元来表示一个 64 位字,DRAM 0 存储第一个字节,DRAM 1 存储第 2 个字节,依此类推。
要取出内存地址 A 处的一个字,内存控制器先将 A 转换为一个超单元地址 (i,j),然后内存模块将 i,j 广播到每个 DRAM。作为响应,每个 DRAM 输出它的 (i,j) 超单元的 8 位内容,合并成一个 64 位字,再返回给内存控制器。
主存由多个内存模块连接到内存控制器聚合成。
6、增强的 DRAM
有一些经过优化的 DRAM:
- 快页模式 DRAM (FPM DRAM):当连续访问位于同一行的超单元时,第二次以后,FPM DRAM 可以直接从行缓冲区获取数据。
- 扩展数据输出 DRAM (EDO DRAM):FPM DRAM 的一个增强的形式,更快一些。
- 同步 DRAM (SDRAM):常规的、FPM 和 EDO 都是异步的。从效果而言,SDRAM 可以比异步存储器更快地输出它的超单元的内容。
- 双倍数据速率同步 DRAM(DDR SDRAM):对 SDRAM 的一种增强,使速度翻倍。不同的 DDR SDRAM 以提高有效带宽的很小的预留缓冲区的大小来划分:DDR(2位)、DDR2(4位)、DDR3(8位)。位越多速度越快,近乎翻倍。
- 视频 RAM (VRAM):用在图形系统的帧缓冲区中,其思想与 FPM DRAM 类似。VRAM 允许对内存进行并行地读和写。因此系统可以在写下一次更新的新值时(写),用帧缓冲区的像素刷屏幕(读)。
现在计算机使用的大多数都是 DDR3 SDRAM。
7、非易失性存储器
DRAM 和 SRAM 会在断电后丢失信息,因此是易失性存储器。ROM 是非易失性存储器,在断电后仍保存着信息。
ROM 是只读存储器,但是实际上有些 ROM 既可以读也可以写。
几种常见的非易失性存储器:
- 可编程 ROM (PROM):只能被编程一次。
- 可擦写可编程 ROM (EPROM):可以被擦除和重编程上千次。
- 电子可擦除 PROM (EEPROM):类似于 EPROM,但是可以被重编程十万次。
- 闪存:基于 EEPROM 的一种存储技术。闪存无处不在,固态硬盘就是一种基于闪存的磁盘驱动器。
存储在 ROM 设备中的程序通常称为固件,当计算机系统通电后,会运行存储在 ROM 中的固件。
8、访问主存
数据流通过总线在处理器与主存间来往,每次处理器和主存间的数据传送的一系列步骤称为总线事务。
总线是一组并行的导线,能携带地址、数据和控制信号。
系统总线连接 CPU 和 IO 桥接器,内存总线连接 IO 桥接器和主存。IO 桥同时也连接着 I/O 总线。
读事务的三个步骤:
- CPU 将地址 A 放到内存总线上。
- 主存从总线读出 A,取出字 x,然后将 x 放到总线上。
- CPU 从总线读出字 x,并将它复制到相应寄存器中。
写事务的三个步骤:
- CPU 将地址 A 放到内存总线。主存读出这个地址,并等待数据字。
- CPU 将数据字 y 放到总线上。
- 主存从总线读数据字 y,并将它存储在地址 A。
6.1.2 磁盘存储
1、磁盘构造