在做物联网树莓派的过程中,我们经常会直接和硬件打交道,而树莓派本身就是一台小电脑,这不可避免需要我们非常了解电脑的软硬件本质工作原理,才能更好的编写针对硬件的程序。在读书期间,对于课余时间我一直在思考电脑的工作原理,那些时候的理解,就算十年右后我也觉着很有用处。如今这些知识在脑海里不停与新的技术发展进行交织,才在脑海里形成了当下的知识网络体系,在和朋友进行技术交流的过程中,也会经常会用这些知识网络作为基础进行沟通,发现明白电脑是如何工作的,会对编写程序的人员有很大的帮助,因此有了现在写这篇文章的冲动
一.计算机的整体组成概述
了解电脑是怎么工作的,首先要了解,电脑是有哪些部分组成的。从大的方面,电脑是由软件和硬件组成的。
从硬件角度来讲,计算机组成原理课程上,我们知道电脑的几大组成部分:cpu,存储(寄存器,内存(rom,ram),硬盘,光盘,软盘,闪存等),适配器(显卡,网卡),输入设备(键盘,鼠标,耳麦),输出设备(显示器,耳机,音响),外设(如块设备 打印机等),主板,电源。这几大部分组成了电脑本身。
从软件角度来讲,电脑是操作系统,驱动程序,应用程序所组成。
软件和硬件的关系,其实就好像人的身体和人的灵魂之间的关系。当人睡觉了的时候,就好像电脑上面的程序停止工作了一样。当电脑没有安装操作系统的时候,就好像人没有灵魂一样,是无法工作的,这种还没有安装操作系统的电脑,我们通常称之为 裸机。只有在硬件上安装好操作系统之后,电脑整体才能启动运行,我们常说的安装操作 系统,就是说的这回事。
树莓派也是一台电脑,只是比电脑多个一个叫GUOP的引脚,这个引脚既有输入,也要输出,可以归到I/O部件。
二.计算机的详细概述
下面分开从硬件层面和软件层面来讲具体的组成部分
1.从硬件方面来讲,我们知道,计算机的组成分为 cpu,存储(寄存器,内存(rom,ram),硬盘,光盘,软盘,闪存等),适配器(显卡,网卡),I/O设备 输入设备(键盘,鼠标,耳麦),输出设备(显示器,耳机,音响),外设(如块设备 打印机等),主板,电源。那这几部分分别是干嘛的呢?
首先来讲,电源。我这里没有从cpu开始讲起,因为cpu与电源有着千丝万缕的联系。我们知道,我们国家的家庭用电标准是22v交流电。电脑作为一个人们直接接触的电子器件,如果电脑的工作环境电压太高,一旦漏电就会造成严重的安全隐患。因此我们的电脑直接运行的电压环境不能超过人体的安全电压(非持续接触36v,持续接触24v),而且电脑是工作在高频脉冲下的(如cpu现在pc在3.0Ghz以上),而且普通家庭供电是交流电(50-60hz),差了好几个数量级,那么就需要把这个家庭用电转换成电脑可以使用的安全用电。这里就需要用到一个电源的部件:电源适配器。如果你有笔记本电脑,可以看下电源适配器上面的参数:输入100v-240v-1.6A 50~60HZ。输出:19.5v-3.34A.这个电源适配器就会把交流电转换成直流电源,再经过主板等各个部件进行频率转换进行使用。
讲到这里,我想很多人会有个疑问:cpu有个主频,显卡有个主频,网卡也有个主频。而且还都不一样,那电源是直流电,为何不同部件又有不同的主频呢?这里就需要讲到一个叫晶振的部件。简单来讲,主板,显卡,网卡,cpu都要一个独自的晶振。晶振的作用就是把直流电,根据时间来进行转换成脉冲。脉冲是一段电流的持续。脉冲一般是周期性规律的。比如1ms一个脉冲,那么1s就有1000/1=1000个脉冲,一秒有几个脉冲,就说明主频是多少。反过来讲,1ghZ,就说明1s能发送1G=1000*1000*1000个脉冲。一个脉冲的电流持续长度也就等于1000000000分之一秒。
脉冲就好像脉搏,脉搏一次泵血供人体使用,而脉冲供的是电流。
那么脉冲这一股周期性的电流,是怎么驱动电脑运行的呢?这里就讲到cpu。
cpu我们知道是电脑的大脑。电脑的运行速度也是由cpu来决定的。但是为什么呢?这里不得不讲cpu的核心组成:加法器。我们都听说过,电脑识别的数据是二进制数据,要么0,要么1.之所以这样是因为电气属性导致的,就是电流要么有电流,要么没电流。在不同的硬件设计上,既可以把有电流设计为1,无电流为0,也可以把无电流设计为1,有电流设计为0.那这个有无电流,说白了就是一个脉冲(脉冲简单理解为一半有电流的时间,一半无电流的时间)。电脑所有的计算,软件的高级指令都会转变为汇编程序的指令,而汇编程序的指令最终都会转换为硬件指令集的指令(如复杂指令集的指令或者精简指令集中的指令),而这些硬件指令集中的指令最终会转换成加减乘除四种数学运算(为何说计算机是数学的一个分支),而加减乘除计算最终会转换成加运算和乘运算(逆运算)。而加法和乘法这两种运算最终才对应硬件cpu中乘法器和加法器,而乘法器也是由加法器进行组合而成的。所以电脑最终可以认为计算机中所有的运算就是加法器的加法运算。那加法运算我们大家都非常清楚,一个加数,一个被加数,一个运算符号,一个等号一个结果,就构成了加法运算。那cpu是怎么进行一次运算的呢?多久进行一次运算的呢?这个就是有脉冲决定的。当电流经过cpu中的晶振将电流转变成脉冲的时候,每一秒就会有主频个脉冲,而一个脉冲就会驱动cpu执行一次加法操作。cpu就是这样在脉冲电流的驱动下,一步步执行程序的。
前面说到,cpu加法器有加数,被加数和运算符,结果几个部分。那一次加法运算从哪里去取加数和别加数呢?我们很容易想到,肯定是从存储器中,因为数据都存在硬盘中的。是的,最终来源确实是从硬盘中读取的。但是我们刚说到,cpu的主频非常高,而硬盘,我们如果留意的话,机械硬盘是7200转,或者5200转,换算成数据,就是一秒读79-90mB字节(注意单位,一个字节(B)=8比特位(b)),而且我们计算机现在都是32位或者64位计算机,这个位数说的是一次可以执行的加数或者被加数的位数,以64位加法为例,那么就相当于cpu一秒可以执行的操作需要一个64位=64/8=8字节 被加数8字节 运算符 8字节 =24字节的数据。那么cpu相当于一秒需要的数据在1000*1000*1000*64个字节上,才能达到100%运行。而硬盘一秒就能提供100MB的数据,显然不够cpu用的,因此,在硬盘和cpu中间增加了一个临时存储数据的中间设备,这个设备价格比硬盘高。但是存取速度快。所以我们有了内存或者说手机中或者树莓派中的运行内存的部件。这个部件,有个特点,就是断电丢失,不会和硬盘一样,断电也能保存数据,内存是断电后数据就丢失了。这就是为什么我们需要保存文件操作,这个保存文件的本质,就是把内存中的文件,保存到硬盘(持久化存储设备)中去。
正是由于计算设备cpu与永久存储设备硬盘之间的主频之间的差异,才导致了内存的使用。有人会有疑问了,那为什么不直接使用内存做永久存储呢?答案是内存分成两部分,一部分是很贵的永久存储叫ram,另一部分是不怎么贵的断电丢失的存储部分,叫rom。主要考虑因素,就是经济问题,消费类的,就是要便宜。
但是实际上,内存的速度与cpu的运算速度也有差异,所以cpu内部又增加了一个缓存设备,来缓冲内存和cpu之间的主频速度差异。
类似的原理,显卡或者其他设备,都有类似的情形,这就是缓存的原理和本质。
我们经常说挖矿用显卡,也就是gpu,而不是cpu进行挖矿,为什么呢?因为显卡处理的是图像显示数据,这类数据有个特点,一大块一大块的。因此,显卡的设计上,一次读取的加数和被加数的位数很多,不是32位,也不是64位,因此说显卡计算能力更强,尤其在处理人工智能方面,另外显卡中的存储也很大,也是个优势。