本文比较系统的总结了计算机技术中的十个重要关系,对这些技术要素及其之间的关系进行了深入的剖析,并通过大量的典型实例进行了说明。理解了这些关系,可以在一定程度上提高读者对计算机技术的总体把握能力。
1 引 言
计算机技术领域的专业术语繁多,很多技术要素之间往往存在一定的逻辑联系。有些技术关系的内涵还是比较丰富的。因此,对计算机技术中比较典型的技术关系进行总结和分析是必要的。以下对计算机技术的十个重要关系进行了阐述。
2 对计算机技术中的十个重要关系的分析
2.1 硬件与软件
硬件是整个计算机系统发挥其功能的物质基础。在计算机上执行的任何功能和操作都要最终转化为硬件系统相关部件的一系列“动作”,确切的讲是一系列随时间变化的电信号的组合。软件是根据所要完成的特定任务对硬件的功能单位(即机器指令)的逻辑组织,或者说是指令的集合,它是计算机系统的灵魂。计算机要完成的不同任务正是通过不同的软件体现出来的。虽然软件与硬件一个是无形的逻辑实体,一个是有形的物理实体,但它们在逻辑功能上是等价的。凡是由硬件实现的功能,用软件的方法同样可以实现,反之亦然。对同一种功能,选择用硬件实现还是软件实现,取决于对成本,执行效率,灵活性等方面的综合考虑。事实上,在计算机技术发展的历史过程中,硬件与软件之间的界限不是固定不变的,而是动态变化的。例如,在计算机技术发展的早期,由于受硬件制造工艺的限制,CPU的指令系统中没有乘法指令,即硬件不能直接进行乘法运算。要使计算机完成乘法功能,必须通过若干加法指令的组合来实现。用指令的组合实现,也就是通过编程实现,或者说是用软件的方法实现。后来随着计算机硬件技术的发展,同时出于对执行效率的考虑,CPU的指令系统中增加了乘法指令,这样乘法算功能就可由硬件直接完成。软硬件的逻辑等价性原理是计算机系统设计的重要依据,软硬件的功能分配及其界面的确定是计算机系统结构研究的重要内容。
软件与硬件发展的不平衡性对计算机技术整体发展的制约是应该注意的。考察计算机技术发展的历史过程可以看出,硬件技术的发展是活跃和迅速的,是推动整个计算机技术发展的引擎。
而软件的发展由于自身的特点而显得相对滞后。也就是说软件往往不能充分利用和发挥计算机硬件所提供的潜力(如软件没有充分利用计算机的字长和指令系统)。因此,在保证软件质量的情况下如何提高软件的开发效率是当今计算机科学研究的一个重要领域。
2.2 操作系统与应用软件
有人将操作系统视为计算机系统的核心,可见它在整个系统中的地位和作用的重要性。对操作系统的研究有两种观点,一种是系统管理的观点,即操作系统是软硬件系统资源的管理者;另一种是用户界面的观点,即操作系统为上层应用软件提供了访问系统服务的接口(这种接口被称为系统调用或API)。上述两种观点实际上反映了操作系统所具备的两大功能。操作系统对应用软件提供访问底层硬件和处理其它与系统密切相关功能的接口,一方面是为了减轻编程人员工作的复杂性,另一方面也是对系统资源进行统一管理的必然要求(在多任务环境中尤其如此)。几乎所有实用的应用软件,在运行过程中都需要通过系统调用请求操作系统提供服务。在一般情况下,一个应用程序不能不经过修改而从一个操作系统平台移植到另一个不同的操作系统平台上,这主要是因为不同操作系统的系统调用存在着差别。
2.3 逻辑设计与物理实现
所谓逻辑设计是指对问题的抽象描述,它一般是存在于纸上的。物理实现指的是把对问题的逻辑描述转化为计算机中的表示或功能。为了便于学习和研究,经常需要对计算机技术的相关问题进行抽象,因而我们就会经常涉及到逻辑设计与物理实现的关系问题。例如,数据结构中的逻辑结构和存储结构(物理结构),关系数据库系统中”表”的逻辑形式与对应的物理文件格式,程序设计语言中的数据类型与该类型的变量在内存中的表示形式(占用的字节数,采用何种二进制编码),操作系统中文件的概念和相应的数据在磁盘中的具体存储方式等。
2.4 层次性与透明性
为了简化研究和设计的复杂性,无论是在看待整个计算机系统的观点上还是在某个具体软件系统的实现中,人们都倾向于采用一种分层结构的思想。相邻层次之间通过某种形式的接口相互通信,较高的一层比较低的一层更加抽象。例如,从程序员的角度看,我们可以把整个计算机系统分为四个层次:机器硬件层(机器语言层),操作系统层,汇编语言层和高级语言层。透明性的概念指的是本来存在的事物在某种条件下看起来好像不存在。层次性和透明性具有内在的联系。任何透明性都是一定程度的透明性,也就是说透明性存在着程度上的差别。而这种差别是由系统的层次性引起的。从较高的层次上看某个系统,系统对这个观察者的透明性也就越高。例如,机器的指令系统和寄存器结构等硬件属性对汇编语言程序员而言是不透明的,而高级语言程序员在进行程序设计时无需关心这些底层细节,也就是说上述硬件属性对他们是透明的。由此可以看出,透明性总是一定层次上的透明性,而透明性又需要通过系统分层来实现。所以,层次性是透明性的基础,而透明性是层次性的反映。无论是层次性还是透明性,它们的目标是一致的,即实现系统的易用性。
2.5 复杂性、效率与易用性
计算机系统所追求的技术指标之间往往是相互排斥的,即它们不可能同时达到最优。如算法的时间复杂性和空间复杂性,系统的可靠性与灵活性等。系统的复杂性,效率与易用性之间也是相互矛盾的。以程序设计语言为例,汇编语言较高级语言难于使用,但汇编程序比高级语言的编译程序复杂性低。同时,用汇编语言编写的程序比用高级语言编写的程序目标代码短,运行速度更快。面向对象的程序设计语言比传统的面向过程的语言易于使用,但用面向对象的语言编写的程序运行效率较低(在实现大型的应用软件时尤其如此)。图形用户界面(GUI)正是遵循着易用性的原则而设计的,它为终端用户提供了一个方便友好的与计算机交互的手段,但实现图形界面功能的软件系统一般都很庞大和复杂。相反,字符命令行界面对普通用户不太友好,但这种界面实现简单,更重要的是对操作熟练的专业人员而言,通过命令行与系统交互快捷而高效。这也正是很多操作系统至今仍然保留字符界面的原因。由上述事实我们可以体会到,系统的易用性总是以增加系统实现的复杂性和牺牲系统的运行效率为代价的。复杂性,效率与易用性的关系问题实质上是系统与用户之间的功能分配问题。一个系统要想让用户容易使用,就要减少用户对系统的干预,这样就必然要求系统本身承担更多的功能,因而这样的系统实现起来就会复杂。反之,如果把较多的功能让用户自己完成,系统本身就会变得简单,但这样的系统用户感觉很难使用。常常会有这样一种说法,即“系统表面上看起来越简单,实际上系统内部越复杂”,就是这个道理。现在,由于计算机硬件系统的性能比以前有了很大的提高,效率问题已经不再是矛盾的主要方面,而如何提高系统的易用性,为用户提供一个更加友好的界面,已经成为软件设计人员关注的焦点。
2.6 可移植性与兼容性
可移植性主要
是指把同一软件放置到不同系统平台(如不同的硬件平台和操作系统)并使之正常运行的难易程度。可移植性有时候被表述为跨平台性。分析软件的可移植性大概要考虑以下几种情况:不同的体系结构(如CPU的指令系统)之间二进制形式的应用软件是不可移植的,如果是源程序,必须对其进行重新编译才可以在新的环境中运行。相同体系结构的硬件平台上,如果操作系统也相同(系统调用接口一致),二进制形式的应用软件可移植, 否则必须对源程序进行相应的修改后重新编译链接生成新的可执行文件才可以在不同的操作系统下运行。对于同一种语言编写的程序在不同版本编译器之间的可移植性(无论硬件平台和操作系统是否相同),取决于该语言的标准化程度和编译器实现时对语言标准的严格遵守程度。兼容性是指不同软硬件产品在技术特征上的一致性。兼容性是分层次的,如CPU的兼容性可分为芯片的引脚级兼容(芯片引脚信号的定义一致)和指令级兼容(机器指令系统的一致性)。保持产品兼容性的是重要的,这样才能保证产品使用的连续性(对同一系列产品而言)和互用性(对同一种类的产品而言)。但很多产品为了照顾兼容性(主要指同一系列产品的向后兼容),使产品日益变得庞大而复杂。这是因为新产品不仅要提供更新的,更先进的特征,还必须保留原来产品的的特征(尽管这些特征可能是过时的,甚至与新特征由某种程度的抵触)。我们所熟知的C++语言就是一个例子,为了保持与传统C语言的兼容性,使C++在设计时不能完全抛弃C语言中不太合理的语言要素,语言的语法显得有些杂乱,而且程序员在进行程序设计时可能新旧语言要素并用,程序可读性差,而且容易出错。
可移植性依赖于兼容性。某个软件所依赖的不同的平台的兼容性,是该软件能够在这些平台上可移植的必要条件。假设A软件可以在B平台上运行,如果 C平台与B平台兼容,则A软件也可以在B平台上运行,即A软件对于B,C而言是可移植的。一个明显的例子是,如果两个不同版本的C语言编译器是完全兼容的,那么用其中任何一个版本的C语言写的源程序,都可以在另一个版本的C编译器上不加修改的成功编译。
2.7 安全性与可用性
信息系统或通信网络的安全性总是以牺牲系统的复杂性和可用性为代价的。安全意味着限制,使用户对某个安全系统使用的灵活性与功能的广泛性受到制约,导致系统的可用性变差。例如,制订防火墙的安全策略可以采用两种不同的原则:(1)凡是没有被安全策略明确禁止的操作都是允许的;(2)凡是没有被安全策略允许的操作都是被禁