计算机的CPU为什么不直接调取硬盘文件,而是要先载入到内存中?

白衣纵马


因为硬盘的速度实在是太慢了,尤其是机械硬盘作为电脑中唯一一快还在使用机械原理运作的设备,速度自然跟不上CPU和内存这些半导体芯片,但是机械硬盘发展这么多年,数据相对稳定可靠,而且容量大成本低,不得不使用机械硬盘存取数据。但是为了弥补硬盘速度的缺陷,所以就设计了内存用来作为CPU和硬盘数据连接的中转站。

内存使用的是DRAM颗粒,是一种易失性存储器,它无法像硬盘那样可以长久的保存数据,而且断电也不会丢失,但是DRAM内存的速度非常快,可以说仅次于CPU内部的高速缓存,这样每当CPU需要调取数据时就会通过硬盘把数据先传输到内存,这样CPU直接在高速内存中调取数据,这样可以大大降低CPU的等待时间,也弥补了机械硬盘的速度缺陷。

如果CPU直接从机械硬盘调取数据文件的话看似减少了中间环节,但是硬盘较慢的速度会严重拖累CPU的性能,无论多强的CPU都需要等待硬盘数据才行,这个传输环节消耗的时间非常多,直接造成CPU性能发挥不出来,性能下降。

即使是现在流行的固态硬盘,其NADA闪存颗粒持续传输速度也不过500mb/s,相比机械硬盘大大降低了小文件读写延迟,但是仍然比起DDR4内存动辄2000mhz以上的频率差距甚远,所以未来很长一段时间内仍然需要内存才能保证电脑性能的正常发挥。


嘟嘟聊数码


原因其实很简单,但是原理很复杂,要理解起来也不是有多难,最早期的时候CPU为了加快读写处理数据,会设计cpu缓存作为一种解决方案,但是随着技术的进步如果单纯的增加CPU的缓存这样会大大增加制造成本,并且会增加CPU的面积,因此才会使用了内存的解决方案,这样可以大大降低制造成本并且可以提升电脑性能的灵活性。



我们知道CPU的时钟频率是非常高的其处理数据的速度是非常快的,需要不断地读写其需要的数据,如果单独的等待硬盘去给其送数据那将是一种灾难性的后果,就是现在的计算机性能可以低到几百分之一去,再这样的处理速度之下,估计计算机的性能水平得倒退好多年去。因此为了加快数据的处理读写,就要有一种介质能够充当快速读写的功能,又要性价比高,这个时候内存的诞生的确是很好的解决了成本和速度问题,因为我们经常调用的数据不会像外村那样大,他只需要再电脑启动之后存放应用程序必须得一些指令数据,而其他的数据可以不必全部放到内存当中,这样既能满足需要还能降低成本。


因此这也就构成了现在计算机的基本组成架构,但是如果有一天硬盘的读写以及延迟可以达到内存的速度或许硬盘会直接将其中一部分直接开启作为内存去应用,从而可以让内存消失,并且可以随机的通过设置内存大小,动态调整。


程序小崔


如此简单的问题,被懂科技的人搅成一桶浆糊。外行更是丈二和尚摸不着头脑。

CPU尽管功能强大,但它只负责运算,没有记录运算结果的功能。因此,电脑一关,它就是一块废铁,里面什么也没有。就象中国的算盘一样,算盘打完,拎起一甩,就什么也没有了。早期最简单的电脑只有CPU,也就是那种儿童玩具电脑,只有CPU,没有内存,当然更没有外存,即各种硬盘、软盘、光盘等。

为了能让CPU做复杂一些的工作,人们就想出来为CPU提供一个舞台、或者叫工作平台,就是内存啦。就象为一个能干的工程师提供一张宽敞的办公桌一样,于是,CPU与内存就成为了最佳搭档,进行各种复杂的操作。电脑电脑,实际上是指它们俩。CPU工作时,它只认内存,从不分心,不管你有多么丰富的外部存储装备(硬盘、光盘、移动硬盘),它理都不理你。

于是,你想,很多应用软件就只能呆在硬盘里。没叫到你,你就永远呆硬盘里,没有出头的日子。只有要用到你这款软件时,你才有资格进驻内存,以便听任CPU摆布。

不过,这种搭配方式带来一个意外收获,即如果不料断电了,CPU和内存里就什么也没有了,成了一堆废铁。而你按装的应用软件仍旧完好无损,它们藏身在硬盘里,大不了重新启动后再次运行它罢了。

所以,从原理结构上说,CPU只对内存进行操作,对硬盘是不闻不问的。有些技术能把硬盘划出一块视其为扩展内存,那是另说,不在此题范围之内。



蓝博格尔


这就像我们要从三楼下到一楼,还得走电梯或楼梯(缓存或内存),直接跳下去重力加速度将导致事故。反过来一步登天,CPU向硬盘要数据却迟迟加载不到,并不符合程序逻辑。

具体原因有二:

①这是系统运行机制使然,内存是临时存储空间,硬盘作为永久存储空间,如果以内存处理的数据要求硬盘,那后者根本忙不过来,寿命也将大大降低。

②尽管固态硬盘比机械硬盘快很多,但仍然跟不上内存的速度,与CPU的差距更是天上地下,如果没有内存作为缓冲中转站,将直坠千里、跌停宕机。

从根本上说,硬盘作为物理存储介质,存取速度远慢于电子信号处理速度,这决定CPU不能从硬盘直接存取数据。(现今CPU二三级缓存越来越大,这才是提高电脑性能的重点。)

从各种软件测试数据也可直观看出,CPU缓存速度动辄100GB/s,内存读写超过10GB/s,PCIe固态硬盘突破3GB/s,机械硬盘仅0.2GB/s,其中4K小文件2MB/s。

▲内存是程序不可缺少的中介,正由于断电易失性,寿命才会长久。

以前内存容量小而金贵,不得不在硬盘上划出页面文件,即通过虚拟内存机制,把一些暂时不处理的数据临时转移到硬盘上。这也是更换固态硬盘后,电脑运行变快的原因之一。

现在大内存单条已达32GB,虽然容量仍远小于硬盘,速度却是硬盘永远无法取代的,内存仍是电脑程序运行最好的场所。


奇客


闪存,固态硬盘,或者机械硬盘,对于计算机来说都属于永久性存储介质,内存则是易失性存储介质。

你打开word,随便打几个字,断开电脑电源,然后重新开机,你随便打的几个字不见了,因为它保存在内存中,断电后就丢失了。但你的word还能用,因为word.exe文件保存在硬盘中,断电后它还在。

硬盘和内存的主要区别在于是否能永久存储,另一个区别是硬盘大而慢,内存小而快,硬盘便宜内存贵。下面是机械、固态和内存的速度对比,数值肯定有差异,但数量级的差异一目了然。






另外说一句题外话,其实现在CPU一般不会从内存读文件,而是使用CPU缓存,它比内存更快更小也更贵。当然cache也是易失性的。



在文件读取的过程中,一般是从磁盘读取到内存,从内存放入缓存。然后供CPU使用。这个有点像我们看书,比如我手头有本大英百科全书(磁盘),查找资料时,我先翻到第100页(内存),这时候因为内存太小,放不下整本书,其他页面的数据并不在内存中。然后我找到相关的条目(缓存)。同样因为大小的限制,缓存中只有条目相关的上下文,并不会整页整页的存放数据。

至于为什么要这样,其实仅仅是因为价格的原因。速度越快的存储介质,容量越小,价格越贵。如果不考虑价格因素,同时保证内存永不断电。理论上来说,完全使用内存代替磁盘是可以的,而且速度会快很多。


RealAlexander


我举个简单的例子:

你从广州去北京,一般的行程就是:

你在广州机场坐飞机,飞到北京机场,然后下飞机,坐车前去目的地。

而你的提问就好像是这样:

为什么要先上飞机再下飞机坐车呢?我直接坐车到北京目的地不就好了吗?

而这个问题关键点也在于此:硬盘的容量虽然很大,但它的读取、写入速度远远比不上内存。所以电脑把需要反复调用的数据载入内存,可以避免反复读取硬盘造成的时间浪费。

在这里,内存就好比起到了“飞机”的作用。你说绕开飞机,直接开车到北京去,这个也是可行的,但只会更慢而不会更快。例如以前电脑的内存容量不足,需要使用硬盘空间“虚拟内存”,这种情况就跟你说的直接硬盘调取文件差不多。


从耗子胖成猪


硬盘和内存虽然都是存储数据的,可是在计算机系统里有着本质的区别。

一般来说计算机系统必须有的几大部件,CPU,存储器,输入输出设备。

内存在计算机系统属于存储器,而硬盘在计算机系统里只是个外部设备,所以我们的PC没有内存的话根本就不能启动,而没有硬盘的PC,照样启动,只是不能运行操作系统。

CPU 有三个总线,数据总线,地址总线,和控制总线。

简单点,比如说计算机系统CPU地址总线有1000个地址,0-900分配给内存,901分配给硬盘,902分配给键盘,903分配给显卡,等等。按照CPU的设计加电复位后,先从地址0读取指令,执行,再读地址1执行,再读地址2执行,一直连续的读取下去,这里可以看出程序的执行是按照地址一步步进行的,而这里硬盘的读写就只能对地址901的重复读写操作,不能作为存储器运行程序的。


陈仙7


速度问题,硬盘的速度相对于cpu就是蜗牛对火箭的差异。这样显然不能让cpu等硬盘,那么解决的办法就是cpu发出指令,让dma系统将数据从硬盘中读取到内心里,这期间cpu去干别的事去了。但是内存的速度相对于cpu依然是飞机与火箭的差异。这个时候还需要cpu的内部存管系统将内存的部分内容按照一定规律放到它的L3,L2乃至L1缓存中去。这个时候cpu才开始去理这些数据。如果L1中没有就到L2中去找,L2中没有再到L3中去找,L3中还没有才到内存中去找。中间增加了这么多复杂的步骤,就是为了让cpu多干活,匹配速度之差。


Jagen在路上


含简单的,处理器的速度非常快,如果让CPU直接去处理每个字节没什么毛病,但是我们的存储太慢了,最快的家用ssd最近好像才突破4GB/s(在强调一下家用的),一般我们的家用机械硬盘能上100MB/s就比较不错了。因为cpu处理的速度和存储性能之间有巨大差距,这个差距远远超过疯狂动物城里面那段兔子找树懒查车牌那段了,如果让CPU取直接处理存储的数据CPU要等了,那么我们的电脑就会呈现假死的状态了。所以在一个处理器执行流程中需要什么数据先告诉协处理器(例如:sata控制器)里先把数据放到内存,等数据都正确读取完毕了之后告诉CPU去执行,这样在协处理器处理数据的期间,我们的CPU完全可以去干别的流程了(多线程或多进程)。


蓝鸟啃苹果


“极客谈科技”,全新视角、全新思路,伴你遨游神奇的科技世界。


暂且不讨论硬件组成结构上的问题,我们单从数据的传输速度来讨论一下这个问题。

  • 硬盘当做内存使用,也并不是没有这方便的操作,例如电脑中的虚拟内存;

  • 电脑的虚拟内存,仅能够在一定程度上缓解内存的压力,无法真正实现内存的传输速度。

先来了解一下什么是虚拟内存,再看看硬盘和内存之间的差距究竟有多大。

(文后还有其他应用的彩蛋赠送哦!)


虚拟内存的应用

虚拟主要是用来缓解系统内存不足的一种方法,将内存无法处理的数据调入硬盘某个空间。

  • 虚拟内存的作用主要是缓解内存压力,无法真正的替代内存;

  • 电脑若使用超大的内存组合,完全可以取消虚拟内存的设置。


硬盘与内存数据传输之间的差距

1.数据处理延时的问题

电脑的各个设备部件之间的延时可以参考下表:

  • 延时从高到底的排列,依次是机械硬盘、固态硬盘、内存、CPU;

  • 从数据的反应速度上来看,内存明显要优于硬盘。

2.数据读写速度测试

固态硬盘的测试数据可以参看下图:

内存的测试数据可以参看下图:

从测试数据可以看出,两者之间的读写速度根本不在同一个数量级之上,差距相当巨大。


大内存的其他用处

  • 硬盘当做内存使用,并不是一个好的建议;

  • 但是却可以将内存当做硬盘使用,从而体验更快的传输速度。

这里就需要通过使用RamDisk软件来实现,敢兴趣的大内存用户可以下载试用。


关于计算机直接调用硬盘,取消内存的做法,您怎么看?

欢迎大家留言讨论,喜欢的点点关注。



分享到:


相關文章: