思维中的计算机

2022-05-19 08:11陈凯
中国信息技术教育 2022年9期
关键词:直升飞机体系结构部件

陈凯

在有些时候,为了要判断某个论断是否为真,人们并不需要实际去观察或实验,只需要依托想象来创建一个特殊的情境,将这个论断放置到情境中加以考察,判别它是否在所有的可能性中都能成立。以上方法被称为思想实验。例如,伽利略为反驳亚里斯多德关于“越重的物体下落越快”观点的比萨塔落球实验就是一个著名的思想实验的例子,即便不实际测试,而只是经由逻辑推理,就可以知道,如果不同重量的球在同一高度下落却不同时落地,会产生逻辑上的矛盾。

类似地,可以借助思想实验的方式,在思维的想象空间中建立起某个计算装置,通过这样的方法对计算机的能力进行考察。笔者之所以做这方面的探索,是因为发现,学生在面对存储程序计算机的体系结构的时候,可能会采取两种不同的态度:一是直接将关于此体系结构的知识,如五大逻辑部件、逻辑部件的作用、逻辑部件之间的关系等作为现成的知识加以接受;二是以批判性的目光看待这个体系结构,对何以有如此结构或者是否可能有其他结构,或者当前绝大多数计算机为何采用此体系结构的原因,自主产生出疑问。根据笔者的经验,课堂上围绕以上问题主动发问者实属罕见,但若发放调查问卷,询问学生是否在學习过程中曾经自主产生过——哪怕只是在很短暂的念头中产生过——诸如此类疑问,肯定的回答大约占总调查人数的三分之一。但教师面临的困难是,若真有学生提出关于计算机体系结构的疑问,确实很难在有限的时间里加以回答,因为对这些问题的回答涉及太多学生未曾接触到的计算机底层的技术细节。正因为如此,要想在计算机体系结构这一部分教学中落实思维培养的目标,障碍很大。笔者试图以思想实验作为突破以上障碍的某一种可能的工具。

● 简单的排序计算装置——物理和逻辑的双重保证

计算装置工作的可行性需要得到物理的和逻辑的双重保证。在物理方面,某种机械计算装置中机构的运转,无论是齿轮、连杆、金属滚珠的运动,还是电子计算装置中电信号的保持、反转、按规则变化等,都在自然齐一律的保证之下;在逻辑方面,如果规定某种信号状态为1,那么它就不会是0,如果规定某种运算是与逻辑运算,那么它不会自行变成或逻辑运算。有了物理和逻辑的保证,就能够在头脑中以思想实验的方式来虚构出某个计算装置。例如,设计某个装置,能将一系列体积不同的球,按其体积从小到大进行排序,可行的一种方法是:将这些球安置在略有倾角的滚动槽上缓慢滚落,槽上每隔一段距离,就开有小洞,越是靠上方的洞越小,越是靠下方的洞越大,所以,体积小的球会先行从洞中掉落,快速进入最下面的收集槽,而体积越大的球,就越慢进入到收集槽,最终,收集槽中的球是按体积从小到大排列的。以上过程,仅凭头脑想象,就可认为是可行的。并且,在想象中还能发现这个装置的弱点,只有当球的体积差异很大时,装置才是可靠的,否则,球有可能在滚动中,卡入到比自己略小一些的洞口中上下不得。当然,还能设计出其他样子的自动装置方案,来给不同体积的球排序,这可以布置为一项开放且有挑战性的任务。

● 纯粹逻辑的简单计算装置

本文主要是想讨论,在逻辑的保证下如何构造思维中的计算装置,而暂时搁置物理上的保证。这当然不是说物理现实不重要,其中的一个原因是为了在有限的教学时间内有更集中的聚焦点。另一个很重要的原因是,当今人们所使用的计算装置具有高度的虚拟化的特点,即便是在简单的高级语言的程序表达式中,也难以看出计算机底层晶体管具体的工作过程。不妨想象一下,人们既可以在虚拟现实中以真实世界中建造计算机的方式来模拟建造计算机,当然也可以在虚拟现实中以不遵守现实物理规律的方式来建造计算机(这其实还更简单),但两者都必须遵守逻辑上的规则。

那么,在纯粹的思维空间中,一个最简单的计算装置应当是怎样的?它应该有几个组成部分?可以让学生在五大逻辑部件的系统结构图上大胆对部件进行裁剪,看看在哪种情况下,剩下的部件还能组建成一个有计算功能的装置。这是一个开放性的问题,大部分学生的回答是一致的,认为这个计算装置至少应该有输入、运算和输出三部分。不妨在头脑中想象某个布满按键,但按了之后却全无反应的盒子,或者想象某个布满印有数字按键的盒子,按下什么数字则照样显示这个数字,又或者想象某个只管自顾自显示数字的盒子。以上这些装置可以归为装饰艺术品,但显然不能用于计算。

这里有一个功能简单的计算装置的例子,某个用0和1两种数字组成的点阵图像,为了观看方便,将数字0隐而不现,这样就可以看出这是一张直升飞机的图像,如图1所示。如果这些数字作为输入数据,而运算部件所做的是将所有的“01”转换为“10”,那么输出的数据所显示的就是一个“向左移动”一格位置的直升飞机,如图2所示。为了能顺利地实现这个效果,每个数字1之间都至少夹着一个0。

可以假设,在符号串上方有许多个检测符号串的扫描器,一旦发现符号串是“01”,就将其变成“10”,假设这个扫描器既能横向扫描,也能纵向扫描,那么就能为直升飞机创设出上下移动的效果。至于这个功能具体是如何实现的,暂时不需要去深究,绝大多数学生认可这个功能是能够被制造出来的。

即便是这种将符号串中所有的“01”转换为“10”的简单的计算装置,当仔细分析它的输入与输出时,也能发现其中蕴藏着超出预想的复杂性。考虑要实现让直升飞机不停地向左移动的功能,最简单的办法就是将输出的结果重新反馈到输入。但是,当人们这样做的时候,又该如何定义什么是输入、什么是输出?对于每一次执行转换的动作来说,前一时刻的数据是输入,转换后的数据是输出;但对于期望实现直升飞机移动的动画效果的人来说,最初时刻的数据是输入,一系列变化中的图像效果是输出。在控制论中,对于一个计算部件,将其放置在整个闭环的反馈系统中分析,与将其从整体系统中分离仅作为一个局部的组件来分析,其输入和输出是有很大区别的。如果不结合具体任务,而只是单纯地观看计算装置的系统结构图,是很难发现这些微妙的区别的。

● 简单计算装置中的存储和控制

对上述所说的仅有输入、运算、输出三个部件的简单计算装置继续发问:这个装置中真的没有用于存储的部件吗?假设图像点阵的输入依靠的是某种开关矩阵,当触碰矩阵中某个位置的开关,相应位置的图像点阵的值就发生变化,显然,人没有足够多的手指去触碰所有能让直升飞机图像显现出来的开关,所以当触碰了开关后,相应位置的图像点阵的值就应该被保持在那里,这种保持其实就是一种存储。同样地,对于输出运算结果的部件来说,也需要能够在一定时间内保持点阵的状态。这样看来,这个简单装置中的输入和输出的部件,其实都兼有存储的功能。人们在网络上搜索存储程序计算机体系结构图的时候就会发现,有些结构图是以存储器为中心绘制的,有些是以运算器为中心绘制的,这两种绘制方式其实都只是展现出了计算机动态工作过程中的某一个角度的剖面。

以直升飞机的移动為例,如果要产生出一种连续移动的效果,就需要将输出结果反馈到输入。在头脑中构建一个简单的反馈装置,就能够明白存储和控制部件存在的必要性。假设某个杆子上装了某种滑块,滑块只有“上”和“下”两种状态,而运算部件唯一的功能就是将滑块位置滑动到其原来相反的方向,考虑用户期望的运算效果是让滑块不断从上到下、从下到上往复运动,如果直接将输出反馈到输入(如上页图3),即便是在头脑中想象一下,也会发现这在逻辑上是不成立的。

引入存储和控制部件,就能够让装置的自动运行在逻辑上成为可能。当反转滑块的运算完成后,由控制部件开通复制通道A,将刚才的输出状态传递给临时存储部件(注意,这里不讨论具体的物理实现,实际上需要设计某个装置来保证状态的单向传递),接下来,是关闭复制通道A,开启复制通道B,将状态传递给计算装置的输入部件。虽然上页图4中没有特意画出那个执行开关A和B通道的控制部件,但大家很容易认可它是必须存在的。

● 能产生不同效果的简单计算装置

有一个问题很值得思考:上述计算装置能实现的效果是单一的,如直升飞机的图案只能向左移动,那么,怎么让图案向右移动呢?大家最容易想到的就是将规则变动一下,改成将所有的“01”转换为“10”,但假设计算装置是一个预先制造好的实体,修改转换规则,就等同于要求修改实体结构。考虑人们希望有这样一个制造好的规则不再变动的装置,可以自由决定直升飞机究竟是向左移动还是向右移动,当然,其中的符号变换规则可能会有许多条,也会涉及更多除了“0”和“1”之外的符号,也可能每一次变换符号的数量超过两个(如把“abc”转换为“efg”)。但这些转换过程一定是严格按顺序循环执行的。另一个需要说明的情况是,装置在运行过程中,必然会有许多必要的中间状态,但只要最终在某个时刻能实现图像移动的效果就可以了。根据以上条件,请在头脑中想象一下,这个装置是否可行,甚至还可以在思维空间中模拟一下,究竟如何做才是可行的。对这个问题的调查结果显示,大部分学生认为,实现多种移动效果是可行的。可能的方法当然有多种,其中有一种方案很少被人想到,所以这里特别提一下,那就是将二维的数据扩展到三维,在代表图像的数据层上方,覆盖上一层代表操作动作的数据,而符号串的变换也需要在三维的数据空间中进行。

可以继续将问题变得普遍化一些,想象一些输入的数据中,除了真正用来做运算的数据之外,其中某些数据起到了指定做何种运算的作用。根据上述一系列的想象,学生们基本上都认可,在输入的数据中也可以混杂有代表某种指令的特殊的数据,这样就能够指定让运算部件对数据(不包括代表某种指令的数据)做某几种特定变换工作中的一种。然而从中也可以看出,将用作指令的数据以及用作对数据中间变化状态进行记录的数据一起混杂于输入和输出的数据中,对于使用计算装置的用户而言,是十分不友好的,这也是要在计算装置中引入存储器的另一个原因。

可以进一步引出的问题是,是不是存在这种可能,在输入的数据中混杂有一系列特殊的指令,能够指定让运算部件对数据做任意种可能的变换工作。这个问题实际上是问,是不是存在某种程序用以实现通用性的任务。结论当然是存在,关于为何这种通用性程序存在的解答,最早来自图灵的证明,证明中不仅用到了纯粹用思想构建的图灵机,还用到了特定的数学工具,以及关于利用图灵机来模拟图灵机的可行性的精彩推论。尽管在有限的课时中可能难以详述图灵机的工作原理,但经由以上一系列的纯粹思维空间中的想象与推理,学生们就能够领会到图灵所做工作的巨大价值。

猜你喜欢
直升飞机体系结构部件
蜻蜓与飞机
基于思维导图的化学知识体系结构构建
软件通信体系结构(SCA)理念下的无线通信系统探究
一种陀飞轮表的双秒轮结构
现代汉字的两种分析法与国家文字规范(四)
古文字中“口”部件的作用研究
认知无线网络中的重点技术和研究
将Widget小部件放到
羊羊来了
水上直升飞机