2.2 操作系统与应用软件
2.2 操作系统与应用软件0 r; Y& }0 _' K9 [: a
3 C' F Y; D" t; A8 @. t$ u7 |
有人将操作系统视为计算机系统的核心,可见它在整个系统中的地位和作用的重要性。对操作系统的研究有两种观点,一种是系统管理的观点,即操作系统是软硬件系统资源的管理者;另一种是用户界面的观点,即操作系统为上层应用软件提供了访问系统服务的接口(这种接口被称为系统调用或API)。上述两种观点实际上反映了操作系统所具备的两大功能。操作系统对应用软件提供访问底层硬件和处理其它与系统密切相关功能的接口,一方面是为了减轻编程人员工作的复杂性,另一方面也是对系统资源进行统一管理的必然要求(在多任务环境中尤其如此)。几乎所有实用的应用软件,在运行过程中都需要通过系统调用请求操作系统提供服务。在一般情况下,一个应用程序不能不经过修改而从一个操作系统平台移植到另一个不同的操作系统平台上,这主要是因为不同操作系统的系统调用存在着差别。' U0 S" ?: O( i! y+ S# [0 `
4 x4 `; }9 J! X2.3 逻辑设计与物理实现
2 T/ f" u- ^+ L! O7 J. J
3 Z# E: o+ k0 p! n5 v0 [ 所谓逻辑设计是指对问题的抽象描述,它一般是存在于纸上的。物理实现指的是把对问题的逻辑描述转化为计算机中的表示或功能。为了便于学习和研究,经常需要对计算机技术的相关问题进行抽象,因而我们就会经常涉及到逻辑设计与物理实现的关系问题。例如,数据结构中的逻辑结构和存储结构(物理结构),关系数据库系统中”表”的逻辑形式与对应的物理文件格式,程序设计语言中的数据类型与该类型的变量在内存中的表示形式(占用的字节数,采用何种二进制编码),操作系统中文件的概念和相应的数据在磁盘中的具体存储方式等。2 _# Q. O, C, i H4 h+ }
0 V# c4 _: |; q; {0 g3 y2.4 层次性与透明性. C5 t1 \" ?% V
! @2 i/ O8 R0 W( B4 r 为了简化研究和设计的复杂性,无论是在看待整个计算机系统的观点上还是在某个具体软件系统的实现中,人们都倾向于采用一种分层结构的思想。相邻层次之间通过某种形式的接口相互通信,较高的一层比较低的一层更加抽象。例如,从程序员的角度看,我们可以把整个计算机系统分为四个层次:机器硬件层(机器语言层),操作系统层,汇编语言层和高级语言层。透明性的概念指的是本来存在的事物在某种条件下看起来好像不存在。层次性和透明性具有内在的联系。任何透明性都是一定程度的透明性,也就是说透明性存在着程度上的差别。而这种差别是由系统的层次性引起的。从较高的层次上看某个系统,系统对这个观察者的透明性也就越高。例如,机器的指令系统和寄存器结构等硬件属性对汇编语言程序员而言是不透明的,而高级语言程序员在进行程序设计时无需关心这些底层细节,也就是说上述硬件属性对他们是透明的。由此可以看出,透明性总是一定层次上的透明性,而透明性又需要通过系统分层来实现。所以,层次性是透明性的基础,而透明性是层次性的反映。无论是层次性还是透明性,它们的目标是一致的,即实现系统的易用性。
# O3 l7 y1 a" ^1 C9 b, ]# X. Z3 L( C5 S7 _8 U, M4 |" R1 W3 e3 z3 K
2.5 复杂性、效率与易用性
& A2 u1 T5 g2 v0 W9 T" N4 a% ^- T
计算机系统所追求的技术指标之间往往是相互排斥的,即它们不可能同时达到最优。如算法的时间复杂性和空间复杂性,系统的可靠性与灵活性等。系统的复杂性,效率与易用性之间也是相互矛盾的。以程序设计语言为例,汇编语言较高级语言难于使用,但汇编程序比高级语言的编译程序复杂性低。同时,用汇编语言编写的程序比用高级语言编写的程序目标代码短,运行速度更快。面向对象的程序设计语言比传统的面向过程的语言易于使用,但用面向对象的语言编写的程序运行效率较低(在实现大型的应用软件时尤其如此)。图形用户界面(GUI)正是遵循着易用性的原则而设计的,它为终端用户提供了一个方便友好的与计算机交互的手段,但实现图形界面功能的软件系统一般都很庞大和复杂。相反,字符命令行界面对普通用户不太友好,但这种界面实现简单,更重要的是对操作熟练的专业人员而言,通过命令行与系统交互快捷而高效。这也正是很多操作系统至今仍然保留字符界面的原因。由上述事实我们可以体会到,系统的易用性总是以增加系统实现的复杂性和牺牲系统的运行效率为代价的。复杂性,效率与易用性的关系问题实质上是系统与用户之间的功能分配问题。一个系统要想让用户容易使用,就要减少用户对系统的干预,这样就必然要求系统本身承担更多的功能,因而这样的系统实现起来就会复杂。反之,如果把较多的功能让用户自己完成,系统本身就会变得简单,但这样的系统用户感觉很难使用。常常会有这样一种说法,即“系统表面上看起来越简单,实际上系统内部越复杂”,就是这个道理。现在,由于计算机硬件系统的性能比以前有了很大的提高,效率问题已经不再是矛盾的主要方面,而如何提高系统的易用性,为用户提供一个更加友好的界面,已经成为软件设计人员关注的焦点。