买电脑的时候你一定会看到介绍里有各种配置,比如处理器(processor,CPU),内存(Memory,RAM),硬盘(Hard Drive),显卡(GPU,Graphics)等等。这些配置也就是电脑里最基本的组件,当然还会有各种各样的连接线把它们串起来。这里我们来简单讲讲课上你会碰到这几个最主要组件的:处理器(CPU),内存(Memory)和硬盘(Disk)。
所谓处理器(CPU),就是用来处理运算的组件,也是计算机的核心功能,不然为什么叫“计算机”呢?处理器(CPU)能进行的运算其实也只停留在我们小学的水平,无非是加减乘除及其变种。但有一点值得注意的是处理器(CPU)眼中的数字都是二进制,这也是为什么会说计算机是由“0和1组成的”。那处理器(CPU)是怎么进行运算的呢?他会借用一些叫做寄存器(Register)的东西来暂时储存要用来运算的数字,然后用算术逻辑单元对这些寄存器来运算,最后输出结果并把它也存到寄存器(Register)里。
举个例子,我们要计算1加2的结果。我们首先把1放到一个寄存器r1,把2放到寄存器r2,然后让算术逻辑单元对r1和r2进行“+”的运算,并且把计算的结果放到r1。如此操作之后,r1里的数字便会改为3,即运算的结果。一般来说,计算机能处理的运算大多是一元或者二元的,其计算结果一定会放入某个寄存器,之后再按需要进一步处理。
那么下一个问题,r1里的1和r2里的2是哪里来的呢?一种情况是处理器(CPU)帮你生成了它们,因为他们的值是个常数。那如果我们要进行运算的值是程序里的变量呢?这种情况下我们就要从某个存储组件中获取这些值,而这个用来存储的组件很可能就是计算机的主存(Main Memory),即主要的内存,若你看到RAM,其中的M便代表Memory。既然有主要的内存,那就一定有其他等级或形式的内存,但我们这里先不讲,一般来说,提到内存都是指的主存。
内存简单来说就是一个一个的小格子,每个格子可以储存一个字节(Byte)的数据,即8个比特(Bit),即8个0或1。每个格子都有唯一的一个地址(Address),合理地址一般来说从0开始到内存(Memory)大小减1。比如说我们在地址为1234567的格子储存了一个数字9,那么之后我们想要这个9就可以通过1234567这个数字来寻址然后提取9。若我的数据一个格子装不下怎么办?那就接着装到相邻的格子里,比如说我们的int如果是4个字节,我们想把它存在地址22334455上,那么22334455,22334456,22334457,22334458这四个格子便共同储存了这个int。但是这里还涉及端序,详细请看另一篇帖子(搜索Endian)。
那我们来完善一下上面的例子,加入我们的内存(Memory)。现在我们希望将我们的程序中的变量a和b加在一起,并且把结果储存到变量c。假说我们的a是15存在地址1000,b是40存在地址2000,c是90存在地址3000。首先我们需要把a和b的值提取出来,即从地址1000处提出一个值存到r1,然后再从地址2000处提取一个存到r2。接下来的事情和之前一样,算术逻辑单元会把r1和r2的值加起来得到55,然后存到某一个寄存器(Register),如r3。那我们如何将这计算结果赋值给变量c呢?和读取一样,我们只需要知道变量c到地址3000并将其提前存到某个寄存器(Register)中,如r4。此时处理器(CPU)便可将r3的值存入内存(Memory)中地址为r4的值的格子里,即将55赋值给了变量c。