计算机的基本硬件组成
说到计算机的基础原理就躲不过 图灵机
和 冯诺依曼模型
。
图灵机
定义了 计算机是如何进行运算的
, 冯诺依曼模型
则 定义了 计算机的基本结构
。
图灵机
1936 年,被誉为人工智能之父的阿兰·图灵提出了 图灵机
,根据wikipedia上的定义,图灵机
可以看作 “等价于任何有限逻辑数学过程的终极强大逻辑机器”。
简单来说,图灵机
是一个能够在 有限逻辑步的骤内解决 可计算问题
的抽象机器。
之所以说抽象,是因为图灵并没有真的造出这台机器,而是把它当成理论去和大家探讨 可计算问题
。
图灵认为如果一个问题是可计算的,那么它的解决方案就必须可以被具化成一条条的指令,能够被图灵机所处理。对于 可计算问题
和 不可计算问题
的定义,大家有兴趣可以去了解下,最经典的就是 停机问题。
这里我们主要了解下图灵机的基本思想(计算机是如何进行运算的
)。
-
图灵认为
图灵机
的基本组成如下:- 有一条无限长的「纸带」,纸带由一个个连续的格子组成,每个格子可以写入字符。
- 有一个「读写头」,读写头可以读取纸带上任意格子的字符,也可以把字符写入到纸带的格子。
- 有一个「状态寄存器」用来保存图灵机当前所处的状态。
- 有一套「指令规则」,
图灵机
能够根据 当前的状态 和 当前读写头所指向格子上的符号 执行指令规则的动作。
除了「纸带」是无限长外,其他部分都是有限的,包括:状态寄存器、指令规则集。
-
我们可以通过
1+2
的简单数学例子来看看图灵机是如何进行运算的
:- 首先,纸带上的初始格子符号应该是
1、2、+
,然后读写头初始时停在1
字符所在格子上。 - 接着读写头开始进行读入,将
1
存入状态寄存器中。 - 然后,读写头往右移动一格,以同样的方式将
2
存入状态寄存器中。 - 然后,读写头继续往右移动一格,这时读到
+
符号,因为+
是运算指令,作用是加和目前寄存器中的状态值,运算完成后,读写头将结果存入状态寄存器中。 - 读写头继续继续往右移动一格,发现是空格后,读写头把结果
3
写入到纸带的格子中.
通过上面的
图灵机
计算1 + 2
的过程,可以发现图灵机
是不断往右读取格子的内容,如果内容是数字则存储到状态寄存器,如果是运算符合则进行运算。事实上,图灵机这个看起来很简单的工作方式,和我们今天的计算机是基本一样的。
- 首先,纸带上的初始格子符号应该是
冯诺依曼模型
冯诺依曼模型
又被称为 冯诺依曼结构
、普林斯顿结构
,在wikipedia中被定义为 “一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构”。
与之对应的是 哈佛结构
,在wikipedia中被定义为 “一种将程序指令储存和数据储存分开的存储器结构(Split Cache)”。
-
从存储设计上看,
哈佛结构
比冯诺依曼结构
更合理,因为在纯冯诺依曼架构
下的 CPU 不能同时进行指令读取
和数据访问
,因此现代计算机都是这两个设计模型结构的综合应用。但是,
哈佛结构
只是一种将程序资料与普通资料分开存储的设计概念,它并没有完全突破冯诺伊曼架构
,而冯诺依曼结构
之所以如此著名是因为,他是第一次明确提出存储程序计算机
这个概念设想。 -
为什么说
存储程序计算机
是个划时代的概念呢? 因为在存储程序计算机
这个概念之前计算机是「不可以被编程的」。我们可以参考“计算器”,事实上它就是一个由各种门电路组合,组装出来的一个固定的电路板,能够完成特定计算逻辑的计算机。
它是「不可以被编程的」,因为它的程序在刚出生时就被设定好了,如果要改变它的程序,就必须重新设计和组装电路板。
说到这里你应该就知道
存储程序计算机
这个概念,在当时的计算机全都是只能做特定逻辑运算的时代是多么“显眼包”了。可以说
冯诺依曼结构
确定了我们现在所使用的计算机硬件的基本架构,现在我们学习计算机组成原理
就是在学习和拆解冯诺依曼结构
。 -
回到
冯诺依曼结构
本身,这个概念是在1945年被冯祖师爷在 《First Draft of a Report on the EDVAC》论文中首次被正式提出, 它描述了一台计算机应该遵循的3大原则:- 采用二进制逻辑
- 程序存储执行
- 计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)
- 运算器(算术逻辑单元,Arithmetic Logic Unit,ALU),用来完成各种算术和逻辑运算。
- 控制器(控制器单元,Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。
- 存储器(Memory Unit),用来存储数据(Data)和指令(Instruction)
- 输入设备(Input Device),例如 鼠标键盘
-
输出设备(Output Device),例如 显示器
-
现在再来看看我们日常使用的计算机的基本硬件组成,你就会发现与
冯诺依曼结构
大差不差:- CPU
通常包含控制单元
和逻辑运算单元
和各种寄存器
。-
控制单元
: 负责根据指令控制CPU工作,例如从内存中读取数据到寄存器,将寄存器中的两个数据进行加和运算等。 -
逻辑运算单元
:负责计算。 -
寄存器
:通常包括通用寄存器
、程序计数器
、指令寄存器
。-
通用寄存器
:用于存放 程序指令 或 需要运算的数据。 -
程序计数器 PC
:用于存储下一个要执行指令的内存地址。 -
指令寄存器 IR
:用于存放正在执行的指令。
-
-
- 内存
负责存储程序和数据。是一个线性排列的连续空间。 - 总线
将 CPU、内存、以及其他设备关联起来,负责他们之间的通信。-
地址总线
:用于指定 CPU 将要操作的内存地址。 -
数据总线
:用于读写内存的数据。 -
控制总线
:用于发送和接收信号。比如中断、设备复位等信号,CPU 收到信号后自然进行响应,这时也需要控制总线。
-
- 输入设备
- 输出设备
- CPU
杂谈
如果你自己组装过计算机,你会发现你实际购买的明明只有 CPU + 内存 + 主板 + 其他外设
,没有 总线
这个东西。
-
CPU
和内存
的功能不用多说,你肯定知道是干嘛用的,那么主板
呢?实际上,主板是一个有着各种各样插槽的配件,我们的CPU和内存条都需要插到主板的上才能相互通信。
可以说,是主板的芯片组(Chipset) 和 总线(Bus)解决了 CPU 和 内存 之间如何通信的问题。
其中芯片组控制了数据传输的流转,也就是数据从哪里到哪里的。总线则是实际数据传输的通道。
因此,总线速度(Bus Speed)决定了数据能传输得多快。
-
当你拥有这3大件,通电后计算机便已经可以跑起来了,当然如果你是个人电脑的话,那么 键盘鼠标显示器 肯定是必不可少的输入输出设备。
但是这些都不是必须的,你肯定用过各种云服务器吧,你只要通过ssh远程登录其实也能控制计算机。
-
还有一个很特殊的设备,就是显卡(Graphics Card)。
现在,使用图形界面操作系统的计算机,无论是 Windows、Mac OS 还是 Linux,显卡都是必不可少的。
有人可能要说了,我装机的时候没有买显卡,计算机一样可以正常跑起来啊!那是因为,现在的主板都带了内置的显卡。
如果你用计算机玩游戏,做图形渲染或者跑深度学习应用,你多半就需要买一张单独的显卡,插在主板上。
显卡之所以特殊,是因为显卡里有除了 CPU 之外的另一个“处理器”,也就是GPU(Graphics Processing Unit,图形处理器),GPU 一样可以做各种“计算”的工作。
-
鼠标、键盘以及硬盘,这些都是插在主板上的。
作为外部 I/O 设备,它们是通过主板上的南桥(SouthBridge)芯片组,来控制和 CPU 之间的通信的。
“南桥”芯片的名字很直观,一方面,它在主板上的位置,通常在主板的“南面”。另一方面,它的作用就是作为“桥”,来连接鼠标、键盘以及硬盘这些外部设备和 CPU 之间的通信。
有了南桥,自然对应着也有“北桥”。
是的,以前的主板上通常也有“北桥”芯片,用来作为“桥”,连接 CPU 和内存、显卡之间的通信。不过,随着时间的变迁,现在的主板上的“北桥”芯片的工作,已经被移到了 CPU 的内部,所以你在主板上,已经看不到北桥芯片了。