第1章 什么是计算机
作为开始,我们先来说说计算机到底是一种什么样的电子设备,它是由哪些部分组成的,以及这些部分在计算机程序运行的过程中都起到了什么样的作用。
1.1 CPU
计算机这个名词你肯定都已经听过很多次了。而且,很多人在日常办公的过程中都离不开计算机。即使你平常用不到传统意义上的计算机(或者说电脑),那起码也应该用过智能手机,对吧?智能手机在中国的普及率已经相当高了。智能手机,甚至智能手表,也都是一种计算机,一种微型的计算机。在十几、二十年前,人们还把可以摆在桌面上、包含了独立的主机箱、显示器、键盘、鼠标的那种计算机称作微型计算机。但现如今,这种桌面电脑早已算不上微型的计算机了。
计算机最核心的部件其实只有三个,即:控制器、运算器和存储器。其中,控制器和运算器是中央处理器的主要组成部分。中央处理器也就是我们常说的CPU(Center Processing Unit)。CPU其实是一种集成电路。这种电路一般会由光刻机蚀刻到一块硅基晶圆之上,再经过切割分离成一个一个的CPU。一个CPU中可以包含数以十亿计的晶体管(可理解为电控开关)。
图 1-1 一块经蚀刻后的完整晶圆
自本世纪以来,CPU的性能提升方向已经从纵向转为了横向。这是什么意思呢?原来的CPU中只有一套可以互相配合并独立对外提供计算能力的集成电路。这样的一套电路被称为一个CPU核心(core)。只拥有一个CPU核心的CPU也被称为单核CPU。要想进一步提高单核CPU的性能,我们就必须再改进CPU核心中的电路结构,以及再增加其中的电路密度。这就是所谓的纵向,即:只聚焦于单核心之内的优化。
图 1-2 单核CPU内部的大致结构
图注:
CPU电路板:CPU芯片中的电路底板,用于承载CPU核心以及相关的器件。
到了本世纪初,单个CPU核心中的电路密度已经很接近物理上的极限了。所以,各家CPU厂商都开始陆续地研发并推出了拥有多个核心的CPU,也称多核CPU。顾名思义,一个多核CPU中会拥有多个CPU核心,或者说多套集成电路。这些CPU核心之间即保持着独立又可以相互协作,从而能够大大地增加多核CPU的性能。目前市场中发售的CPU内部大都拥有几个或十几个核心,有的最新的CPU甚至拥有几十个核心之多。
图 1-3 多核CPU内部的大致结构
每一个CPU核心都会有自己独立的控制器、运算器和寄存器。简单来说,控制器指挥着运算器和寄存器,并以此来实现CPU指令的执行,以及数据的读出和写入。运算器主要用于各种算术和逻辑运算操作,比如算术中的加、减、乘、除,逻辑上的与、或、非、异或,以及移位、比较、传送等。寄存器的作用是,在进行上述的运算操作期间,或者更通俗地讲,在CPU运行计算机程序的过程中,临时存储那些马上就要用到的指令和数据。这包括CPU指令、中间运算结果、程序运行状态,以及相关的内存地址,等等。控制器和运算器都会频繁地用到寄存器,甚至会独占一些寄存器,所以它们之间的联系是相当紧密的。
剖析控制器和运算器的运作原理都需要很多计算机专业的知识,因此我们对它们的介绍就暂时到此为止。我们下面重点来说说计算机核心部件中的存储器。
1.2 存储器
存储器其实是一个通用的概念。只要能够把数据写进来、读出去,还能在一定条件下存得住数据的器件都可以被称为存储器。像已经基本绝迹的软盘,以及我们现在常见的硬盘、U盘、光盘刻录机都是存储器。更确切地说,它们都属于外存储器。
图 1-4 各种各样的存储器
这里有一个概念需要特别说明一下。宽泛地讲,指令也可以算作是一种数据,一种可以驱使CPU执行运算任务的特殊数据。一条CPU指令就代表着CPU可以执行的某项操作,其中会包含操作的代码(或者说代号)和涉及的操作数(也可能是操作数在存储器中的存储地址,或者说存放位置)。这样的操作可以是,对一个数进行正负号的反转、对两个数进行相加,等等。因此,我们在后面有时也会用“数据”这个词来统称指令和数据本身。不过不要忘了,“数据”原本指的是,静静地躺在存储器中的、具有一定的结构(或者说格式)的一般性内容。
我们再说回存储器。作为计算机核心部件的存储器只有三种,即:寄存器、高速缓存和内存储器(也就是我们常说的内存)。我们在前面已经讲过了寄存器的用途。它是CPU核心里面的一种器件。虽然高速缓存也用于暂存指令和数据,但它暂存的往往是近期会用到的数据,而不是马上就要用的数据。实际上,高速缓存是CPU核心(包括寄存器)与内存之间的桥梁。它的数据存储容量要比寄存器大得多,但却比内存小得多。而它的数据存取速度要比内存快得多,但却比寄存器慢得多。
图 1-5 寄存器、高速缓存与内存储器的特征
由此,我们可以说,高速缓存的作用就是为CPU进行数据的缓冲。一旦把近期很可能会用到的数据先拷贝进高速缓存,(当CPU真正要使用它们的时候)就能够以快得多的速度进行读出了。正因为如此,高速缓存所处的位置在寄存器与内存之间。更确切地说,高速缓存通常会被封装在CPU的电路板之上,但会被隔离在CPU核心之外。
图 1-6 寄存器、高速缓存与内存储器的位置
你可能仍然有一个疑惑,为什么不能让CPU核心直接去访问内存呢?或者说,为什么不让CPU核心直接存取内存中的数据呢?两点之间直线最短啊,为什么还要绕到高速缓存那里呢?
要知道,很早以前的CPU里是没有高速缓存的。那是因为,那时候的CPU的运转速度与内存的运转速度相差并不是特别大。但是现在不同了,随着不断的改进,CPU的运转速度已经提高太多了。它在效率方面已经远远地甩开了内存。如果依然按照之间的连接方法,CPU就会严重地受到内存的拖累,从而根本无法产生应有的功效。与内存相比,高速缓存的容量很小,但是速度很快,很适合实现重要数据的临时存储和就近访问。它可以有效地弥补CPU与内存之间的鸿沟,对CPU来说越来越重要,所以最终被集成在了CPU之内。
强调一下,寄存器基本上只为CPU核心的当前运算任务提供数据存储支持,而高速缓存主要是为了解决(CPU与内存之间的)效率差的。另外,内存主要负责装载需要运行的计算机程序以及相关的数据。它同样是计算机正常运行所必需的器件。
而且还要注意,这三种存储器都无法持久地存储数据。其中的数据都是断电即丢失的。而且,由于它们的容量都比较小,所以其中只会暂存对计算机的正常运行来说最重要的那部分数据。而其余的更多的数据,都会被存储在外存储器上。
从原理上讲,外存储器是可以持久存储数据的。一旦数据被存储在其中,就不会因没有电力供应而丢失。我们平常使用的各种计算机,包括桌面电脑、笔记本电脑、智能手机以及智能手表都一定会拥有硬盘这类外存储器。我们自己编写的文档、从网络中下载的音乐,以及众多的计算机软件都会被储存到硬盘之上。所以说,硬盘是计算机本身最大、最基础的资料库。当我们要继续编写文档、播放音乐、运行软件的时候,计算机一定会先从这个资料库中读出相应的数据。
总之,这些存储器都各有各的特点,各有各的作用。
1.3 数据的流动
请看下面这幅图。它展现了数据在计算机的各个存储器之间的流动。
图 1-7 数据在各个存储器之间的流动
我们刚才提到,当计算机需要运行软件(即一系列程序的组合)或使用数据的时候,会先从硬盘中读出它们。读到哪里呢?计算机会先把这些相关的数据(包括指令和数据本身)读出到内存当中。换句话说,它会把将要用到的数据从硬盘复制到内存。
请注意,所谓的数据在各个存储器之间的流动,是通过复制来实现的,而不是移动。移动数据意味着,数据会出现在新的位置上,但不会再存在于原先的位置上。而复制数据是指,数据会出现在新的位置上,且仍会在原先的位置上保留。对于复制这个操作,我们可以说,处在新位置上的数据是处在旧位置上的数据的副本。
我们接着讲正题。只有处在内存当中的程序(即一系列指令的组合)和数据才有可能被CPU拿去使用。对于它们来说,处于内存当中是为CPU所用的必要条件。简单来说,当CPU准备运行程序的时候,会把当前要执行的指令以及邻近的一些指令从内存复制到高速缓存当中。如果在执行指令的过程中,CPU发现需要用到某些数据,那么它还会把那些数据以及相邻的一些数据也复制到高速缓存里。
这里存在着两个基本的假设:
如果内存的某个位置上的数据刚刚被CPU用到了,那么它很可能会在近期被再次使用;
如果一个内存位置上的数据刚刚被CPU用过了,那么在其邻近位置上的数据很可能也会在近期被使用。
高速缓存到底会缓冲哪些数据?基于的就是上述假设。与此同时,高速缓存在缓冲新的数据的时候,如果发现其容量不够了,那么它就会先删除掉其中那些在最近很少被用到的数据。
让我们说得更简单、宏观一些。CPU将要用到的指令和数据会一步一步地从离它更远且速度更慢的存储器中被复制过来。复制到哪里呢?复制到离CPU更近但容量更小的存储器里。正因为离CPU越近的存储器容量越小,所以越到后面其缓冲的数据量也就越小。到了寄存器这一层,它就只能暂存那些CPU马上就要用到的指令和数据了。但由于它的存取速度相当快,因此CPU立刻就能拿到数据并加以使用。
另一个方面,如果CPU需要将新数据(比如运算结果等)写入存储器,或者需要对现有的数据进行更新,那么这些数据的流动方向就会与读出它们时正好相反,即:从寄存器,到高速缓存,再到内存,甚至到硬盘。不过,与数据的读出不同的是,数据的写入所面临的实际情况要复杂一些。这会涉及到数据一致性、数据缓冲策略、程序性能等诸多问题。
综上所述,经过一级一级的准备、一层一层的缓冲,CPU执行程序的速度可以得到极大的优化。这些存储器在这里都起到了非常关键的作用。
1.4 存储器的层次
计算机中的众多存储器共同组成了一种层级结构。如下图所示。
图 1-8 众多存储器组成的层次结构
图注:
单位造价:每存储一个单位(如一个字节)的数据所需要的器件制造成本。
本地:可以理解为当前的计算机。
远程:可以理解为除当前计算机以外的其他计算机。这是一个比较笼统的词。处在当前计算机之外的、可以被当前计算机访问到的空间都可以算是“远程的”。不论这个访问的途径是家用网络、专有线路、公共互联网还是通讯卫星,都是如此。
计算机主板:计算机中用于承载其核心部件(如CPU芯片和内存)、周边部件(如硬盘、显卡、声卡等)以及相关器件的电路底板。
图中共有7个层级,包含了目前主流的计算机涉及到的众多存储器。层级越低的存储器容量越小,速度越快,其集成度越高(如寄存器会被集成到CPU核心里,它距离CPU核心中的控制器和运算器最近)。也正因为如此,层级越低的存储器的单位造价越高。
1.5 小结
好了,我们现在来总结一下。
我们在本章简要地介绍了一下计算机的各个组成部分及其含义和用途。计算机最核心的部件有:控制器、运算器和存储器。其中,控制器和运算器是被集成在CPU核心当中的。除此之外,CPU核心中还包含了一种存储器——寄存器。
现如今,拥有多个CPU核心的CPU(即多核CPU)已经很普遍了。在这样的CPU当中,核心之间即独立又协同。这里的独立指的是,每一个CPU核心都拥有自己的控制器、运算器和寄存器。而协同的意思是,这些CPU核心可以相互配合、共同对外提供强大的计算能力。
在上述器件之中,存储器对于普通的软件开发者和使用者来说是最直观和有用的。顾名思义,能够存储数据的器件就叫做存储器。此外,存储器通常还会提供数据读出和写入的功能。
寄存器处于CPU核心之内,高速缓存处于CPU核心之外的CPU电路板之上,而内存储器(即内存)就属于CPU之外的器件了。但由于CPU运行程序、使用数据都必须通过内存,所有它对于计算机来说也是不可或缺的。像硬盘这样的外存储器虽然不属于计算机的核心部件,不过我们在日常肯定会需要这样的大容量资料库,因此计算机中也不能少了它们。
最后,计算机正常运行所需的程序和数据,以及我们需要用到的各种软件和文件,都会被储存在某个存储器当中。在真正使用它们之前,计算机都会先把它们放到内存里,并在适当的时候将它们复制到高速缓存和寄存器之中。另一方面,一旦有新数据要存储,或者要更新现有的数据,计算机就会把它们从寄存器逐步地复制到高速缓存、内存甚至硬盘之上。通过说明计算机对各种存储器的利用,我们就能够从侧面了解到计算机的基本运转方式。
在介绍了计算机自身的各种器件(即硬件)之后,我们会从下一章开始涉及那些依托于计算机硬件的数据和软件。
下一篇
活出通透!
有话要说...