零、前言

首先看一下计算机的存储体系(Memory hierarchy)金字塔。

其次我们看看一个计算机的存储体系。

一、Register

寄存器是 CPU 的内部组成单元,是 CPU 运算时取指令和数据的地方,速度很快,寄存器可以用来暂存指令、数据和地址。在CPU中,通常有通用寄存器,如指令寄存器IR;特殊功能寄存器,如程序计数器PC、sp 等。

二、Cache

缓存即就是用于暂时存放内存中的数据,若果寄存器要取内存中的一部分数据时,可直接从缓存中取到,这样可以调高速度。高速缓存是内存的部分拷贝。

CPU  <--- > 寄存器<--- > 缓存<--- >内存

寄存器的工作方式很简单,只有两步:(1)找到相关的位,(2)读取这些位。

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

(1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)

(2)将指针送往内存管理单元(MMU),由 MMU 将虚拟的内存地址翻译成实际的物理地址。

(3)将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽(bank)上。

(4)确定数据在哪一个内存块(chunk)上,从该块读取数据。

(5)数据先送回内存控制器,再送回 CPU,然后开始使用。

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

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

三、RAM-memory

即内存,是用于存放数据的单元。其作用是用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。

四、其他

作者:时国怀
链接:http://www.zhihu.com/question/20075426/answer/16354329
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

一条汇编指令大概执行过程是(不是绝对的,不同平台有差异):

取指(取指令)、译码(把指令转换成微指令)、取数(读内存里的操作数)、计算(各种计算的过程,ALU 负责)、写回(将计算结果写回内存),有些平台里,前两步会合并成一步,某些指令也不会有取数或者回写的过程。

再提一下 CPU 主频的概念:首先,主频绝对不等于一秒钟可以执行的指令个数,每个指令的执行成本是不同的,比如 x86 平台里汇编指令 INC 就比 ADD 要快,具体每个指令的时钟周期可以参考 intel 的手册。

为什么要提主频?因为上面的执行过程中,每个操作都需要占用一个时钟周期,对于一个操作内存的加法,就需要 5 个时钟周期,换句话说,500Mhz 主频的 CPU,最多执行 100MHz 条指令。

仔细观察,上面的步骤里不包括寄存器操作,对于 CPU 来说读 / 写寄存器是不需要时间的,或者说如果只是操作寄存器(比如类似 mov BX, AX 之类的操作),那么一秒钟执行的指令个数理论上说就等于主频,因为寄存器是 CPU 的一部分。

然后寄存器往下就是各级的 cache,有 L1 cache,L2,甚至有 L3 的,以及 TLB 这些( TLB 也可以认为是 cache),之后就是内存,前面说寄存器快,现在说为什么这些慢:

对于各级的 cache,访问速度是不同的,理论上说 L1 cache(一级缓存)有着跟CPU寄存器相同的速度,但 L1 cache 有一个问题,当需要同步 cache 和内存之间的内容时,需要锁住 cache 的某一块(术语是cache line),然后再进行 cache 或者内存内容的更新,这段期间这个 cache 块是不能被访问的,所以 L1cache 的速度就没寄存器快,因为它会频繁的有一段时间不可用。

L1 cache 下面是 L2 cache,甚至 L3 cache,这些都有跟 L1 cache 一样的问题,要加锁,同步,并且 L2 比 L1 慢,L3 比 L2 慢,这样速度也就更低了。

最后说说内存,内存的主频现在主流是 1333 左右吧?或者 1600,单位是 MHz,这比 CPU 的速度要低的多,所以内存的速度起点就更低,然后内存跟 CPU 之间通信也不是想要什么就要什么的。

内存不仅仅要跟 CPU 通信,还要通过 DMA 控制器与其它硬件通信,CPU 要发起一次内存请求,先要给一个信号说“我要访问数据了,你忙不忙?”如果此时内存忙,则通信需要等待,不忙的时候,通信才能正常。并且,这个请求信号的时间代价,就是够执行几个汇编指令了,所以,这是内存慢的一个原因。

另一个原因是:内存跟 CPU 之间通信的通道也是有限的,就是所谓的“总线带宽”,但,要记住这个带宽不仅仅是留给内存的,还包括显存之类的各种通信都要走这条路,并且由于路是共享的,所以任何请求发起之间都要先抢占,抢占带宽需要时间,带宽不够等待的话也需要时间。

以上两条加起来导致了 CPU 访问内存更慢,比 cache 还慢。

举个更容易懂的例子:

  • CPU 要取寄存器 AX 的值,只需要一步:把 AX 给我拿来,AX 就拿来了。

  • CPU 要取 L1 cache 的某个值,需要 1 - 3 步(或者更多):把某某 cache 行锁住,把某个数据拿来,解锁,如果没锁住就慢了。

  • CPU 要取 L2 cache 的某个值,先要到 L1 cache 里取,L1 说,我没有,在 L2 里,L2 开始加锁,加锁以后,把 L2 里的数据复制到 L1,再执行读 L1 的过程,上面的 3 步,再解锁。

  • CPU 取 L3 cache 的也是一样,只不过先由 L3 复制到 L2,从 L2 复制到 L1,从 L1 到 CPU。

  • CPU 取内存则最复杂:通知内存控制器占用总线带宽,通知内存加锁,发起内存读请求,等待回应,回应数据保存到 L3(如果没有就到 L2 ),再从 L3 / 2 到 L1,再从 L1 到 CPU,之后解除总线锁定。

转载于:https://blog.csdn.net/csuyishuan/article/details/52073421

(SAW:Game Over!)

寄存器、cache、内存、硬盘之间的千丝万缕相关推荐

  1. 计算机存储金字塔层次结构:寄存器 高速缓存 内存 硬盘

    计算机存储器的金字塔层次结构,参考这里 CPU.内存.硬盘的关系:硬盘用来存储我们的程序和数据,当我们运行程序的时候,CPU首先接受到我们的命令,之后CPU是告诉硬盘,我要运行你存储的程序A,你把程序 ...

  2. CPU 寄存器 和内存三者之间的关系

    寄存器 不知道什么是寄存器?那见过太监没有?大家应该都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝身边的小太监,小太监呢再交给皇帝同志进行处理.这个小太监只是个中转站,并无别的功能 ...

  3. 第三章 寄存器(内存访问)

    学号:20171308150 姓名:江漪雯 班级:17计科4班 一. 内存中字的存储 1. 8086CPU中,用16位寄存器来存储一个字.高8位存放高位字节,低8位存放低位字节. 2. 在内存中存储时 ...

  4. CPU与Cache、内存以及硬盘之间的数据交换

    今天一个同学问我一个问题,CPU与Cache.内存.以及硬盘之间是如何进行数据传输?我给同学了一个笼统的解释.当我再细想这个问题的时候,我发现这个问题并不是想的那么简单,而且想地越深会感觉细节的东西会 ...

  5. cpu(处理器)、内存、硬盘之间的关系

    前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  6. cpu、内存、硬盘之间的关系

    前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  7. 内存缓存(from memory cache)和硬盘缓存(from disk cache) 的区别

    引言 ?命中强制缓存时,资源会显示 from memory cache or from disk cache 两者的区别 内存缓存(from memory cache) 内存缓存具有两个特点,分别是快 ...

  8. CPU、寄存器、内存、磁盘、网络性能分析

    介绍 寄存器 最靠近 CPU 的控制单元和逻辑计算单元的存储器,就是寄存器了,它使用的材料速度也是最快的,因此价格也是最贵的,那么数量不能很多. 存储器的数量通常在几十到几百之间,每个寄存器可以用来存 ...

  9. 计算机的组成 —— 存储(内存/硬盘)

    storage(存储器,如硬盘),memory:内存 硬盘的读写原理 CPU 和 内存(memory)是由许多晶体管组成的电子部件,通常称为 IC(Integrated Circuit,集成电路). ...

最新文章

  1. as3 android白屏,Android 8.0中一些坑以及对应的解决方法
  2. idea maven PKIX path building failed
  3. 第一节 HTML DOM
  4. hostent结构体图解
  5. 有趣c语言编程经典例子,C语言简单有趣例子总结ZWF.pdf
  6. 【洛谷P4169】天使玩偶/SJY摆棋子【CDQ分治】
  7. DeepSDF : Learning Continuous Signed Distance Functions for Shape Representation
  8. windows libwebsocket
  9. liunx apache 的安装
  10. 拓端tecdat|Excel 实例:数据进行排序和筛选
  11. c 语言程序设计文献,c语言程序设计参考文献
  12. iastora怎么改成ahci_WIN7系统IDE改成AHCI就蓝屏怎么办_win7硬盘模式ide改成ahci蓝屏处理方法-win7之家...
  13. PLC培训班一般多少钱?
  14. 2018东南大学 SUS 十一欢乐赛 pwn解题记录
  15. 【C++要笑着学】引用的概念 | 引用的应用 | 引用的探讨 | 常引用
  16. jdk、maven、idea安装配置
  17. 神经网络计算相似度,神经网络对比
  18. Python可视化分析疫情数据
  19. ZOJ 3716 Ribbon Gymnastics 解题报告
  20. 深度linux安装office,测试deepin 20 安装microsoft office

热门文章

  1. 多线程-NSOperation
  2. linux下varnish4配置语法(基础)
  3. 翻转句子中单词的顺序
  4. AWARD BIOS设置(INTEL芯片组)
  5. Practice:在2008 core上部署和管理DHCP服务器
  6. django-vue-admin脚手架快速开发CRUD教程
  7. centos7安装ansible AWX17.1.0
  8. Ansible-playbook yum安装nginx1.20.1
  9. spark standalone提交任务参数配置
  10. Scala Actor并发编程入门示例