聪明的曹冲称出了大象的重量。此前我们仅仅将这一思想归纳为“通过某种系统将大象的重量映射为石头的重量”,但这还远远不够。因为我们只触碰到了这个问题的一个解——映射,而“为什么需要映射”才真正是问题的本身。
曹冲的高明之处在于,他认识到“不能称象”的本质原因是:大象不能被分割。“不能分割”才是灾难之源。因此,如果系统如我们此前所讨论的,是“通过在程序组织上的结构化来解决规模问题”的一种策略,那么程序所解决的问题集“能否分割”以及“如何正确地分割”,就是所有系统问题的核心所在。
对此,曹冲称象的故事提出了一种可能的解:如果“被运算对象”是不可分割的,那么我们可以将它映射为可分割的对象。但即使这个解总是存在的,我们也只是看到了问题的一半。因为在曹冲称象的故事中,我们忽略了一个非常重要的事物:秤。
秤,实质上就是一个数据处理系统:□其一,它具备一个数据处理系统的两个基本要素:处理信息与反馈信息,例如称一块肉,并反馈结果:二斤六两。
【系统的基础部件】
□其二,它存有一个基本限制:能够处理的信息边界,例如只能称重100斤。也正是因为秤的数据处理能力有限,我们才称不出大象的重量。所以整个“称象问题”既可以看做是“象太大”,也可以看做是“秤太小”。yipindushu.com
我们的计算机理论是基于这样一个事实,即计算系统的本质就是“算数”。而“被运算对象”的分割只是解决了其中“数的问题”。因此在我们将逻辑上的计算系统映射为一个实际实现,例如“称象”或者“计算机”时,我们也可以尝试去解决“算的问题”。
换言之,系统应付规模问题的总法则只有两个:运算能力的分布,以及运算对象的分布。
【二】
【但什么是“分布”呢?】
分布并不等于分割。“分割”是指一个问题集(无论是运算能力还是运算对象)能否被切分,例如前面一再提及的大象就是不可被分割的。而“分布”,指的是分割的结果能否被各个独立地加以处理。因此,我们说大象映射为石头之后具有了“(数据的)可分布性",并不仅仅是因为在形式上进行了分割,还因为这些石头能被逐一称重。所以说:“可拆分"与拆分的结果“可处理”,这两个特性在“分布”中缺一不可。与一把秤相类似,一个函数实质上也是一个数据处理系统:□其一,很明显,它能“处理数据”①并反馈一个返回值;□其二,函数能处理的数据也有类型、边界以及运算总量的限制。
就我们通常使用的、单处理器的个人计算机而言,“所有软件构成的全集”所提供的功能总和可以被理解为“一个函数”(设为函数F)。因为从计算机通电运行开始,系统开始了唯一一个程序入口与处理过程:口步骤一:进行系统自检、BIOS预设等常规的、硬件系统自有的处理程序;□步骤二:尝试按照约定次序加载移动存储、外部存储等设备中的处理程序②,□步骤三:将系统的控制权转移给步骤二中找到的处理程序(的入口)。
请注意,在上述这个过程以及其后的全过程中,处理器(CPU)的处理其实是在单一的时间序列中进行的。而我们的操作系统之所以能同时运行多个程序(例如Windows的资源管理器与记事本),以及在后台与前台运行不同的服务与应用程序等,是操作系统:□将“所有软件所提供的功能总和”,即是我们上面假定的函数F,分成了多个函数Fo,…,Fn,计为F';□将F"理解为进程的入口,并假定F'可以再分成多个函数F%,…,F,计为F";□将F"理解为线程的入口,并假定F"可以再分成……我们的操作系统(或某个硬件环境下的软件系统)无非是在对需要运算的总量进行拆分,并尝试将这些拆分结果分布在“不同的逻辑单元”③中进行处理。
这一计算模型在单处理器时代被称为“分时处理”,即通过任务调度,将单一处①这其实并不那么明显。其一,处理(process)是函数的基本抽象含义,如同它在数学中的含义是求解;其二,数据(data)是处理的具体对象,这是函数入口参数的基本抽象含义,如同数学中的公式是函数,而代入公式的那些数才是求解的问题(即数据)。②引导光盘、引导软盘,以及硬盘活动分区的引导扇区等。
③这里仅基于Windows系统的“进程-线程”模型进行讨论。事实上这些逻辑单元在不同系统中有着多种类型、多种层次与关系的抽象,例如作业(Job)、任务(Task)、进程(Process)、线程(Thread)、流(Flow)、事务(Work)、会话(Session)等。
版权声明
本站素材均来源与互联网和网友投稿,欢迎学习分享
【节应用开发的背景与成因14:http://www.yipindushu.com/xuexifangfa/16473.html
推荐文章
09-13
1 资深项目经理职业分享知识大全--记录工作流程,然后严格执行09-03
2 2021最火哲理句子文案09-11
3 潮州俗语大全09-13
4 正能量语录,让你成为更好的自己09-11
5 吃干饭俗语是什么意思