计算机是如何工作的?

Posted by Kylen on 2019-07-26

前言

本来只想写一篇JS单线程的设计以及这种设计产生的现象问题和解决方案。但接触的概念多了,发现很多以前没有想过的问题、或者想过却因为不在专业领域范围内就忽视的问题,都很值得一谈究竟,所以单独整理这篇,用来记录和加深我对计算机的理解。

物质结构和电

没有电就自然就没有电器,计算机要有电才能用(废话)。所以我们先要弄清楚电是什么,或者电能是一种什么样的能量。下面的内容是一些物理和化学的一些常识,上过初中应该都能理解。

构成物质的基本单位是原子,原子有电子和原子核组成,原子核由质子和中子组成,电子带负电、质子带正电、中子不带电。(当然谁正谁负是人规定的),电子脱离原子会变成自由电子。

电子速度很慢,但是接通电源,电场瞬间建立(光速),电流的速度是电场建立的速度。这一点就像你用自来水,打开水龙头你就有水用,不是自来水厂的水瞬间到了你面前,而是水管子里本来就有水。用电也是一样,电线中本来就有电子。和自来水不一样的是,电器不消耗电子只是消耗电子动能,电子更像一个能量的搬运工;而且电路是回路,因为不消耗电子,还得有条电线让电子会到发电厂。类比电池,电路是一个回路。

电路是一个回路,电子流动也是一个回路,电子不会变少。用电不会消耗电子,电子运动就有能量,电器消耗的是能量,比如灯泡的灯丝内部原子核排列更紧密,电子经过消耗的动能转换成了灯泡发光的能量。

直流电电子一个方向移动,交流电电子来回移动,就像洗衣机一会儿正着转,一会儿反着转。

所以电能一般就是让电子运动,然后利用电子的动能。电子在钨丝中疯狂运动,钨丝温度就升高了。

半导体和二极管

半导体可以制作二极管。原理:给半导体材料里掺入某种元素后,半导体会这样:我讨厌电子;而给半导体掺入另外一种元素后,半导体会这样:我喜欢电子。我们把一个讨厌电子的半导体和一个喜欢电子的半导体放在一起的时候,就可以形成一个二极管了。当二极管外部有电流通过的时候,如果外部电流内的电子的运动方向顺从了其内部的这种电子的趋向,则这个二极管可以视为接通的导线;而如果外部电流的电子运动方向和二极管内部的电子方向相反的时候,外部电流就无法通过这个二极管

二极管已经可以表示两种状态,正好对应计算机中的0和1。

计算机和晶体管

晶体管指半导体器件,二极管也是晶体管的一种。8个晶体管就能够表示一个8位二进制数。比如数字3二进制数为:0000 0011。 这是怎样在硬件上实现的呢?想象一下8个晶体管并列排列,分别加不同的电压来保持0和1的状态。各种运算对应各种门电路,运算的时候不断改变电压。对于电路一窍不通,也就不想深入了。

这时候计算机更像一个计算器。不过能表示数字就能表示所有信息,能计算就有无限可能。

再回到现在计算机上,我们的电脑是由一堆硬件组成的,包括CPU、RAM、显卡、主板、硬盘、键鼠等等。CPU做为中央处理器,有寄存器和一堆的运算单元。主要就是用来进行计算的,现代CPU上动不动就是几亿的晶体管。

computer-work-001

电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。

软件和程序

CPU要工作,必须借助于特定的指令,能够直接识别的也就是机器语言。机器语言对人不友好;汇编语言对机器语言进行了描述,对人依旧不友好;高级语言从人的角度出发,真正执行需要编译成机器码。

以浏览器运行为例子:

  • 首先操作系统本身就是个软件程序,电脑开机就会运行
  • 浏览器当然是高级语言写的,一般是C/C++,打开就运行,都是已经编译过的
  • CPU在不断的处理各种程序发来的指令,当然若只有一个CPU,那所有人都得排队,不过幸好CPU很快,超级快的那种,所以你不会觉得慢
  • 浏览器输入内容点击搜索CPU很快就临幸了浏览器,当然到CPU这里是已经是机器码了
  • 寄存器和存储器状态改变,也就是晶体管状态改变