谈谈计算机上的那些存储器-Memory Hierarchy
文章首发于浩瀚先森博客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的更多相关文章
- 计算机科学基础知识(一)The Memory Hierarchy
一.前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业).经过思考,我认为 ...
- OpenRisc-39-ORPSoC,or1200的memory hierarchy整体分析
引言 前面我们简单分析了ORPSoC的整体结构,or1200_top的整体结构,or1200_cpu的整体结构. 并对ORPSoC的启动过程,ORPSoC的debug子系统,clock子系统进行了介绍 ...
- 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"
http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序。解决办法
在64位服务器系统上,默认不支持Microsoft.Jet.OLEDB.4.0的驱动程序,系统默认会提示未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"的错误 ...
- 对路径的访问被拒绝,解决之后又报-未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
服务器环境:Server 2008 64位系统 问题:在导入Excel题录表时报错,1对路径的访问被拒绝,2未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序. 解决方案 ...
- Windows无法完成安装,若要在此计算机上安装Windows,请中心启动安装。
现在安装系统已经很简单了,我觉得U盘启动的话两步就差不多了, 壹:设置BIOS,将U盘启动作为系统默认启动选项 贰:直接进去大白菜之类的,一键安装... 今天终于看到第三部了, 报错:Windows无 ...
- 关于C#联接数据库是出现'未在本地计算机上注册'错误的解决办法
今天在用c#连接access数据库处理数据的时候遇到了一个诡异的问题, 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序 我们的部分代码如下: st ...
- 也来说说关于未在本地计算机上注册“VFPOLEDB.1”的程序的解决方法
大家都知道VFP是一个非常古老的数据库.但是,还有一些单位用到这些数据库. 前段时间,也做了一个关于DBF数据导出的功能的测试.程序以前有同事写好了,但当我进行修改调试的时候,问题就出来了. 调试的时 ...
随机推荐
- 转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解
目标大纲 文章转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解 IE中CSS-filter滤镜小知识大全 CSS实现跨浏览器兼容性的盒阴影效果
- Mou常用快捷键
title: Mou常用快捷键date: 2015-11-08 17:16:38categories: 编辑工具 tags: mou 小小程序猿我的博客:http://daycoding.com Vi ...
- 好用的第三方控件,Xcode插件(不断更新)
第三方控件类: 1.提示框 MBProgressHUD: 是一款非常强大的.提供多种样式的提示框.使用起来简单.方便.可以在GitHub上查看具体的使用方法. https://github.com ...
- C++的单例模式与线程安全单例模式(懒汉/饿汉)
1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实 ...
- [css]我要用css画幅画(六)
接着之前的[css]我要用css画幅画(五), 由于这个画已经画了很久了,这次一次性加了比较多更新,算是让这幅画告一段落吧. 本次的更新包括: 1. 给云增加动画 2. 画了一棵树 3. 树上画了一个 ...
- Linux LVM学习总结——放大LV容量
本篇介绍LVM管理中的命令lvresize,我们先创建一个卷组VG VolGroup02,它建立在磁盘/dev/sdc (大小为8G)上.创建逻辑卷LV时,我们故意只使用了一小部分.具体情况如下所示 ...
- SQL Server Replication 中关于视图的点滴
在服务器A数据库TEST新建了一个本地发布(Local Publications)RPL_GES_MIS_TEST,在服务器B数据库RPL_TEST上创建了一个本地订阅(Local Subscript ...
- Activemq Jolokia
打开JMX <broker … useJmx="true"> … <managementContext> <managementContext cre ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6
接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System. ...
- Linux I/O多路复用
Linux中一切皆文件,不论是我们存储在磁盘上的字符文件,可执行文件还是我们的接入电脑的I/O设备等都被VFS抽象成了文件,比如标准输入设备默认是键盘,我们在操作标准输入设备的时候,其实操作的是默认打 ...