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