寄存器、cache、内存、硬盘之间的千丝万缕
零、前言
首先看一下计算机的存储体系(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、内存、硬盘之间的千丝万缕相关推荐
- 计算机存储金字塔层次结构:寄存器 高速缓存 内存 硬盘
计算机存储器的金字塔层次结构,参考这里 CPU.内存.硬盘的关系:硬盘用来存储我们的程序和数据,当我们运行程序的时候,CPU首先接受到我们的命令,之后CPU是告诉硬盘,我要运行你存储的程序A,你把程序 ...
- CPU 寄存器 和内存三者之间的关系
寄存器 不知道什么是寄存器?那见过太监没有?大家应该都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝身边的小太监,小太监呢再交给皇帝同志进行处理.这个小太监只是个中转站,并无别的功能 ...
- 第三章 寄存器(内存访问)
学号:20171308150 姓名:江漪雯 班级:17计科4班 一. 内存中字的存储 1. 8086CPU中,用16位寄存器来存储一个字.高8位存放高位字节,低8位存放低位字节. 2. 在内存中存储时 ...
- CPU与Cache、内存以及硬盘之间的数据交换
今天一个同学问我一个问题,CPU与Cache.内存.以及硬盘之间是如何进行数据传输?我给同学了一个笼统的解释.当我再细想这个问题的时候,我发现这个问题并不是想的那么简单,而且想地越深会感觉细节的东西会 ...
- cpu(处理器)、内存、硬盘之间的关系
前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- cpu、内存、硬盘之间的关系
前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- 内存缓存(from memory cache)和硬盘缓存(from disk cache) 的区别
引言 ?命中强制缓存时,资源会显示 from memory cache or from disk cache 两者的区别 内存缓存(from memory cache) 内存缓存具有两个特点,分别是快 ...
- CPU、寄存器、内存、磁盘、网络性能分析
介绍 寄存器 最靠近 CPU 的控制单元和逻辑计算单元的存储器,就是寄存器了,它使用的材料速度也是最快的,因此价格也是最贵的,那么数量不能很多. 存储器的数量通常在几十到几百之间,每个寄存器可以用来存 ...
- 计算机的组成 —— 存储(内存/硬盘)
storage(存储器,如硬盘),memory:内存 硬盘的读写原理 CPU 和 内存(memory)是由许多晶体管组成的电子部件,通常称为 IC(Integrated Circuit,集成电路). ...
最新文章
- as3 android白屏,Android 8.0中一些坑以及对应的解决方法
- idea maven PKIX path building failed
- 第一节 HTML DOM
- hostent结构体图解
- 有趣c语言编程经典例子,C语言简单有趣例子总结ZWF.pdf
- 【洛谷P4169】天使玩偶/SJY摆棋子【CDQ分治】
- DeepSDF : Learning Continuous Signed Distance Functions for Shape Representation
- windows libwebsocket
- liunx apache 的安装
- 拓端tecdat|Excel 实例:数据进行排序和筛选
- c 语言程序设计文献,c语言程序设计参考文献
- iastora怎么改成ahci_WIN7系统IDE改成AHCI就蓝屏怎么办_win7硬盘模式ide改成ahci蓝屏处理方法-win7之家...
- PLC培训班一般多少钱?
- 2018东南大学 SUS 十一欢乐赛 pwn解题记录
- 【C++要笑着学】引用的概念 | 引用的应用 | 引用的探讨 | 常引用
- jdk、maven、idea安装配置
- 神经网络计算相似度,神经网络对比
- Python可视化分析疫情数据
- ZOJ 3716 Ribbon Gymnastics 解题报告
- 深度linux安装office,测试deepin 20 安装microsoft office