跳至内容

计算机科学/计算机制基础

来自维基教科书,一个开放的世界中的开放书籍

计算机制

[编辑 | 编辑源代码]

我们已经学习了一些计算的基本原理,并看到了这些原理在强大的技术中展现出的计算能力。一开始我们想象,如果我们可以构建一个能够执行一些简单任务的简单设备,那么计算可以通过纯粹的机械方式和盲目的符号操作来完成。在本课中,我们将学习计算机的发展历史以及所有现代计算机硬件运行的原理。我们将看到,在物理层面上,计算机只不过是一个遵循简单规则来操纵两个符号的简单设备。

计算机硬件

[编辑 | 编辑源代码]

能够自动执行计算的计算机硬件已经存在了很长时间。从早期计算机到我们今天拥有的现代计算机,都有一个简短的历史。

机械计算机

[编辑 | 编辑源代码]

查尔斯·巴贝奇在 19 世纪初发明了可编程计算机的概念,并设计了第一台机械计算机。他的差分机分析机是用于制表多项式函数的机械设备。机器的输入是穿孔卡片上的程序和数据,输出数字可以穿孔在卡片上,或者传送到打印机、曲线绘图仪和铃声装置。这些机器使用普通基数 10 定点算术。查尔斯·巴贝奇的机器是第一台通用计算机的设计,它是图灵完备的。

模拟计算机

[编辑 | 编辑源代码]

在 20 世纪早期,机械模拟计算机被设计用来执行越来越复杂的计算,例如通过积分来求解微分方程。模拟计算机使用物理现象(如电气、机械或液压量)的连续可变方面来模拟/量化计算,它们缺乏现代数字计算机的精度。

数字计算机

[编辑 | 编辑源代码]

世界上第一台全自动数字计算机是 1941 年康拉德·楚泽制造的机电可编程计算机Z3。Z3 使用驱动机械继电器的电开关来执行计算。它用二进制系统代替了十进制系统,并率先使用了浮点数。程序和数据存储在穿孔胶片上。数字设备和模拟设备的区别在于值表示是离散的还是连续的。例如,黑色和白色是离散值,但它们有无限数量的灰色(灰度级)。

电子数字计算机

[编辑 | 编辑源代码]

世界上第一台电子数字可编程计算机是 Colossus,它是在 1943 年用大量电子管(真空管)建造的。该设计完全是电子化的,用于破译德国的 Enigma 密码。

晶体管计算机

[编辑 | 编辑源代码]

从 1955 年起,真空管在计算机设计中被晶体管取代,从而产生了更小、更可靠、更节能的第二代计算机,催生了计算机的“第二代”。

集成电路计算机

[编辑 | 编辑源代码]

1952 年集成电路的发明开创了计算机机械的新纪元——微型计算机。使用集成电路的微处理器被用来构建你今天看到的通用计算设备:台式计算机、笔记本电脑、手机和贺卡。

数字计算原理

[编辑 | 编辑源代码]

数字计算的数学基础是乔治·布尔发明的布尔逻辑。克劳德·香农在 20 世纪 30 年代证明了电子电路可以使用布尔逻辑以二进制方式进行计算,这成为所有现代计算设备背后的基本原理/思想。

布尔代数

[编辑 | 编辑源代码]

布尔代数对两个值执行三种运算:AND、OR 和 NOT:真和假。评估这三种运算的规则如图所示。

The truth table showing the rules for the three basic Boolean operations.

布尔运算对布尔值进行运算,并始终返回布尔值。对于 AND 运算,只有当两个操作数都为真时结果才为真。另一方面,OR 运算只有当两个操作数中任何一个为假时,结果才为假。NOT 运算接受一个操作数,并简单地对其取反。我们将看到,如果我们可以构建实现这三种运算的电子电路,我们就可以构建能够执行各种算术和逻辑函数的电路。

可以使用晶体管物理地实现这三种布尔运算。晶体管本质上是一个微小的开关,如图所示。

A transistor is fundamentally a tiny switch with three pins. When a logical 1 is applied to the control pin the switch is closed connecting in to out.

当在控制引脚上施加高电压(逻辑 1)时,开关闭合,将输入引脚直接连接到输出引脚。晶体管工作在两种电压下:高电压和低电压,这可以用来表示两个不同的逻辑值:真和假,或者两个二进制值:1 和 0。我们将使用高电压来物理地表示逻辑 1,使用低电压来表示逻辑 0。

晶体管和逻辑门

[编辑 | 编辑源代码]

晶体管是简单的设备,尺寸很小,但它是电子电路的基本构建块。例如,我们可以使用一个晶体管构建一个名为 NOT 门的设备,如图所示。

A NOT gate constructed using a single transistor.

如果我们将红色框内的部分视为一个单元,它就像一个反相器,在数字逻辑设计中被称为非门。如该器件的真值表(图旁边)所示,当输入为逻辑 1 时,开关闭合,将输出连接到地,将输出电压拉低,表示逻辑 0。另一方面,当输入为逻辑 0 时,开关保持打开,导致输出线上出现高电压,因为它通过电阻连接到电源,并且在没有电流的情况下,电阻不会导致电源下降。一旦这个器件被构建,我们就可以用它作为构建块来构建更复杂的电路。我们将使用以下符号来表示非门。

NOT gate

利用晶体管和非门,我们可以构建一个执行与操作的器件。

An AND gate built using two transistors and a NOT gate.

如图所示,该器件执行精确的与操作。只有当两个输入都为逻辑 1 时,输出才为逻辑 1(高电压),这会导致两个开关都闭合,将非门之前的输出拉低。然后,非门将输出取反,使其成为高电压或逻辑 1。

类似地,我们可以构建一个执行或操作的器件。

An OR gate built using two transistors and a NOT gate.

如图所示,这种并联结构保证只要任何一个晶体管闭合,输出就是高电压。换句话说,两个输入和输出之间的关系是一个或逻辑函数。

门到电路

[编辑 | 编辑源代码]

利用三个基本门(与、或、非),我们可以构建任何组合逻辑电路。电路由输入线、由线连接的门和输出线组成。一旦电路被设计,它就可以被看作是一个黑盒,它实现了一些将输入映射到输出的逻辑。以下是用标准电路构建算法

  1. 从所需的逻辑构建真值表
  2. 以积之和的形式构建逻辑表达式
  3. 使用门将表达式转换为电路设计

我们想要构建一个测试两个位是否相等的电路。这两个输入是两个位,它们用高电压(逻辑 1)或低电压(逻辑 0)物理表示。根据电路所需的逻辑,我们可以绘制以下真值表

This logic tests whether two bits are the same/equal.

前两列枚举了两个输入线的全部可能值组合。只有当两个输入相同时,输出才是逻辑 1(真)。根据真值表,我们可以推导出以下逻辑表达式(积之和形式)

(a AND b) OR ((NOT a) AND (NOT b))

为了推导出积之和形式,我们检查真值表中输出为逻辑 1 的行。我们知道这些行中显示的输入组合应该导致输出变为逻辑 1。我们可以用逻辑表达式表示这些行中的每一个,例如,(a AND b) 表示最后一行,因为当 a 和 b 都为逻辑 1 时,该表达式根据与操作的定义评估为逻辑 1。类似地,((NOT a) AND (NOT b)) 表示第一行。如果我们将这两个情况组合起来,我们可以用一个表达式来表示所需的逻辑:(a AND b) OR ((NOT a) AND (NOT b))。如果我们将真值表中情况的输入代入,这个表达式应该在相应情况下评估为相同所需的输出值。因为我们知道如何构建实现与、或、非操作的器件(门),所以我们可以构建一个能够比较两个位是否相等的器件。这个器件将能够完全机械地(盲目地)执行这种操作,因为它不知道操作的含义。

使用相同的方法,我们可以逐渐构建越来越复杂的电路。例如,我们可以构建一个能够将两个二进制数相加的器件:一位加法器。这只是一个弄清楚所需逻辑并使用我们已经知道如何制作的构建块来构建器件的问题。

An adder circuit that adds two binary bits.

一旦我们从真值表中得到逻辑表达式的积之和形式,我们就可以直接构建电路,因为我们只需要三种类型的逻辑门和线连接。下图显示了使用三个基本逻辑门构建一位加法器(带进位)电路的设计。

The circuit for producing the sum bit of a one bit adder.

我们可以通过连接多个一位加法器来构建多位加法器。下图显示了一个两位加法器可以通过将第一个一位加法器的进位输出连接到第二个一位加法器的进位输入来形成。

A 2-bit adder circuit constructed from two 1-bit adders.


灯诊断算法的简单流程图
计算 N!(N 的阶乘)的算法的流程图

计算机数据存储

华夏公益教科书