依一般计科类大部头的形制,开头总该是唠叨一些历史,就机组而言则是:从那个一通电后路灯都要闪一闪的“大怪物”,讲到你面前这个充一次电用十几个小时(也许吧)的“小可爱”。对计算机的历史感兴趣的人很少,这段我就不再赘述了吧,如果你对这些特别感兴趣,我相信前人的工作是足够完善且易于参考的。
我开这个坑的意图,是让一个(特别的)非计算机专业领域的同学,在缺乏相关知识背景的情况下尽可能的了解一些基础而重要的东西,我会践行费曼学习法,用尽可能贴近生活的语言去叙述晦涩的原理,同时让自身对知识的理解更进一层。可能这种形式的写作会带来一些不严谨,我会尽量避免,但我不会专门为其去牺牲太多易读性,因为她有任何一句看不懂的话都可以说是我的失败。此外,如果有本质上的错误,欢迎指出,我将不胜感激!
…
在这之前,我假设你知道:计算机由主板及电源、处理器、内存(RAM)、硬盘、外部设备(如显卡与显示器、声卡、网卡等)构成的。
如果你问我,有关计算机的概念中,什么最最重要?我会回答“局部性和复用”,因为纵观我的知识库,这个概念就像一条长长的线一样,几乎能将所有的知识串在一起,下面我将在一切开始之前仔细地将这个概念叙述一遍,也请你(如果提得起兴趣的话),仔细地读下去:
在现实生活中,我们的资源永远是有限的,可能是时间、可能是金钱、甚至可能是热情和新鲜感。我们能承受的资源消耗有限,并不意味着凭借当前有限的资源,有些事情我们永远不能达成,例如:市面上的现金是有限的,但银行可以只保留央行规定的最低储备金就将用户的存款贷出去,从而增加资金的流通性,让一份现金起到大于一份的作用。或者更贴近生活的,你有一个512GB的大文件(单个)需要从X传到Y,但只有两个128GB的U盘,你可以将大文件一分为四份,一开始盘A单独被X写入数据,装满盘A后A插到Y上开始(剪切式)传输——同时B开始被X写入数据,两者进行交替操作时,基本上就相当于你获得了一个512GB的U盘。注意:此处的条件是删除单个文件的耗时可以忽略不计(现实中大多数可以做到)、从X到Y来回插拔U盘的耗时可以忽略不计(不能坐着飞机去捣鼓U盘)、每一台主机单位时间内能输出的数据量有限(同时插两个则只有一半的速度)。该例子复用了U盘的存储空间,且利用了传输文件时的局部性,是这种条件下传输速度的最优解。
局部性是一个迷人的概念,为了阐述它我讲一个故事吧:文艺地来讲,局部性可以用这一句话表示,“弱水三千我只取一瓢饮”。然而这一瓢水对于处理器这个不解风情的邋遢家伙来说有些不同,它每次用一瓢就够,但它懒得每次都去河边取水,它会费劲的从遥远的“弱水”中挑一缸之后,取一瓢加点消毒剂、漱漱口、吐回去,再取一瓢加点消毒剂、漱口、再吐回去,直到它想洗个澡、做个饭之类为止,它会把这缸脏水倒回那三千弱水之中,再费劲的挑一缸回来用…至于为什么不住河边,这个问题就很前卫了(存算一体结构),我们不做讨论,权当它舍不得自己的小屋吧。
回到现实,挑水这个动作指的是:从低速大容量存储器到高速小容量存储器的传输(如服务器通过计算机网络传到硬盘、硬盘通过主板通道传输到内存、内存通过总线传输到处理器内部的“小存储”);漱口、洗澡等操作指的是处理器对数据的处理和变换(加减乘除之类的操作),而倒水指的是将修改过的数据送回低速大容量存储器的过程。计算机正是做着这些单调而重复的操作,从而构成了现在这个万物互联的世界,也让你得以看见这篇简陋的文章。
如果你读到这里,恭喜你,你大概已经了解了计算机组成原理(甚至是计算机网络)的大概轮廓了,我之后的文字,会围绕着找水、挑水、用水、倒水来进行。