当前位置:C++技术网 > 资讯 > 不明白硬盘加载和内存加载还有网络操作等等之间的关系

不明白硬盘加载和内存加载还有网络操作等等之间的关系

更新时间:2016-08-16 19:32:54浏览次数:1+次

内存的数据都是从硬盘那里加载过来的,那为什么还需要硬盘读写呢?直接从内存那里读不就可以了吗?网络操作是什么。

C++技术网解答:

    内存的特性就是断电后数据没了。所以内存的数据是短暂性保存,无法永久保存。所以需要硬盘来永久保存。硬盘是磁盘的代表,所以磁带、光盘等也是可以永久保存的。
    另一个问题,在《程序内存以及CPU运行机制理解:CPU使用时间、内存大小、二进制的意义》中,已经解释了,硬盘速度跟不上,无法保证CPU的高效运作。但是内存又不能永久存储数据,所以,还得先将数据加载到内存,然后再从内存将数据读取到CPU处理。内存起到了缓存的作用,将高速的CPU和低速的磁盘嫁接起来,这样可以提高效率。这是为什么呢?
    这是本次问题的重点。上次的问题重点解释CPU与内存的机制。这次重点讲硬盘。

    内存起了中间人的作用,为什么可以达到提高效率的目的呢?因为传统硬盘是机械式的,要启动机械工作以及旋转盘片找数据,总是不如电子电路通电就搞定来得快。当要读取一个文件时,读取文件的指令还是在CPU执行的。只不过,执行了之后,指令的作用到达硬盘之后,硬盘控制器接受到命令后,开始工作。此时CPU并不等待硬盘的数据,而是继续做其他事情。比如会让这个读取文件的线程挂起,然后切换到其他线程继续执行。这样,硬盘在慢吞吞的把数据从盘片上找,这个过程,硬盘盘片会飞速旋转。所以,你经常听到读取文件或者写入文件到硬盘的时候,刷刷刷的好大的声音。找到了数据后,硬盘控制器会将数据读取到硬盘控制器的缓存中,然后先将读出来的一部分往内存的指定的位置即内存缓存(一块内存区域)中运输。运完后,继续读取剩余的数据,从盘片上读取到硬盘控制器缓存,然后再运到内存。直到所有的数据都读取完毕,硬盘盘片速度就降下来了。

    数据读取完毕后,控制电路会给CPU发送一个信号,这个信号叫做硬件中断。CPU知道后,然后选择一个合适的时机,将运行的线程暂停挂起,然后切回这个读取文件的线程,然后开始处理文件数据。加入这个文件是视频文件,那么CPU会开始对数据开始解码,然后设置显卡数据,然后就看到了画面。

    因为一大块数据已经在内存了,可以开始播放了。当然,如果视频文件很大,会一段段的加载到内存,放完的部分被覆盖掉。这样,数据从硬盘源源不断的运到内存,然后CPU也可以源源不断的从内存缓存取数据来处理。这样CPU一直可以忙,这样就不会闲置CPU了,效率就高了。

    这个提高效率的原理是利用了缓冲。慢速的设备可以笨鸟先飞,先攒一大堆数据,虽然速度快的处理的快,但是数据量大了,处理还是要一定的时间的。然后在处理过程中,慢速的也在不断的增加数据,这样可以在一段时间内维持大家都有事可做,效率就自然高了。

    网络操作无非就是将硬盘看成是另一台计算机了。一台计算机对于另一台计算机来说,可以看成是硬盘,只是距离隔得远,通信信号受网络线路的影响。而在一台计算机中,因为没有外部线路的干扰,而且线路都很顺畅,处理速度快。而网络因为传输的干扰大,还有可能被人拦截之类的,不同的计算机系统还不一样,各种需求,也就要有一个统一的标准去让所有计算机顺利沟通,这也就是网络协议的存在必要。网络操作也就是按照网络通信协议来通信而已。