说句实话,虽然以前知道计算机里有CPU,内存,硬盘,显卡这么些东西,我还真不知道这些东西是怎么协作起来完成我们的操作需求的,平时就只会在小白面前拿出一些所谓的参数来吓唬吓唬别人,所以特意补充了一些这方面的知识,写的比较浅显,和我一样是菜鸟或小白的人可以看一看,高手可以指点一下。
首先程序是什么?程序和我们的电脑硬件CPU,内存,硬盘,到底有什么关系?
计算机没出现的话,我们理解程序可能就是指一套做事的流程,比如村里召开妇女大会的流程,可能就是先找好开会场地,然后通知好领导和妇女,安排领导讲话等等。其实计算机指的程序也差不多,像我刚刚接触计算机专业术语的时候常常被陌生词汇吓到,觉得不明觉厉,其实通过学习可以发现创造这些词汇的人的目的并不是要吓跑初学者。所以计算机程序也不难,他也是一套做事的流程,和前面的比喻也差不多,只不过计算机流程的实现方式不一样,我们开会的流程是通过人与人之间的协作完成,计算机的程序跑起来是通过硬件的协作完成。
现在来说说程序和CPU,内存等硬件的关系,假设有这样一个程序,计算1+2等于几然后显示在屏幕上,这个程序是怎么通过CPU,内存,硬盘来跑起来的呢?
在这里我们先做一个比喻,假设CPU,内存,硬盘等这些东西都是来自一个星球的外星人,既然是外星人,当然不懂我们地球人的语言啊,而且这些外星人有一个特点,他们只有一只手,且手上只有一根手指,每次算数的时候,因为要靠手指来计数,我们的10进制数字,他们一根手指根本不够用啊,这就和我们小时候数到11就得借用脚趾头一样,所以他们来计算我们地球人的数字时就需要借用很多小伙伴手来表示一个大于2的数字,这个就是他们的2进制。
现在知道了CPU,内存,硬盘的特殊算数方式,我们来进一步来看看他们之间的协作,他们是怎么完成我们人类的要求的。
首先我们地球人每个人都有自己擅长的东西,计算机星球的这几个小伙伴也是,各有各的属性,CPU这个人最聪明,算数最快,缺点就是体格太瘦弱了,记不住太多东西,我们要cpu算很多东西时,他一个人记不过来,所以需要别人协助。再看看硬盘,硬盘体格最大,记性好(虽然慢点),所以他被分配了一个任务,那就是记住我们地球人分配的各种无聊的流程数据(什么开会的流程啊,请那些人啊,这些人的电话号码多少啊等等),但是呢由于硬盘反应慢,cpu并不想直接和硬盘打交道,然后再看看内存, 内存比硬盘小很多,反应比硬盘快好多倍,但是就是记的东西有点少,而且没电的时候就罢工,把东西忘的一干二净 ,但因为反应快,且记的东西比自己多,cpu决定和内存直接打交道要流程数据。
这样我们就可以一次性把很多任务的流程写好堆给硬盘兄,什么开会的流程啊,查看天气预报的流程啊,给女朋友打电话的流程啊统统提前写好塞给硬盘,然后当我们需要计算机完成一个任务时,内存从硬盘那把这个任务的流程全都要过来,最后内存把这些交个cpu,让cpu帮忙调度计算一下,cpu每完成这个任务的一个步骤后都要内存帮忙翻到相应的地方,看这个流程下一步要求是什么,这样从头到尾一路算完,这样他们就完成了我们地球程序员写好的程序。
刚刚我们提到了地球程序员这个角色,那为什么他们写的东西,计算机星球的这些外星人能听懂呢?明明刚刚说的计算机星球的这些人只懂0和1嘛,程序员写的好歹也是英文嘛,难道,计算机星球的外星人懂英文?他们当然不懂,程序员理论上写好计算机能直接读懂的01代码是可以的,但是程序员如果每次都要把程序直接转写成01代码势必会大大降低写程序的效率,而且每个程序员要从底层这么深入了解计算机语言也会非常费时间,所以早期的程序员大神干脆写了个翻译程序,这个程序也叫编译器,这个编译器可以专门把一门特定的语言转成机器能读懂的计算机语言,这样有了这个么翻译,后来的程序员写程序就会轻松很多,可以直接写上地球程序员方便阅读的代码,所以我们应该感谢发明编译器的人,他们让人类世界和计算机世界交流变得更便捷了。
以上只是大概介绍了下计算机cpu,内存,硬盘和程序的关系,用了些可能不算好的比喻,如有纰漏和不正确的地方,望指正。