计算机是如何工作的(最简单透彻的解释)
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.然后把这些值输入到加法器(能够运算数学加的单元,不是简单的电压相加),然后在另一个寄存器中给我答案。以下是一个简单机器码的实例:
显然,没有人会明白这些代码。所以我们得想出一个非天才的系统以让人们可读。这就是汇编语言(assembly language)。以下就是上面提到数字对应的代码:
有,
瞧,我们的第一个编程语言:)
现在,汇编语言对我们来说,要记住它和正确编码太难了。 所以人们又发明了编译器——能够将像C这样的高级语言转换成汇编语言(记住,这些汇编才真正控制比特的改变)。
所以,上述代码C语言的表述就是:
就像人们可以用文字而不是手势来写诗,我们认为,具有一定涵义的程序语言能够让人写出更好的程序。然后将程序转换成汇编,寄存器中的电压就会变化。这反过来会影响晶体管,从而影响电子的流动。
有了上述的基础,我们写了操作系统以最大限度地提高硬件使用率。因为当计算机从磁盘上获取数据时,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
这是一个很棒的问题!我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
相关文章推荐
- 计算机是如何工作的(最简单透彻的解释)
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- lab1:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 计算机是如何工作的?--通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 分析一个简单C程序的汇编代码,理解计算机是如何工作的
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(原创)
- 第一周:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- (作业1)将一个简单的C程序编译成汇编代码,讨论计算机是如何工作的进行
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 计算机是如何工作之简单的程序分析
- linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 云课堂 Linux内核分析 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的--20135334赵阳林
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的