计算机如何工作?


40

我多年来一直是计算机迷。我可以使用多种语言进行编程,甚至可以构建它们。前几天我和一个伙伴坐在一起,问一台计算机实际上是如何取电并用它来做点什么的,而我们只是想不通,谷歌也帮不上什么忙。

我的意思是,计算机如何持续吸收电流并将其变成1和0,然后实际上对那些1和0进行处理,例如打开灯15秒钟?

我了解(AND,OR,NOR,NAND,NOT)以及有关二极管电阻器晶体管的一些知识,但是我认为这是用真正的外行术语解释的理想场所!

有人能指出我正确的方向还是给我一个简短的解释?


8
您还可能会问“细菌如何起作用?”。这是一个令人难以置信的广泛问题。我建议您看一个简单的处理器体系结构(例如MIPS;在课堂上我们曾教过这一点),并从那里向上或向下进行工作。您在此过程中面临的问题可能比此问题更适合Stack Exchange。
拉斐尔

3
我知道细菌是如何工作的,它的计算机我也不会笑
Christian

14
精灵。小小的魔法精灵。
JeffE


1
了解计算机如何在最低水平上正常工作的最好方法是在fpga上设计简单的微控制器,或者从Nand Gates手动设计。我已经在“计算机体系结构”课程中做到了,这确实令人大开眼界。如果将所有内容保持在最低限度,并设计一个具有加法,位操作和条件跳转的4位控制器,这甚至都不难。或更简单的是实现简化的图灵机的硬件。嗯,这个罐子给了我一个主意:了解图灵机的工作原理。它会给您一个很好的见解。
vsz

Answers:


47

这是一个广泛的问题,没有一个简单的答案。从电子沿着铜线飞跃到在Firefox中创建网站还有很长的路要走。我将尝试从下到上为您提供概述,并向您指出要查找的正确内容。

编码编号

基本动机是像在做算术一样¹计算事物。首先要看的是如何表示数字。有很多方法,使用十进制或三进制,我认为甚至是八进制,但最终,二进制胜出了。现在我们知道我们必须构建处理两个值的设备-我们将它们称为和。01

请注意,还有多种将数字编码为二进制的方法。组装第一个处理器后,您就会意识到以某些方式做事的优势。流行的例子是2补码IEEE浮点数。对于初学者,请将自己限制为简单的自然数。

盖茨

假设我们使用二进制编码。想一想您在小学时如何学习加法,并写下二进制数字。事实证明,布尔代数的构建基块已经为您服务;使用逻辑门构建基本加法器(和其他算术函数)很容易。

如何建立这种门不在计算机科学的范围之内。电子工程使用例如晶体管提供了多种解决方案。有关此问题,请前往电气工程堆栈交换

时钟和状态

并非所有的门都具有同样快的速度,并且并非计算的所有部分都具有相同数量的门。因此,我们必须格外小心,以确保各个操作都不会相互超越。实践证明,使用全局时钟很有用;给定的门网络的结果是循环结束时输出线的状态(当门级联至其各自的最终状态时,其状态可能会发生巨大变化)。

这意味着可能必须存储一个周期的结果,直到下一个周期开始为止,例如,如果您连接了回路。您可以使用许多基本元素来产生不同的效果,所有这些基本元素都是由门构成的。有些被称为触发器。它们也用于构建寄存器,这些元素存储所需数量的时钟周期的数字。

架构和命令

现在您有无数的设计选择。您的处理器提供哪些算术运算?您的命令是什么样的?看看与其他设计相比,早期形式更容易的MIPS架构可能具有教育意义。看一下计划

MIPS单级
原始来自http://ube.ege.edu.tr/~erciyes/CENG311

本质上,它是在获取和分解命令,一组寄存器,一个ALU和控件。命令对在哪个操作数上执行哪个ALU操作进行编码(通过它们所保存的寄存器的编号),如何操作程序计数器²或要从内存中加载/存储的寄存器³。

进一步考虑

到现在为止,假设您已经弄清楚了如何构建内存以及提供命令的方法,那么您将拥有现代意义上的工作处理器。在走向现代机器的过程中,必须做出许多选择。这里有一些:

备择方案

上面的内容在很大程度上受历史的影响。在拥有不同思想的不同世界中,计算机的工作方式可能有所不同。实际上,有许多计算模型,其中一些模型具有许多优点,可以使它们在许多情况下作为对真实机器的抽象有用。还尝试模仿大脑的工作方式,即启用神经计算,或更广泛地利用自然界中观察到的问题解决和信息存储策略,最主要的是DNA量子计算。

因此,也许(希望如此)上面的信息是距现在还有50或100年的全部古代历史。


  1. 如今,我们在计算机上所做的所有奇特的事情都被分解为许多小的算术任务,这些任务由处理器一一执行。
  2. 如果您的模型允许程序操纵控制流,则这将是处理器从中获取下一条指令的内存地址。您还可以设想仅从磁带读取固定指令集的机器。实际上,早期的实现就是这样做的。没有跳跃就意味着没有循环。程序是完全展开/展开的一系列指令,具体取决于数据。显然,能够将同一程序用于多个输入数据的功能更强大。
  3. 假设你有记忆;您的处理器可以正常工作,但是不能一次处理这么多值。早期的计算机确实从磁带中读取了所有数据并将其保存在寄存器中。没有内存,更不用说可写的持久性存储了。

哇!值得鼓掌。那是一本好书。感谢你的分享。我当然学到了一些东西。尽管在读完这些之后,我认为我想知道的更多是电气工程的基本原理,即它如何物理控制电。我今天晚些时候将相同的问题发送给该小组。谢谢!
基督教徒

1
在我看来,我可能应该包括“与机器部件交谈”。这意味着设计一种人类可以有效使用的语言,并将其(使用编译器)翻译为您指定的指令集。这些是计算机科学的核心主题,而我回答的材料主要是计算机工程
拉斐尔

我想这不是一个快速的答案。有一天,我会付钱给一些计算机工程师,他们要像主板或手机一样制造基本原理。就是说,计算机实际上是如何计算或打开5秒然后熄灭的灯。我想这与开关和电容器有很大关系。
基督教徒

@Christian如果您想节省一些钱,请考虑购买包含晶体管的EE实验盒(如儿童用的实验盒)。afaik通常包括开关灯或构建小型加法器。(再次,电气工程人员可能了解更多。)
拉斐尔

25

完整的图片相当复杂。有许多层彼此叠加,共同在电压之上实现了高级抽象。没有简单的解释说明如何将所有内容组合在一起,尤其是考虑到计算机硬件和软件在过去五十年中发生了巨大的变化。

如果您有兴趣了解所有内容的组合方式,则可以阅读《计算元素》,该书以与非门为开端,并逐步在编译器和操作系统之上构建Tetris的有效实现。你也建立。每台计算机都基于前一台计算机,这可以帮助您了解所有工作原理。


听起来像是一个完美的起点。从那里开始。非常感谢您:)
Christian

2
我还建议阅读Charles Petzold的CODE。
ybakos

7

现在播客安全!从基本原理开始,进行了一系列有关计算机工作方式的文章。

  • 233-让我们设计一台计算机(第1部分)
  • 235-机器语言
  • 237-间接:指针的功能(从技术上讲,不是该系列的一部分)
  • 239-堆栈,寄存器和递归
  • 241-硬件中断
  • 247- “多”节
  • 250-操作系统
  • 252 - RISCy业务
  • 254-我们将为速度做些什么

数字上的差距是因为其他所有情节都是“听众反馈”情节,因此您可能也想观看这些情节。同样在241到247之间,由于当时有关国家强迫CA向其提供根证书的最新消息,他们做了几集有关SSL的文章。

还有EP。248是“便携式狗杀手”,它不会杀死狗,而是史蒂夫小时候独自制造的声波武器,以帮助教邻居的狗不要上栅栏线并试图攻击人行道上的人。


有趣!感谢你的分享。我会看看的。
基督教徒

4

计算机通过以一致的定义的方式操纵能量梯度(然后将其解释为1和0)来工作。定义计算机的是一致性,而分离不同处理器的是定义

另外,了解仅两个逻辑门(OR和AND)如何足以构成任何通用计算机。另请参阅Danny Hillis和Tinkertoy计算机。


那是一篇有关TinkerToy的有趣文章,尤其是它总是赢的事实!(science20.com/brain_candyfeed_your_mind/…
Christian

但是,尽管它使我对计算机的“思考”方式有了很好的了解,即通过赋予计算机各种组合以及寻找前一个问题的机制来解决问题,但是它并没有回答我最初关于如何实际构建计算机的问题。假设我要去当地的五金商店(那里拥有一切)来购买基本部件(收发器,电阻器,电容器,门等)并进行配置,所以我有一台非常基本的计算机,我需要什么?毕竟,第一台计算机是一个有零零碎碎的仓库大小的仓库,所以一定有可能!
基督教徒

@Christian:哈哈,好吧,为基本的存储器存储构建一些基本的逻辑门(AND / OR / NOT),您也许可以添加两个4位数字。

我有一些人字拖!实际上有两对。
基督教徒

3

计算机是大型的同步逻辑系统,这意味着

  • 它使用布尔演算规则处理电信号形式的信息,0/1
  • 它以(非常快的)时钟运行,以便在离散的时刻对所有信号进行采样,以确保一致性。

的信息由两个电电压表示和布尔操作由晶体管(形成数字电路)来实现。0/1

只要计算机通电(大量内存),它就有专门的电路来保留信息。它具有执行二进制算术的专用电路(实际上,这些位以组的形式处理-通常以8的倍数-共同表示一个整数)。它具有基于内存地址的专门路由功能,而内存地址不过是整数。

最后但并非最不重要的一点是,现代计算机还具有一个程序,该程序也存储在RAM中,该程序是一列编码为整数的指令的列表,该程序按顺序执行,通常从内存中获取数据,执行一些算术并将结果发送回内存。

在您的方案中,可以想到一种实现,其中将经过时间存储在RAM中的某个位置,并且程序指示

  • 获取经过的时间值,
  • 用加法器增加它,
  • 使用比较器将其与预定义的延迟进行比较,
  • 如果不相等(例如“循环”),则返回到起始程序地址,
  • 否则,将设置专用信号,该信号将传递到外部开关而不是RAM。

请注意,如今所有这些元素都达到了高度的复杂性,在这个非常简短的概述中的每个句子都应得到几解释


-1

有几种方法可以执行延迟功能或将二进制数据转换为十进制数据或信号强度。输入值“ 15”时,计算机将在屏幕上显示数字15的位图图像。这实际上是二进制值,此刻您的键盘二进制代码也已发送到cpu。它将解析数据,然后将代码转换为ALU(算术逻辑单元)处理单元,将其转换为脉冲后再转换为DAC芯片。现在,模拟信号正在控制触发器电路的频率(从khz到hz的频率)。现在,频率输出将定向到RAM,如果数据为“ 1111”,则CPU读取RAM以匹配。这就是4秒。


我不确定这如何回答问题。
Yuval Filmus

您可以看到他问计算机闪烁如何持续15秒,并且我解释了计算机如何创建第二个值以循环使用。
Lan ...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.