一、计算机的基本硬件组成
三大件:CPU、内存和主板。
(1)CPU 中央处理器(Central Processing Unit),最重要的核心配件,计算机的所有“计算”都是由 CPU 来进行的。
(2)内存(Memory)。程序、打开的浏览器、运行的游戏,都加载到内存才能运行。程序读取的数据、计算得到的结果,也都要放在内存里。内存越大,加载越多。内存通常直接可以插在主板上:
(3)主板(Motherboard): CPU 读取,内存里的程序和数据,计算完,把数据写回内存。CPU 不能直接插到内存上,反之亦然。
主板有着各种各样,多达数十乃至上百个插槽。CPU,内存都要插在主板上。 CPU 和内存之间如何通信的问题:
1、芯片组控制了数据传输的流转,数据从哪到哪。
2、总线则是实际数据传输的高速公路。总线速度(Bus Speed)决定了数据能传输得多快。
有了三大件,配上电源供电,计算机就可以跑起来了。缺少各类I/O 设备。输出设备:显示器;输入设备,鼠标和键盘。
硬盘:数据持久保存。网吧没有,通过局域网,读写远程网络硬盘。各类云服务器,只要让计算机能通过网络,SSH 远程登陆访问就好,没必要配显示器、鼠标、键盘。节约成本,方便维护。
显卡(Graphics Card): 里有GPU(Graphics Processing Unit,图形处理器),CPU 之外另一个“处理器”,一样可做各种“计算”的工作。使用图形界面操作系统的计算机, Windows、Mac OS 还是 Linux都是必不可少的。主板都带了内置的显卡。玩游戏,图形渲染或者跑深度学习应用,需单独显卡,插在主板上。
南桥(SouthBridge):主板上芯片组,控制外部 I/O(鼠标、键盘以及硬盘)和 CPU 之间的通信的,在主板的“南面”。
北桥”:主板上芯片组,连接 内存、显卡和CPU 通信。已被移到 CPU 内部。
二、冯·诺依曼体系结构
手机里只有 SD 卡(Secure Digital Memory Card)类似硬盘功能的存储卡插槽,没有内存插槽、CPU 插槽这些东西。
手机尺寸的原因, CPU、内存、网络通信,摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫SoC: System on a Chip(系统芯片)。
个人电脑和智能手机硬件组成方式不太一样。智能手机上App,和写个人电脑的客户端应用似乎没有什么差别,高级编程语言撰写、编译之后,一样是把代码和数据加载到内存里来执行。
冯·诺依曼体系结构(Von Neumann architecture):“可编程”计算机,一个是“存储”计算机。
“不可编程”:计算机由各种门电路组合而成的,通过组装出固定的电路版,完成特定计算程序。需要修改功能,就要重新组装电路。硬件层面是“写死”的。计算器的本质是一个不可编程的计算机
“存储”计算机:程序存在计算机内存里,可加载不同程序来解决不同的问题。有“存储程序计算机”,自然也有不能存储程序的计算机。典型的就是早年的“Plugboard”这样的插线板式的计算机。整个计算机就是一个巨大的插线板,通过在板子上不同的插头或者接口的位置插入线路,来实现不同的功能。这样的计算机自然是“可编程”的,但是编写好的程序不能存储下来供下一次加载使用,不得不每次要用到和当前不同的“程序”的时候,重新插板子,重新“编程”。
著名的Engima Machine就用到了 Plugboard 来进行“编程”,图片来源
“不可编程”还是“不可存储”,效率都不高。对于效率的追求,就是“存储程序计算机”由来。
于是我们的冯祖师爷,基于当时在秘密开发的 EDVAC 写了一篇报告First Draft of a Report on the EDVAC,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫First Draft,翻译成中文,其实就是《第一份草案》。这样,现代计算机的发展就从祖师爷写的一份草案开始了。
First Draft里说计算机组成:
运算器、控制器、存储器、IO设备
(1)算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),完成各种算术和逻辑运算。各种数据的处理或者计算工作,也叫作数据通路(Datapath)或者运算器。
(2)包含指令寄存器(Instruction Reigster)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),控制程序的流程,通常就是不同条件下的分支和跳转。在现在的计算机里,上面的算术逻辑单元和这里的控制器单元,共同组成了我们说的 CPU。
(3)存储数据(Data)和指令(Instruction)的内存。更大容量的外部存储(硬盘)。
(4)输入和输出设备,触摸屏既是输入设备,又是输出设备。跑在各种云上的服务器,通过网络来进行输入和输出。这时,网卡既是输入设备又是输出设备。
所有的计算机程序,从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,结果输出到输出设备中。代码基于这样抽象框架来运作。
总结延伸
冯·诺依曼体系结构确立硬件的基础架构。学习计算机组成原理,就是学习和拆解冯·诺依曼体系结构。
学习控制器、运算器的工作原理,CPU 是怎么工作,为何这样设计;
学习内存的工作原理,从最基本的电路,到上层抽象给到 CPU 乃至应用程序的接口是怎样的;
学习 CPU 是怎么和输入设备、输出设备打交道的。
学习组成原理,就是在理解从控制器、运算器、存储器、输入设备以及输出设备,从电路这样的硬件,到最终开放给软件的接口,是怎么运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。
推荐阅读
读经典的论文,是从普通工程师迈向优秀工程师必经的一步。First Draft of a Report on the EDVAC。直接读取英文原文,既可搞清楚、弄明白对应的设计及其背后的思路来源,破除对于论文或者核心技术的恐惧心理。
课后思考
计算机行业的两大祖师爷之一,冯·诺依曼机之外,就是著名的图灵(Alan Mathison Turing)。现在的计算机也叫图灵机(Turing Machine)。那么图灵机和冯·诺依曼机是两种不同的计算机么?图灵机是一种什么样的计算机抽象呢?