您的位置:首页 > 理论基础

计算机是如何工作的(最简单透彻的解释)

2013-09-21 11:28 274 查看
问题:计算机是如何工作的,电流如何转换成可执行的逻辑(软件),以及为什么?

这是一个很棒的问题!我11岁时在PC上玩FIFA 99曾经问了自己这个问题,于是我踏上了六年的大学之旅为了能够找到这个问题的答案。

它真的很复杂,让我思考了一下(其实很多)。我们先从底部开始吧:

物质是由原子组成的(我们能够找到更小的单元,但是对于这个问题够了)

原子中有电子,这些流动的电子被定义为电流。

为了能够使用这些电子,我们制造晶体管可以按需随时存储/释放他们。他们被存储为1 (5伏) 和0 (0伏)。

8个晶体管就能够表示一个8位二进制数。所以要将8 bit表示数字3则为:0000 0011. 这是怎样在硬件上实现的呢?把8个晶体管并列排列(称为寄存器和存储器单元)。前六个晶体管保持0V,后两个保持为5V。

现在,将这些寄存器和存储单元组合起来就成了CPU + RAM。

为了让CPU变得容易计算,我们发明了机器码。这些语言能够在CPU上运行。我说的“运行”是什么意思呢?它意味着,不停地改变电压。如果我想要计算 2 + 3, 计算机就会在一个寄存器中存储2个1,另一个存储3个1.然后把这些值输入到加法器(能够运算数学加的单元,不是简单的电压相加),然后在另一个寄存器中给我答案。以下是一个简单机器码的实例:

80 02 F3
80 03 F4
88 F3 F4 F5

显然,没有人会明白这些代码。所以我们得想出一个非天才的系统以让人们可读。这就是汇编语言(assembly language)。以下就是上面提到数字对应的代码:

MOVI 2, REG A
MOVI 3, REG B
ADD REG A, REG B, REG C (将A加B并存储到C中)

有,

MOVI = 80
REG A = F3
REG B = F4
REG C = F5
ADD = 88

瞧,我们的第一个编程语言:)

现在,汇编语言对我们来说,要记住它和正确编码太难了。 所以人们又发明了编译器——能够将像C这样的高级语言转换成汇编语言(记住,这些汇编才真正控制比特的改变)。

所以,上述代码C语言的表述就是:

{
int a = 2;
int b = 3;
c = a + b;
}//(代码稍有问题哦~注意到了吗^.^)


就像人们可以用文字而不是手势来写诗,我们认为,具有一定涵义的程序语言能够让人写出更好的程序。然后将程序转换成汇编,寄存器中的电压就会变化。这反过来会影响晶体管,从而影响电子的流动。

有了上述的基础,我们写了操作系统以最大限度地提高硬件使用率。因为当计算机从磁盘上获取数据时,CPU是闲置的。

所有从键盘输入、鼠标移动、桌面窗口、声音都是一个个的用高级语言写的程序,在操作系统上运行。

在操作系统上,我们开发了一个称为TCP/IP的网络协议栈。该协议栈提供了一个标准化的方法用来进行计算机通信。

上述一旦工作,我们设法用电缆将计算机相互连通,然后创建WWW和http。这让人们可以从不同的网络相互进行交流。需要注意的是http是一种协议。服务器和客户端程序除了遵循http外还要遵循内部协议。

让我们从另外的角度看看,现在从软件到电子...

当你在浏览器中键入Google,按回车键时,你的浏览器(客户端)就会向Google(服务器)发送一个http请求。

在你的电脑上,浏览器的程序时用C/C++(假设)写的。

将它编译成汇编语言(实际上浏览器已经编译好了,你只需要向浏览器中输入字符就行)

操作系统(Windows / Linux等)和设备驱动程序也已经编译好,并且在你的计算机上运行。

当CPU流水线轮到浏览器时,就会运行它的汇编代码。

这些汇编代码就会改变寄存器和存储器中的比特位。

寄存器和存储器由晶体管组成。

晶体管控制电子的流动,于是形成了电流。

我已经过度地简化了问题的过程,但在本质上没什么区别。当然我只提到了不到1%的细节,另外的99%(或许更多)需要大家慢慢根据自己的专业去理解。

原文链接:https://www.quora.com/Computer-Science/How-do-computers-work-the-way-they-do%E2%80%A6-when-does-electricity-become-executable-logic-turn-into-software-And-how
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐