计算机组成原理:存储器层次结构全景

如果你自己组装过PC机,你肯定知道,想要CPU,我们只要买一个就好了,但是存储器,却有不同的设备要买。

  • 比如,要买内存、硬盘。
  • 买硬盘的时候,可能会买一块SSD作为系统盘,一块大容量的HDD机械硬件作为数据盘。
  • 内存和硬件都是我们的存储设备
  • 而且,像硬盘这样的持久化存储设备,同时也是一个IO设备

在计算机系统中,我们通常把数据存储在计算机里面的存储器中。而存储器系统是一个通过各种不同的方法和设备,一层一层的组合起来的系统。

存储器的层次结构

  • 由于CPU执行时间比CPU读取指令的时间快得多,而且各个部件之间的读取速度不一样,所以CPU的存储器系统采用了一种分层次的结构。

    • 最上层是寄存器

      • 我们常常把 CPU 比喻成计算机的“大脑”。我们思考的东西,就好比 CPU 中的寄存器**(Register)**。
      • 寄存器与其说是存储器,其实它更像是 CPU 本身的一部分。寄存器其实是CPU内部的元件,用和CPU一样的材料制成,和CPU一样快
      • 寄存器是CPU运算时取指令和数据的地方,速度很快,寄存器可以用来暂存指令、数据和地址
      • 在CPU中,通常有通用寄存器,如指令寄存器IR;特殊功能寄存器,如程序计数器PC、sp等。
    • 然后是高速缓存(Cache)

      • CPU Cache(CPU 高速缓存,我们常常简称为“缓存”)。它是用来暂时存放内存中的数据(相当于大脑中的记忆
      • 高速缓存是内存的部分拷贝,如果寄存器要取内存中的一部分数据时,可直接从缓存中取到,这样可以调高速度。
      • CPU Cache 用的是一种叫作SRAM(Static Random-Access Memory,静态随机存取存储器)的芯片。
    • 在下面是主存

      • 主存一般就是RAM,是内存系统的主力军,就是我们说的内存
      • 内存负责存储CPU中运行的程序和数据
      • 断电内存数据会丢失。
    • 最下层是磁盘

  • 顶层的存储器速度最高,但是容量最小,成本非常高,层级结构越往下,其访问效率越慢,容量越大,造价越便宜。

内存

内存的内部是由各种IC电路组成的,它的种类很庞大,但是其主要分为三种存储器:

  • 读写存储器(RAM):它与ROM的最大区别是数据的易失性,即当机器关闭时,内存中的信息会 丢失。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。又可以分为:
    • 高速缓存(SRAM):用来制作CPU Cache
    • 随机存储器(DRAM):用来制作内存
  • 只读存储器(ROM):
    • ROM 一般只能用于数据的读取,不能写入数据,但是当机器停电时,这些数据不会丢失。
    • 只读存储器的特点是只能读出而不能写入信息,通常在电脑主板的ROM里面固化一个基本输入/输出系统,称为BIOS(基本输入输出系统)。其主要作用是完成对系统的加电自检、系统中各功能模块的初始化、系统的基本输入/输出的驱动程序及引导操作系统。

高速缓存(cache)

是什么

  • 缓存是CPU和内存之间的临时数据交换器,是为了解决CPU运行处理速度和内存读写速度不匹配而设计的

  • Cache位于内存和 CPU 之间,是一个读写速度比内存更快

    • 当 CPU 向内存写入数据时,这些数据也会被写入高速缓存中。
    • 当 CPU 需要读取数据时,会直接从高速缓存中直接读取,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。
  • Cache分为一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache)

    • 每个CPU核心都有一块属于自己的L1高速缓存:
      • 通常分为两部分:
        • 一个用于存数据,也就是L1d Cache(Data Cache,指令缓存
        • 另一个用于存指令,L1i Cache(Instruction Cache,数据缓存)。
      • L1 Cache往往就嵌在CPU核心的内部
      • L1缓存相对比较小,每部分差不多只有几十KB。
    • L2 Cache同样是每个CPU核心都有的,不过它往往不在CPU核心的内部。所以L2 Cache的访问速度会比L1稍微慢一点。
      • L2一般是一个统一的缓存,不把数据和指令分开。
      • L2缓存更大一些,有几百KB,速度要慢一些。
      • L1 Cache和L2 Cache最大的不同在于是否存在延迟。访问L1 Cache没有延迟,L2 Cache会延迟1-2个时钟周期。
    • L3 Cache,通常是多个CPU核心共用的,尺寸会更大一些,访问速度自然也更慢一些
      • 在同一处理器上,所有核共享一个L3缓存。
  • 你可以把CPU中的L1 Cache理解为我们的短期记忆,L2/L3为长期记忆,把内存当初我们拥有的书架或者书桌。当我们的记忆中没有资料的时候,可以从书桌或书架上拿书来翻阅。这个过程就相当于,数据从内存中加载到CPU的寄存器和Cache,然后通过“大脑”,也就是CPU,进行处理和运算。

在这里插入图片描述

为什么要采用多级缓存,并逐级增加缓存的大小呢?

  • 为了提高各级缓存的命中率,从而最大限度的降低直接访问内存的概率。
  • 每一级缓存的命中率都很重要,尤其是L1的命中率。这是因为缓存的命中率对总体的访问时间延迟影响很大,而且下一级缓存的访问延迟往往是上一级延迟的很多倍。

由什么材料制作

CPU Cache 用的是一种叫作SRAM(Static Random-Access Memory,静态随机存取存储器)的芯片。

  • 高速缓存(SRAM):
    • SRAM 之所以被称为“静态”存储器,是因为只要处在通电状态,里面的数据就可以保持存在。而一旦断电,里面的数据就会丢失了。
    • 在 SRAM 里面,一个比特的数据,需要 6~8个晶体管。所以 SRAM 的存储密度不高。
    • 同样的物理空间下,能够存储的数据有限。
    • 不过,因为 SRAM 的电路简单,所以访问速度非常快
  • SRAM 速度非常快,但是也很贵,所以只在很苛刻的地方使用,比如CPU cache

主存(RAM)

是什么

  • 也叫主存。它就是我们常说的内存
  • 内存是计算机中最重要的部件之一,它是程序和CPU进行沟通的桥梁。
    • 它是与CPU直接交换数据的内部存储器, 计算机中的所有运行的运行都是在内存中进行的
    • 它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。
      • 它可以存放CPU中的运算数据,以及与硬盘等外部存储设备交换的数据
      • 只要计算机在运行中,CPU 就会把需要运算的数据调到主存中进行运算,当运算完成后CPU再将结果传送出来,主存的运行也决定了计算机的稳定运行。

由什么材料制作

  • 内存用的芯片和 Cache 有所不同,它用的是一种叫作DRAM(Dynamic Random Access Memory,动态随机存取存储器)的芯片,比起 SRAM 来说,它的密度更高,有更大的容量,而且它也比 SRAM 芯片便宜不少。
    • DRAM 被称为“动态”存储器,是因为DRAM需要靠不断的“刷新”,才能保持数据被存储起来。
    • DRAM的一个比特,只需要一个晶体管和一个电容就能存储。
    • 所以,DRAM在同样的物理空间下,能够存储的数据也就更多,也就是存储的“密度”更大。
    • 但是,因为数据时存储在电容中的,电容会不断漏电,所以需要定时刷新充电,才能保持数据不丢失。
    • DRAM的数据访问电路和刷新电路都比SRAM要复杂,所以访问时延也就更长。
    • DRAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息

在这里插入图片描述

严格的说,

  • 内存包括主存(内存条,基于DRAM)与高速缓存(Cache,基于SRAM)两部分。
  • 可能是由于Cache相较内存条容量很小,毕竟内存容量只计内存条大小,加上重要性也不及内存条,一般人或许不知道Cache,所以就忽略了高速缓存Cache,直接将主存–内存条等同了内存吧

存储(HHD、SDD)

我们常说的存储有HDD(机械硬盘)、SSD(固态硬盘)

  • 狭义的存储往往是硬件,比如磁盘、磁带还有固态硬盘。而广义上的存储系统还包括基于物理的存储系统,比如SAN(Storage Area Network,存储区域网络)和NAS存储(Network Attached Storage,网络接入存储)
  • 各种存储系统各有优缺点,尤其是性能和成本,我们要根据不同弄得需求,选择最合适的存储

具体可以参考这里

小结:层次结构

在这里插入图片描述
在这里插入图片描述
从Cache、内存、到SSD和HDD硬盘,一台现代计算机中,就用上了所有这些存储器设备。

  • 其中,容量越小的设备速度就越快
  • 而且,CPU并不是直接和每一种存储器设备打交道,而是每一种存储器设备,都只和它相邻的存储设备打交道。
  • 比如,CPU Cache是从内存里加载来的,或者需要写回内存,并不会直接写回数据到硬盘,也不会直接从硬盘加载数据到CPU Cache,而是先加载到内存,然后从内存中加载到Cache。

这样,各个存储器只和相邻的一层存储器设备打交道,并且随着一层层向下,存储器的容量逐层增大,访问速度逐层变慢,而单位存储成本也逐层下降,也就构成了我们常说的存储器层次结构

使用存储器的时候,该如何权衡价格和性能?

存储器在不同层级之间的性能差异和价格差异,都至少在一个数量级以上。L1 Cache 的访问延时是 1 纳秒(ns),而内存就已经是 100 纳秒了。在价格上,这两者也差出了 400倍。比如:

在这里插入图片描述

因为这个价格和性能的差异,你会看到,我们实际在进行电脑硬件配置的时候,会去组合配置各种存储设备。

磁盘 VS 内存 VS 寄存器

寄存器 VS 内存

寄存器的工作方式很简单,只有两步:

  • (1)找到相关的位
  • (2)读取这些位。

内存的工作方式就要复杂得多:

  • (1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)
  • (2)将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址翻译成实际的物理地址。
  • (3)将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽(bank)上。
  • (4)确定数据在哪一个内存块(chunk)上,从该块读取数据。
  • (5)数据先送回内存控制器,再送回CPU,然后开始使用。

内存的工作流程比寄存器多出许多步。每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。

为了缓解寄存器与内存之间的巨大速度差异,硬件设计师做出了许多努力,包括在CPU内部设置缓存、优化CPU工作方式,尽量一次性从内存读取指令所要用到的全部数据等等。

磁盘和内存的区别

  • 磁盘和内存都具有存储功能,它们都是存储设备。区别在于:
    • 内存时通过电流来实现存储(这就是为什么断电数据会丢失的原因), 磁盘则是通过磁记录技术来实现存储的;
    • 内存高速但是贵,磁盘慢但是便宜;
    • 电脑断电后,内存中的数据会丢失,磁盘不会;
    • 内存是内部存储设备,磁盘是外部存储设备
  • 为什么程序必须读入内存才能CPU运行,而不是直接从磁盘中读取呢?
    • CPU中的程序计数器是通过指定内存地址而读出程序指令的
    • 从内存中读取数据比从磁盘中读取数据要快得多。

磁盘与内存的合作

磁盘缓存

每次内存从磁盘中读取数据,必然会读到相同的内容,我们可以在内存中开辟一段空间,当作假想磁盘,每次想要访问磁盘中的数据时,先访问这段空间,如果这段空间找不到,才到磁盘中读取,这段空间就叫做磁盘缓存

虚拟内存

虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,OS中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。这种机制使得期望运行大于物理内存的程序成为可能

虚拟内存机制需要快速的映像内存地址,以便把程序生成的地址转换成有关字节在RAM中的物理地址。这种映像由CPU中的一个部件,称为存储器管理单元MMU来完成

缓存和MMU的出现对系统的性能由重要的影响。从一个程序切换回另一个程序,有时也称为上下文切换。但这两种操作很昂贵,所以应该努力避免这些操作

虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件

许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。

覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。不久人们找到了一个办法,这就是虚拟存储器(virtual memory)。虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上。比如对一个16MB的程序和一个内存只有4MB的机器,操作系统通过选择,可以决定各个时刻将哪4M的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M的程序运行在一个只具有4M内存机器上了。而这个16M的程序在运行前不必由程序员进行分割,有内存管理单元MMU来完成

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值