1.4.2 软件对系统结构的影响
由于软件相对硬件的成本越来越贵,软件产量和可靠性的提高越来困难,出现了"软件危机"。但是随着计算机系统的发展和应用范围的扩大,已积累了大量成熟的系统软件和应用软件。因此,用户就希望在新的计算机系统出台后,原先已开发的软件仍能继续在升档换代的新型号机器上使用,这就是要求软件具有可兼容性,即可移植性。它是指一个软件可不经修改或只需少量修改便可由一台机器移植到另一台机器上去运行,即同一软件可应用于不同的环境。那么,如何解决软件的可移植性问题呢?根据不同的要求可采用如下三种方法:
1. 采用系列机方法
所谓系列机是指在一个厂家内生产的具有相同的系统结构,但具有不同组成和实现的一系列不同型号的机器。如IBM370系列机有370/115、125、135、145、158、168等一系列从低速到高速的各种型号。它们具有相同的系统结构,而采用不同的组成和实现技术,有不同的性能和价格。它们有相同的指令系统,但在低档机上指令的分析和指令的执行顺序进行,而在高档机上采用重迭、流水和其它并行处理方式。从程序设计者来看,各档机器却具有相同的32位字长,但从低档到高档机器,其数据通道的宽度分别为8位、16位、32位、甚至64位。DEC公司先后推出VAX-11/780、750、730、725、MICRO-VAX、785等型号。它们都具有32位的字长,都运行VAX/VMS操作系统,都具有相同的I/O连接和使用方式。但在组成上,VAX-11/780通过同步底板互连总线SBI把CPU、主存子系统,控制台子系统、单总线适配器和多总线适配器连接起来。但VAX-11/730没有多总线,而VAX-11/750甚至没有SBI,也没有控制台子系统,而集中控制台取而代之一。采用哪种总线结构对程序员来讲是透明的。
一种系统结构可以有多种组成。同样,一种组成可以有多种物理实现。系列机从程序设计者看具有相同的机器属性,因此按这个属性编制的机器语言程序以及编译程序都能通用于各档机器,所以各档机器是软件兼容的,即同一个软件可以不加修改地运行于系统结构相同的各档机器,可获得相同的结果,差别只在于不同的运行时间。系列机较好地解决了软件要求环境稳定和硬件、器件技术迅速发展之间的矛盾,达到了软件兼容的目的。但是,系列机为了保证软件的兼容,要求系统结构不准改变,这无疑又成为妨碍计算机系统结构发展的重要因素。实际上,为适应性能不断提高或应用领域不断扩大的需要,系列内后面出来的各档机的系统结构应允许有所发展和变化。但是,这种改变只应该是为提高机器总的性能所作的必要扩充,而且往往只是改进系统软件的性能出发来修改系统软件(如编译系统),尽可能不影响高级语言应用软件的兼容,尤其是不允许缩小或删除运行已有软件的那部分指令和结构,例如,在后出的各档机器上,可以为提高编译效率和运算速度增加浮点运算指令,为满足事务处理增加事务处理指令及其所需功能,为提高操作系统的效率和质量增加某些操作系统专用指令和硬件等等。因此,系列机的软件兼容分为向上兼容、向下兼容、向前兼容和向后兼容四种。向上(下)兼容是指按某档机器编制的程序,不加修改就能运行于比它高(低)档的机器。向前(后)兼容是指按某个时期投入市场的某种型号机器编制的程序,不加修改就能运行于在它之前(后)投入市场的机器,这样,对系列机的软件向下和向前兼容可以不作要求,向上兼容在某种情况下也可能做不到(如在低档机器上增加了面向事务处理的指令),但向后兼容却是肯定要做到的。
我们把不同公司厂家生产的具有相同系统结构的计算机称为兼容机。它的思想与系列机的思想是一致的。例如,Amdahl公司照搬IBM370的系统结构,以便充分利用IBM370的软件,却又采用新的组成、实现和器件工艺,研制出在性能价格比方面超过370的Amdahl470、480等。兼容机还可以对原有的系统结构进行某种扩充,使之具有更强的功能,例如长城0520与IBM-PC兼容,但有较强的汉字处理功能,使之具有较强的市场竞争能力。
2. 采用模拟与仿真方法
系列机方法只能在具有相同系统结构的各种机器之间实现软件移植。为了实现软件在不同系统结构的机器之间的相互移植,就必须做到能在一种机器的系统结构上实现另一种机器的系统结构。从指令系统来看,就是要在一种机器的系统结构上实现另一种机器的指令系统。一般可采用模拟或仿真方法。
模拟方法是指用软件方法在一台现有的计算机上实现另一台计算机的指令系统。如在A计算机上要实现B计算机的指令系统,通常采用解释方法来完成,即B机器的每一条指令用一段A机器的指令进行解释执行,如同A机器上也有B机器的指令系统一样。A机器称为宿主机,被模拟的B机器称为虚拟机。为了使虚拟机的应用软件能在宿主机上运行,除了模拟虚拟机的指令系统外,还需模拟其存储体系、I/O系统、控制台的操作,以及形成虚拟机的操作系统。由于模拟是采用纯软件解释执行方法,因此运行速度较慢,实时性差,因此模拟方法只适合于移植运行时间短,使用次数少,而且在时间关系上没有约束和限制的软件。
如果宿主机本身是采用微程序控制,则对B机器指令系统每条指令的解释执行可直接由A机器的一段微程序解释执行。这种用微程序直接解释另一种机器指令系统的方法称为仿真。A机器称为宿主机,B机称为目标机。为仿真所编写的解释微程序称为仿真微程序。除了仿真目标机的指令系统外,还需仿真其存储系统、I/O系统、控制台的操作等。模拟方法中模拟程序存放在主存中,而仿真方法中仿真微程序存在控存中,因此仿真的运行速度要比模拟方法快。用仿真方法时,由于微程序机器级结构更依赖计算机的系统结构,因此对于系统结构差别较大的机器难于完全用仿真方法来实现软件移植,所以通常将模拟和仿真这两种方法混合使用,对于使用频率较高的指令,尽可能用仿真方法以提高运算速度,而对使用频率低且难于用仿真实现的指令则用模拟方法来实现。
3. 采用统一高级语言方法
如果能采用一种可以满足各种应用需要的通用高级语言,那么用这种语言编写的应用软件可移植问题就解决了。如果操作系统的全部或一部分是用这种高级语言编写,则系统软件中的这部分也可以移植,所以采用统一高级语言来编写应用软件和系统软件是实现软件移植的一种方法。这种方法可以解决结构相同或完全不同的各种机器上的软件移植。要统一高级语言,语言的标准化很重要,但难以在短期内解决。