https://zhuanlan.zhihu.com/p/63322067
谈电脑硬件的文章很多,但一般是从电脑有哪些配件说起。这篇文章我尝试从架构方面来阐述,希望更有助于萌新对电脑的各种配件的作用进行理解吧。
现代计算机,常见的有两种架构,其中一种是冯·诺依曼架构。先看图:
想象一下我们在做数学考试:
另一种计算机架构,是哈佛架构。先看图:
可以看出来,哈弗架构和冯·诺依曼架构最大的不同就是内存分为独立的指令内存和数据内存。这个怎么理解呢?我们换个例子,假设我们毕业了,现在的工作是一名会计。我们的工作是根据一份财务报表制作指南,对账本上的数字进行计算各种指标,制作财务报表。
哈弗架构中指令内存中存放的,就是这份制作指南,告诉我们财务报表上的每一个指标要怎么计算;数据内存中存放的,就是我们计算指标需要用到的账本上的数据。当我们计算报表上的某个指标的时候,如果我们发现手上的账本没有相关的数据,我们可以先根据指南计算报表上的其它指标,让其它同事帮忙去找相关的账本,不用停下来浪费时间。
所以,和冯·诺依曼架构相比,哈佛架构因为指令内存的读取和数据内存的读写分开,一定程度上可以保证指令的连续性,不会因为需要访问内存上的数据造成指令堵塞。
那么我们现在的计算机,到底是那种呢?其实是这两种架构的混合体。对于一台计算机的整体来说,我们可以认为是冯·诺依曼架构,计算机中的内存是统一的,并没有明确分为指令内存还是数据内存。
但是现代计算机中,相对于CPU的速度来说,从内存读取数据和写入数据都很慢的,因此CPU内部有另外一种速度更快的存储介质来存放数据和指令,我们称之为缓存(Cache)。打个比方,存储在内存中的数据就是我们书包里面的书,在缓存中的数据就是放在桌面上的书。我们要看一本书,需要把书从书包里面拿出来,放到桌子上摊开才能看。但是桌子的大小是有限的,我们只能在桌上摊开两三本书,更多的书我们只能放到书包里面。现代计算机中缓存通常有多层,每一层都比下一层快,但比下一层可以存放的数据少。如下图:
在内存(Main Memory RAM)之上,有三层CPU内部缓存(Cache)
而CPU内部,控制单元和运算单元直接访问的缓存,我们称之为一级缓存(Level 1 Cache,L1 Cache)。现代CPU的一级缓存,都是分为一级指令缓存、一级数据缓存两部分,这个可以通过CPU-Z检测软件看出来。所以事实上我们可以认为现代计算机,其真正的架构是哈佛架构。
Intel i9-9900K的CPU-Z检测结果从上图红框内容可以看到,Intel的i9-9900K,一共有8个核心,每个核心有32KB的一级数据缓存,32KB的一级指令缓存;每个核心有256KB的二级缓存,不再分为指令缓存还是数据缓存;整个CPU还有一层16MB的三级缓存。
这样的架构,称之为改进型哈佛架构。
前面提到的输入、输出设备有很多种具体的设备,最常见的输入设备有:
除此之外,还有很多其它专用的输入设备,例如麦克风、摄像头、扫描仪、视频采集卡、各种传感器等等。
比较常见的输出设备有:
除此之外,还有其它专用的输出设备,例如音箱、各种控制器。
可以看到,上面的输入/输出设备中,像网卡、硬盘都是同时作为输出设备和输入设备存在的,而其它即使看上去是纯粹的输入设备,绝大部分都会需要接受CPU输出的控制指令、工作参数输入;纯粹的输出设备,也需要向CPU报告设备信息(例如设备类型、型号,工作状态等),所以统称为IO设备(Input/Output Devices)或者输入输出设备。
除了上面提到的CPU、内存和IO设备外,一台完整的计算机,还需要:
题图为约翰·冯·诺依曼,来源:[4]