2.计算机基础

1 2.1 前序

以前我一直不懂,计算机不是用来计算公式的吗,比如计算Π有多少位,为什么它还能用来玩游戏、看电影、听音乐呢?

即使是开始学习编程了,这个问题在很长时间里,我也一直没有寻找到答案、并且反而更加疑惑了。

众所周知的事实,计算机的核心是CPU,CPU只能进行二进制数值的运算。

那么CPU为什么只靠高速的计算二进制数值,就能组成我所能看到的、如此强大而丰富的计算机呢?

也许是我愚钝,这个答案是我深入学习编程一两年后、才渐渐找到答案的,在此之前,我并不知道原因。

2 2.2 计算机核心概念

《计算机组成原理》是一门计算机专业的通识课程,大概在大一、大二的时候会进行学习。

如果你是以考试得分为目的,那么直接购买该书籍学习为最佳,本文不会去讲的那么细、甚至描述的都不会那么的准确,因为我的目的仅仅是想让读者可以快速的对计算机的构成有清晰的整体认知。

从直觉上来讲,大众会认为我们所使用的个人电脑便是计算机的代词,但实际上并不准确。

我们所使用的个人电脑仅仅只是计算机的子集,只不过很多其它类型的计算机,对于非专业人士来说了解的比较少而已。

比如没有屏幕的服务器、你所使用的手机、各种家电设备、汽车等等,均可以被称为计算机。

其中各种家电设备、汽车,又被称为嵌入式设备,编程领域因此也有了嵌入式编程这一岗位。

计算机实际上正如其名,指的是一切可以进行“计算”、“数据处理”、“信息存储”的设备。

从这里我们可以总结出,计算机本质上是由三个关键字组成的:计算、数据、信息。

其中数据涵盖一切、信息只是它的一个子集,一般指的是有实际意义的数据。

所以计算机本质上可以用两个关键字涵盖:计算、数据。

这两个字非常关键,因为这也是我们后续编程的核心。

3 2.3 CPU

其中计算,对应的核心部件一般是CPU,是Center Processing Unit的简写,即中央处理器的意思:

image.png

CPU可以说是21世纪最伟大的发明之一,它是全人类最顶尖的科技缩影,而它现在就存放在你的手机、电脑的内部。

“越是伟大的发明,便往往越是频繁的出现在人们的生活之中,即使你可能都未曾察觉。”

CPU的内部构造非常复杂,我并不打算去过多的讲解它的内部构成,并且也相信即使我讲了,你也未必有那个耐心去看,因为那对我们学习编程来说,用处非常有限。

在我上小学、中学时,班里常会有同学购买计算器,而CPU则可以看作是一个无情而又极其高效的计算器。

只不过我们所购买的那个计算器看起来可能会更加高级一点,因为它既可以计算十进制、还可以计算十六进制,既可以计算加减法、还可以计算乘除法、乃至一些数学公式。

而CPU则要单纯、甚至可以说“简陋”的多,因为它只能计算二进制,并且大多数只计算加法、以及执行逻辑运算:与(AND)、或(OR)、非(NOT)。

我们最常见的是十进制,也就是逢十进一,其它进制同样如此,二进制便是逢二进一,编程中常用的还有八进制、十六进制也是同理,其中十六进制是通过A、B、C、D、E、F这五个字母来代表10、11、12、13、14、15这六个数字的。

至于减法、乘法、除法,则是由上面这四个基本操作所组成的。

这涉及到一些与二进制有关的数学原理,比如减法,便是取负数补码与被减数相加实现。

举个例子,现在需要计算7-3的结果,那么先将其转换为二进制:

7:0111

3:0011

然后获取3的补码,规则是所有位取反后加一:1100+1=1101

因此-3的二进制形式便是1101,此时让两数相加得到结果:10100。

由于只有4位(实际计算机表示数值是8位,但效果一样),超出的数值将被直接舍弃,因此得到结果0100,转换为十进制也就是4。

至此我们就完成了用加法实现减法运算。

乘法与除法也是同理,通过一些数学原理都可以换算为基础运算操作交给CPU进行计算。

所以只要CPU算的足够快,那么我们就能用CPU干很多事情,而衡量CPU计算速度的一个方式就是查看CPU的频率。

查看方法在不同系统上有不同的分别,这里默认你使用的和我一样都是Windows系统,那么可以打开任务管理器查看。

在windows系统上,你可以按快捷键Ctrl+Shift+ESC快速打开Windows系统上的任务管理器。

进入任务管理器后,按照下图步骤即可看到查看到CPU的计算速度:

image.png

比如我这里的速度是2.22GHz,代表该CPU每秒可以完成2.22*10亿个计算周期,而一个加法操作,一般占用一个CPU的周期。

由此可见,CPU的计算能力是非常强大的,它可以在很短的时间内完成巨量的数据计算,并且这还只是普通的办公电脑,如果是那种专门用来做科学计算的计算机,只会更加强大。

4 2.4 GPU

事实上,能够进行计算的并不只有CPU、GPU同样也能进行计算,只不过两者的用途不太一样。

GPU是Graphics Processing Unit的首字母简写,意思是图形处理器。

两者主要的区别在于:

  • CPU:更兼顾通用性,核心数一般较少、但每个核心都很强,适合处理复杂的运算逻辑。
  • GPU:更兼顾并行性,它通常内部包含数千上万个能力较弱的核心,可以同时执行大量的并行计算任务。

这里提到了核心,你可以将其理解为它是最小的物理计算单元,一个核心同一时间只能计算一个任务,所以核心数越多,那么其同时能够计算的数量就越多,性能一般就越好。

比如我电脑上CPU的核心便是14个:

image.png

这意味着它能在同一时间计算十四个任务。

至于GPU,由于我的电脑只有一个英特尔显卡,并不支持直接查看核心数,所以这里就不举例了,但依旧可以从网上随意找到的一张照片一窥究竟:

image.png

可以看到,随便一张家用GPU,其核心数量就来到了2304个,这意味着它同一时间能够处理2304个,相比之下GPU在并行计算领域下,要比CPU强大太多了。

并行,其含义便是多个任务同时执行,与之相对应的是串行,这意味着多个任务需要排队挨个执行。

所以在科学计算、图形处理这些需要大量并行运算的领域,更需要的便是GPU、而并非CPU,比如当下很火的ChatGPT,也是通过GPU进行计算推理的。

5 2.5 内存

前面提到,计算机的核心就是两个东西:计算、数据。

前面CPU、GPU部件的作用便是计算,而这里要聊到的内存,便是与数据有关了。

正如当我们计算一个复杂的数学方程式时,往往需要经过一步一步的推理、大量的计算过程,才能得到最终的计算结果,而这些计算过程我们一般是存储到草稿纸上的。

而对于计算机来说,这些计算过程产生的数据一般便是存储到内存中的。

注意,这里说的内存并不是你电脑上在资源管理器中所看到的C盘、D盘,一般你是看不到内存信息的。

想要查看内存信息,你需要进入到本文前面提到过的任务管理器中:

image.png

比如我的电脑便是32G的内存,目前已经用了近半,这些用掉的内存里面存储的数据,便是我当前电脑上所有启动的应用程序的数据。

由于内存是由CPU实时计算产生的,所以这里的内存用量也不会稳定不变,而是会上下波动。

注意这里的单位,1GB=1024MB,1MB=1024KB,1KB=1024B,1B=8bit,1bit则是一位,只能存储数字0或者1。

之所以用1024为换算单位,是因为计算机的底层是二进制,而210=1024。

通俗的来说,内存越大,便代表你的电脑可以同时运行的程序就越多,就越不容易卡。

但同样的,它也有缺点,比如你会发现,只要你一重启电脑,之前电脑上所有开着的程序便都关闭了,这是因为内存并不能持久保存数据,只要它一断电、所有数据就会立马被丢失。

因此编程时养成良好的Ctrl+S保存习惯是非常必要的,其本质便是将原本存储到内存中的数据写入到硬盘中储存起来,这样即使突然电脑断电关机、软件崩溃了,数据也不会丢失。

6 2.6 缓存

上边讲到,CPU产生的数据会实时写入内存当中,实际上并不准确,因为CPU的计算速度太快,内存的写入、读取速度是跟不上的。

所以在CPU与内存之间,实际上还有一层叫做缓存的东西,它已经被嵌入到CPU的内部了:

image.png

缓存的特点便是其读写数据的速度非常快,比内存还快,因为它在物理距离上就离CPU更近,它是直接嵌入CPU内部的,而内存一般是安装在了计算机的主板上。

但其缺点便是造价高昂,所以可以看到其能存储的内容并不多,只有几十M,其中L1的速度大于L2的速度大于L3的速度,只有当这三层缓存放不下、或者其它原因,数据才会从缓存写入到内存中。

7 2.7 硬盘

硬盘我们就比较熟悉了,就是我们经常看到的C盘、D盘之类的,它的特点便是非常大,一般比内存要大的多:

image.png

相比于前面提到的内存与缓存,硬盘的优点是数据会持久保存:比如C盘中的文件并不会因为你重启电脑而消失。

但其缺点也非常明显,那就是慢,当然,这是相较于内存与缓存来说,如果你拿硬盘和以前使用的磁盘做对比,就会发现硬盘实际上也是非常快的。

而系统为了补足内存不够、硬盘缓慢这些缺点,也会出现缓存操作:

image.png

实际上操作系统非常精明,它会自动将并不常用的内存数据缓存到硬盘上,从而释放出更多的内存让我们可以使用。

但这同样也意味着,如果你在你的电脑上开启大量的程序、导致内存占满,那么windows系统就会耗费大量的时间用来进行内存与磁盘之间的数据交换,以此保证你始终能打开新的程序、而不至于因为内存不足而出现打不开程序的情况。

但其带来的后果便是,你的电脑会变的越来越卡,这便是硬盘读写数据速度慢、与内存之间大量交换数据所导致的。

8 2.8 显示屏

对于民用型电脑来说,显示屏是必不可少的,可它到底是怎么显示出来图像的呢?毕竟CPU、GPU仅仅只是在做大量的数学运算而已,怎么就能显示出来图像!

要解决这个问题,我们就需要了解一些图形学的基本原理。

想来大家是知道三原色的,也就是通过调配红色、绿色、蓝色的不同比例,就能呈现出所有常见的颜色。

image.png

由此就有了这么一个规定:将三原色由无到有,按含量分为256份(即28,0-255),通过数字来配比三原色在一个像素点中的含量。

所以图片中的一个像素我们就能通过三原素的数字配比来表示,比如纯红色便是这样一个元组:(255,0,0),从左到右分别代表三原素的含量。

如果用十六进制表示,便是0xFF0000,其中0x是通用的表示方法,代表其后跟着的是一个十六进制的数字。其后每两位代表一个原素的数值含量。

此时你会发现,我们居然可以通过数字来表示颜色了!

而显示器便可以通过读取这些数字,进而将其映射为相应的颜色,最后便可以呈现出我们所能看到的丰富多彩的屏幕,是不是非常的巧妙!

9 2.9 键盘

键盘对于电脑来说也是不可或缺的,毕竟我们需要它来进行输入文本。

可它怎么就能输入文本呢?

这实际上并不是键盘的功劳,而是系统、以及软件的功能。

比如Windows系统,它可以接收到键盘上的每个按下的键,并将其映射为一个消息,发送给当前电脑上正在运行的程序。

而我们所安装的输入法软件,便能自动监听、读取这个信号,同时将其转换为字符输入到软件中,最终才能显示出来。

至于中间转换的这一过程,便又涉及到了编码的问题,这个我会在后面的章节详细提及。

而这里所提到的消息,同样也会在后续的Windows系统编程中会有清晰的感知。

其中Windows系统提供的是一个叫做IME的组件来提供输入服务,如果我们想要自己写一个Windows系统版本输入法软件,那么就需要对接WIndows系统的IME组件来实现。

10 2.10 音响

有了前面显示器的例子,这里音响的原理也就不难推理出来了。

简单来说就是,声音可以通过工具转换为模拟电信号,然后再通过转换器将这些信号进行采样、量化等操作,最后转换为数字文件存储到电脑上,比如常见的mp3。

而音响便能读取这些数据、并将其还原为声音进行播放。

至于其中原理,我相信你并不会太感兴趣,因为它已经成为了一些纯粹的数学公式、原理以及现有工具的应用,与编程本身其实已经关系不太大了。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux