Skip to content

Latest commit

 

History

History
40 lines (23 loc) · 4.35 KB

2.memory-hierarchy.md

File metadata and controls

40 lines (23 loc) · 4.35 KB

2.1 存储器的层次结构

存储器层次

存储器层次

如上图所示是一个比较经典的存储层次的组织图,该图是按照存储的容量或速度的大小进行规划。图的最下面是高速缓存,高速缓存大家应该都不陌生,例如我们在买电脑时,经常听到的 CPU 多级缓存技术,指的就是高速缓存,高速缓存的特点是速度快,可以达到 ns 级别,但容量小,一般只有几 MB 的大小。

高速缓存往上是主存储器,一般称为主存或内存,大家可能都碰到过 Linux 系统的 OOM 问题,其实就是内存不足所引发的一个异常。普通家用电脑的内存一般是 4G 或 8G,生产环境的机器一般能达到几百 G 的内存大小。

高速缓存和主存有个共同的特点——易失性,简单来说就是掉电会丢失数据,掉电不丢失的内存有 ROM、 EEPROM、闪存等,相比来说,RAM 的速度更快。

再往上,这一层也叫辅助存储层,主要是指磁盘,虚拟存储器和文件系统都是建立在磁盘之上的组织结构。

再接着往上是第三级存储器,例如 DVD 光盘,磁带机等,其目的都是为了扩展整体的存储空间,并在不同的场景下使用。

存储器特点

这里介绍几种主要存储方式的一些特点,例如高速缓存的容量小,但速度快;主存的访问性能和高速缓存相比虽然差点,但是容量较高,能达到 G 级别;磁盘的存储虽然很大,但是访问磁盘的 IO 耗时严重,一般和主存的访问速度差几个数量级。目前 SSD 磁盘的性能相比于传统的机械盘要快的多,有兴趣可以去了解 SSD 和机械盘的差异。

存储方式的具体差异请参考下表:

存储器 容量 特点
高速缓存存储器 1-6 MB
  • 高速缓存和处理器间速度为 < 10 纳秒
  • 高速缓存和主存储器间速度为 10-100 纳秒
主存储器(内存) 10GB 以上 随机访问,访问时间 10-100 纳秒
辅助存储器(磁盘/固态硬盘) 1TB-10TB 数据传输:一次 < 10ms
第三级存储(磁带/DVD 光盘) PT 级别 成本低、速度慢(s/min)

虚拟存储器

介绍虚拟存储器之前,我们先简单介绍一下虚拟地址空间,可能大家对于进程空间、虚拟地址空间、物理地址空间、地址映射等概念都比较熟悉。进程在启动时,操作系统会为进程分配虚拟地址空间,例如 32 位系统的虚拟地址空间最大为 4G,假设进程不止一个,如 2 个进程,那操作系统不可能为每个进程都分配 4G 实际的物理内存空间,毕竟内存总大小就 4G。

这种情况下,操作系统使用了虚拟地址空间来解决内存分配问题,并通过虚拟地址空间和物理地址建立映射关系来操作实际的物理内存。虚拟地址和物理地址之间是通过 MMU 的结构来管理复杂的映射关系。通俗来说,两个进程通过 MMU 按需共享一个物理内存,MMU 的功能其实是把 CPU 发出的虚拟地址转换为物理地址。

虚拟存储器

如上图所示,假设 CPU 发起对虚拟地址的访问,页表中所有需要访问的页号都能从物理内存中找到自己的映射,这是个比较理想的过程。但现实中,可能会遇到缺页错误,例如图中标黄的 page3 和 page5 就没有缓存到物理内存中,这时操作系统会从磁盘缓存一块空间到物理内存,来填补缺页的错误,维护映射关系。

因此这种使用虚拟地址来分配和管理物理内存,并且通过交换内存和磁盘的数据,来实现空间扩容的方式,叫做虚拟存储器。可以把虚拟存储器的实现理解成一种解决问题的思路,或一种按需分配的办法,例如数据库中的各种缓存技术,就是最大化的结合内存和磁盘能力的体现。