从算盘到电脑,谁在里面替你拨珠子?
算盘要你一颗一颗拨珠子,电脑没人碰它,自己就给你算出答案——是谁在里面替你拨?
算盘和电脑,做着同一件事
你见过算盘吗?
一个长方形的木框,里面穿着几根棍子,每根棍子上有几颗珠子。你用手指把一颗珠子往上拨——加一。再拨一颗——再加一。你的手指按着珠子,一颗一颗,你自己在算。
算盘是世界上最早的"计算工具"之一。很久以前,还没有电脑的时候,人们就用它算账、算数。算得快的人,手指翻飞,珠子上上下下,比你在纸上列竖式快多了。
可算盘有一个很大的问题:你必须自己拨。 每一颗珠子,都得你的手亲自去碰它。你不拨,它就一动不动。
现在,你看看眼前这台电脑。你点一下,画面变了;你敲一个键,字就跳出来了;你说一句话,它给你搜出了一堆东西。没有人碰它——是谁在里面,替你拨珠子?
电脑里没有珠子,但有三个"工人"
电脑里面没有珠子。它有电。
可它要做的事,和算盘一模一样——把一堆"东西"拨来拨去,算出答案。只不过拨的不是木珠子,是电信号。而拨这些信号的,不是你的手——是三个看不见的、专门干这件事的零件。
我们把这三个零件,叫成三个"工人"。不是因为它们有手有脚——它们没有。是因为它们每个人都只干一件活,跟工厂里分工的工人一样,各管各的。合在一起,就比你十根手指头拨算盘快了不知道多少倍。
这三个工人,各有各的名字。一个叫 CPU,专门算。一个叫内存,记着正在算的。一个叫硬盘,关了机也不忘。
下面,我们一个一个去看。
CPU——专门算的工人
CPU 是电脑里面算得最快的那个人。它的活就一件:算。
你敲一下键盘上的"1",键盘把这个信号变成一串电脉冲,顺着主板上的线,跑到 CPU 面前。CPU 一看:哦,是"1"。它把它先放在手边——手边是一块极小的、快得吓人的临时记事板。然后你敲了"+",又敲了"1",又敲了"="。CPU 飞速地把"1+1"算出来:等于 2。前后连一眨眼的万分之一都不到。
CPU 一秒钟能算多少次?拿你手边这台电脑来说,几十亿次。不是几十次、不是几百次——几十亿次。
算盘你拨一颗珠子,一次只能算一个数。可 CPU 一秒钟算几十亿次——它同时有几千件小事在手上跑,一件没算完就接着算下一件,快到你觉得它是在"同时"做所有事。
可它算完的东西,放哪呢?它手上那块临时记事板太小了——一转身,就可能忘了。
所以它需要一个专门"记"的工人来帮忙。
内存——专门记"正在算的",一关机就忘
这个专门记的工人,叫内存。
你在电脑上写一篇文章。你敲了一句话,屏幕上的字多了。你敲完一整段,还没有点"保存"。这些字,现在在哪?
在内存里。
内存是一个"记着正在算的"的工人。CPU 算出来的每一个数——你现在写了多少个字、鼠标箭头在哪、窗口开了几个——全暂时放在内存里。CPU 需要的时候,随时去内存拿;算完一个中间结果,扔回内存存着,转头去算别的。
内存有一个特点:它记得快。CPU 要什么,内存一瞬间就递给它了。
但它还有一个特点——一关机,全忘了。
没错。内存是不记隔夜事的工人。你写到一半的文章、画到一半的画、正在打的游戏——只要还没点"保存",一关机,就全没了。因为内存是靠电来记的——有电,记得一清二楚;一断电,忘得干干净净。
这就是为什么每次关电脑之前,它都会问你:"你还有东西没保存——确定要关吗?"它不是啰嗦——是内存里的东西,一关就真的没了。
那那些明天还在的东西——你上次写的文章、上星期画的画——是哪来的?
第三个工人。
硬盘——关了机,它也不忘
第三个工人,叫硬盘。
硬盘跟内存相反:它记得不如内存快,可它关了机也不忘。
你在键盘上敲完一篇文章。这些字现在还在内存里——CPU 正在处理它们、你还能接着敲。内存记着每一个字的位置。
然后你点了一下"保存"。
CPU 收到了一个指令:"把内存里面这篇文章,搬到硬盘里去。"它立刻开始搬——把内存里那堆字,一个接一个地传给了硬盘。硬盘把它们刻下来——不是用笔、不是用墨水,是用磁性(像磁铁吸在冰箱上那样),在一片高速旋转的小盘子上,记录下每一个字的每一个笔画。
搬完了。CPU 跟硬盘说:"好了,交给你了。"
这时候你再关机——内存忘光了,但硬盘上的字还在。明天开机,硬盘把这篇文章交出来,屏幕又把它们一个字一个字地画出来。你写的每一个字,都在。
所以——内存管"正在做的",硬盘管"做完了的"。 CPU 在中间像一阵风,两边跑——从硬盘拿资料交给内存、从内存拿数据算完再放回去。
三个工人,就这样配合着——一个算、一个记着正在算的、一个存着算完的。
你敲一个键,它们跑了一圈
我们把全过程走一遍——就从一个最普通的动作开始:你敲了一个"你"字。
键盘把"你"变成一串电信号,顺着主板上的线跑到 CPU。CPU 把"你"这个字对应的编码(一个数字)算出来,放进内存。内存暂时记着:当前光标位置,有一个"你"。屏幕上一秒还显示着你刚才打的字,下一秒它就多了一个你——是 CPU 把内存里最新的状态算了一遍,画到了屏幕上。
你继续敲——"你好"。内存里现在存着两个字的位置、两个字的编码。CPU 一边处理新来的字,一边还要把屏幕上的东西算一遍——字多了、光标往后移了一格。
你敲完一句话,点"保存"。CPU 对内存说:"把整篇文章给我。"内存把文章交给 CPU,CPU 马上传给硬盘。硬盘把它刻下来——完成。第二天开机,还在。
就敲一个字的功夫——键盘、CPU、内存、硬盘、屏幕,五个零件,跑了一个整圈。
没有人替你拨珠子。可这一整圈跑下来——哪个不比拨珠子快?哪个不比拨珠子准?
你不是在拨珠子,你是在指挥一支军队
所以回到最开始那个问题——算盘要你拨,电脑不用拨。是谁在里面替你拨?
是三个工人。一个算——CPU。一个记着正在算的——内存。一个存着算完了的——硬盘。它们没有手、没有脑子——可你敲一下键盘,它们三个就围过来:你传给我、我算出来、你帮我记着、你帮我存好。
你坐在屏幕前面,看起来好像什么都没做。可你的手指头每敲一下——就是一声令下。键盘跑了、CPU 算了、内存记了、硬盘存了、屏幕画了。几十亿次的"拨珠子",全替你干了。
而且没人碰它。是电在里面跑——每一道电,就是一双手。