机械硬盘容量很大(目前普遍1T,2T),我们的数据和程序是存储在磁盘上的,所以CPU要想执行指令/数据,就要从存储器,也就是磁盘上读取,CPU一秒钟可以执行几亿条指令,但是相对之下,磁盘的读写速度就是慢如蜗牛 。假设磁盘一秒钟可以读取100条指令 。那么这中间就存在 巨大的速度差异 。半导体行业发展了几十年,CPU的执行速度一再飞速提升,奈何磁盘技术发展的太不给力了,CPU再快,可是磁盘严重拖后腿,那CPU就相当于工作严重不饱和,如果直接从磁盘上 来读取数据,那么CPU相当于 99.9999%的时间都在闲置着 。
"假设磁盘一秒钟可以读取100条指令 。":带有假设字样的,具体数字都是随便写的 。比如 磁盘读写速度自然有它的参数指标,不过我们只是为了说明问题,所以能理解其中的道理就好 。
磁盘厂商们也在努力研究,比如SSD(固态硬盘),它的速度就比 机械硬盘快了一二十倍吧 。但是对于CPU的速度,这也是然并卵啊 。(更何况SSD相比机械硬盘太贵了)
所以这就是个大问题 。
我们的目标就是执行任务时让CPU全负荷的运行,争取对于每一个时钟周期,CPU都不会闲置浪费 。
这就像是老板对我们这些员工的希望一样 。老板给我们发工资,那么他就是希望我们每一天的每一分每一秒都在努力帮公司干活 。不要有什么任何时间闲着 。所以我们要感谢劳动法,让我们每天工作八小时就够了 。毕竟我们也是血肉之躯,也需要吃喝拉撒睡觉 。
看到劳动法说每天工作八小时就够了,程序猿们哭晕在厕所 。
程序猿问科比:“你为什么这么成功? ”
科比:“你知道洛杉矶凌晨四点是什么样子吗? ”
程序猿:“不知道,一般那个时候我还没下班呢,怎么了?”
科比:“额…….”
通过上面的介绍,我们就明白了计算机体系的主要矛盾,CPU太快了,而磁盘太慢了 。所以它俩是不能够直接通信的,我们可以加一层过度 。这就是内存的作用 。这就是几百块钱一根的内存条的作用和功能 。
实际上,一般情况下,内存的读写速度比磁盘快几十万倍左右 。所以它终于够资格和CPU直接通信了 。
这里有张图,我们来看一下磁盘/内存,与CPU速度之间逐渐增大的差距(主要是CPU技术发展太迅猛了) 。
文章插图
图三:磁盘DRAM和cpu速度之间逐渐增大的差距
所以现在程序执行过程是这样的 。CPU执行任务时,只与内存通信,它从内存获取指令/数据或写回数据 。内存再与磁盘通信,内存从磁盘读取数据/指令,或者内存将数据写回磁盘 。
提到添加过渡层 。这其实和JVM的原理都是类似的 。具体可参考我的另一篇文章关于跨平台的一些认识 。也许这就是大道至简吧 。
存储器层次结构我们这里说的内存,主要是指主存 。就是主板上插的内存条 。它的读写速度比磁盘快了几十万倍 。但是相对于CPU的速度依旧还是慢 。那么主存和CPU之间,可以继续添加速度更快的过度层 。所以intel i7的存储器层次结构是这样的 。
文章插图
图4:一个存储器层次结构的示例
前面扯了那么多篇幅,就是告诉你,我们为什么需要内存(主存),那么理解了主存,自然也就理解了L3,L2,L1等各级缓存存在的意义 。对于现代的计算机系统,在CPU与磁盘/主存之间,加了多层过度层 。
严格来讲,应该叫CPU的算术逻辑单元(ALU),但是简单的直接说CPU,大家肯定也能听得懂 。
实际上这是一种缓存思想 。比如,本地磁盘也相当于 远方服务器的缓存 。因为我们从网上下载数据/文件时,速度明显比从本地磁盘读取要慢 。
一般情况下,L5磁盘与L4主存速度相差几十万倍,而L3-L0之间,它们每级缓存的速度差异大概是10倍 。
我们是拿i7处理器来做例子,它有三级缓存,像低端一些的处理器,比如i3,只有两级缓存,但是道理是相同的 。本文当中,都是拿i7的存储器层次来做例子 。
明白一点 。CPU执行速度实在太快了,一秒钟执行几亿/十几亿条指令,CPU干活干脆利落,那么存储器就要想方设法的用最快的速度把指令/数据 送给CPU去运行 。否则CPU干活再快,又有什么意义呢 。
基本思想已经理解了 。那么我们就开始具体讨论细节问题 。
RAM,ROM,总线等看看上面那幅图,什么SRAM,DRAM,还有我们前面讲的SSD,Flash,机械硬盘等,还有下面要讨论的总线(BUS),所以我们先来讨论一些基础硬件知识.
推荐阅读
- 华为手机应用怎么移到sd卡 华为手机应用移到sd卡的方法是什么
- 9月3日是什么日子 9月3日是哪个节日
- 荣耀9x是什么屏幕荣耀9x什么屏幕
- 三红蜜柚是哪里产的 三红蜜柚是什么地方的
- 12星座女和渣男谈恋爱是什么体验?
- 最大数字是什么单位 数字办公室是什么单位
- 桂林山水甲天下的下一句是什么谚语 桂林山水甲天下的下一句是什么?
- 福特是什么旗下的
- 怎样清洗泡菜坛子 清洗坛子的步骤是什么
- 奔驰abs和防滑灯亮是什么原因?