文章首发于浩瀚先森博客http://www.guohao1206.com/2016/12/07/1248.html

说到计算机上的存储器,很多人第一反应是硬盘,然后是内存。

其实在计算机上除了硬盘和内存属于存储器以外CPU寄存器和Cache他们也是属于一类的。

对于存储器我们在乎的无外乎两个属性----“快”和“大”,我们希望存储器容量越大越好,传输速度越快越好,然后鱼和熊掌不能兼得。由于现在硬件技术的限制,我们能制造错容量虽小但是速度很快的存储器,也可以制造出容量大但是读取速度相对慢的存储器,但是不能制造出容量大而且速度也快的存储器(当然这是我们希望的)。所以在现代计算机中我们把存储器分为若干级别,称为Memory Hierarchy。按照距离CPU由近到远的顺序依次是CPU寄存器 –> 一级Cache –> 二级Cache –> 内存 –> 硬盘

1. CPU寄存器

CPU寄存器是距离CPU最近的一个存储器,因为它就位于CPU执行单元中(CPU执行单元,CPU核,CPU芯片抽象点描述的话大概如下图,参考)。它实际上就是一组数字电路的名字,由多个触发器(Flip-flop)组成。每个触发器保存一个Bit的数据。CPU寄存器掉电数据会丢失。它是访问速度最快的存储器,也是容量最小的存储器~CPU寄存器通常有几个到几十个,具体使用哪个寄存器是由指令决定的。

2. Cache

Cache访问速度也比较快,距离CPU执行单元也比较近,仅次于CPU寄存器,因为它不在CPU执行单元中,它在CPU核中,和MMU一样。Cache分为一级Cache和二级Cache,一级Cache离CPU更近些,容量比二级Cache要稍小点。二级Cache距离物理内存更近些。Cache和内存都是有RAM(Random Access Memory)组成,可以根据地址访问。不同的是Cache是由SRAM(Static RAM)组成,内存是由DRAM(dynamic ram)组成。DRAM容量比SRAM大,但是速度慢。

Cache的作用是缓存最近访问过的内存数据。当CPU要访问内存数据的时候,会发给个Virtual Address,这个时候不会直接去访问内存拿数据,一级Cache会拿着这个地址在自己缓存的数据上查找是否存在这样的数据,如果存在就可以直接使用,因为一般Cache访问的速度是内存的几十倍,充分的利用Cache的话可以最大化提高计算机性能。如果一级Cache上没有找到缓存数据并且计算机上还配置了二级Cache的话,这个时候二级Cache会根据MMU给的PA(physical address)查找是否存在缓存数据,如果仍然没有的话就只能访问内存了,但是访问内存数据的时候并不是说需要几个数据就拿几个数据,而是复制相邻的一段数据Cache Line缓存起来。一级Cache和二级Cache的区别在于一级Cache是根据VA查找数据,二级Cache根据PA查找的。Cache的所有操作都是由硬件进行的,并非指令!

3.内存

内存是位于CPU处理器芯片之外的一颗芯片,它与CPU通过地址和数据总线相连,利用地址进行访问,掉电数据也会消失。内存是由DRAM组成。

注意的地方:如果计算器启动MMU的话,程序指令的访问地址是VA,而访问内存的地址的PA,是经过MMU转化而来的。

4. 硬盘

硬盘大家都很数据,容量大,访问速度慢。驱动程序通过设备总线控制器访问。由于硬盘的访问速度慢,所以操作系统一般一次性读取硬盘几个页的数据缓存下来使用。另外硬盘掉电数据不会丢失~

参考:《计算机体系结构基础》

谈谈计算机上的那些存储器-Memory Hierarchy的更多相关文章

  1. 计算机科学基础知识(一)The Memory Hierarchy

    一.前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业).经过思考,我认为 ...

  2. OpenRisc-39-ORPSoC,or1200的memory hierarchy整体分析

    引言 前面我们简单分析了ORPSoC的整体结构,or1200_top的整体结构,or1200_cpu的整体结构. 并对ORPSoC的启动过程,ORPSoC的debug子系统,clock子系统进行了介绍 ...

  3. 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"

    http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智 ...

  4. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  5. 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序。解决办法

    在64位服务器系统上,默认不支持Microsoft.Jet.OLEDB.4.0的驱动程序,系统默认会提示未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"的错误 ...

  6. 对路径的访问被拒绝,解决之后又报-未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

    服务器环境:Server 2008  64位系统 问题:在导入Excel题录表时报错,1对路径的访问被拒绝,2未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序. 解决方案 ...

  7. Windows无法完成安装,若要在此计算机上安装Windows,请中心启动安装。

    现在安装系统已经很简单了,我觉得U盘启动的话两步就差不多了, 壹:设置BIOS,将U盘启动作为系统默认启动选项 贰:直接进去大白菜之类的,一键安装... 今天终于看到第三部了, 报错:Windows无 ...

  8. 关于C#联接数据库是出现'未在本地计算机上注册'错误的解决办法

    今天在用c#连接access数据库处理数据的时候遇到了一个诡异的问题, 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序 我们的部分代码如下: st ...

  9. 也来说说关于未在本地计算机上注册“VFPOLEDB.1”的程序的解决方法

    大家都知道VFP是一个非常古老的数据库.但是,还有一些单位用到这些数据库. 前段时间,也做了一个关于DBF数据导出的功能的测试.程序以前有同事写好了,但当我进行修改调试的时候,问题就出来了. 调试的时 ...

随机推荐

  1. 推荐8个实现 SVG 动画的 JavaScript 库

    SVG 是一种分辨率无关的图形(矢量图形).这意味着它在任何类型的屏幕都不会遭受任何质量损失.除此之外,你可以让 SVG 灵活现一些动画效果.这篇文章就给大家推荐8个实现 SVG 动画的 JavaSc ...

  2. git 提交解决冲突

    一:git命令在提交代码前,没有pull拉最新的代码,因此再次提交出现了冲突. error: You have not concluded your merge (MERGE_HEAD exists) ...

  3. text-align=center 失效原因

    text-align属性是针对 内联元素居中得属性设置,对于块状元素使用margin:0 auto;来控制居中: 笔者在设置一个h2标签时设置了text-align:center;但是却始终出现在中间 ...

  4. iOS AppStore 申请加急审核

    1.在iTunes Connect 上面提交审核后,点击下面链接申请加急审核 链接:https://developer.apple.com/appstore/contact/appreviewteam ...

  5. Dynamics XRM Tools 2015 2016

    Download Link: Dynamics XRM Tools 2015/2016 Overview Dynamics XRM Tools brings you a quality range o ...

  6. 长链接转换成短链接(iOS版本)

    首先需要将字符串使用md5加密,添加NSString的md5的类别方法如下 .h文件 #import <CommonCrypto/CommonDigest.h> @interface NS ...

  7. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

  8. 【代码笔记】iOS-水波效果

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...

  9. TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库

    TortoiseSVN和VisualSVN-Server的配置使用,外网访问SVN版本库 SVN客户端程序:TortoiseSVN SVN服务器程序:VisualSVN-Server ######## ...

  10. ORACLE 11g 数据库体系结构图

    ORACLE 11g 的数据库体系结构图,非常全面.系统.高屋建瓴的整体介绍了ORACLE 11g 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACL ...