计算机系统结构

从程序设计的角度研究的计算机的概念性结构和功能特性。G.M.亚当等人为了说明和研究从程序设计角度所看到的计算机的属性(外特性),在1964年最先提出计算机系统结构的概念。一种计算机系统结构可以用多种计算机组织来实现。

计算机系统层次结构

包括软件和硬件的计算机系统可被看成是按功能划分的多级层次结构。表中每一级各对应一类机器,各有自己的机器语言。在这里,“机器”的定义是能存储、执行程序的算法和数据结构的集合体。各级机器的算法和数据结构的实现方法不同:M0由硬件实现,M1由微程序(固件)实现,M2~M5由软件实现。由软件实现的机器称为虚拟机器,以区别由硬件或固件实现的实际机器。各级的程序被翻译成比它低一级的语言的程序,或由低一级的程序解释。

图

概念性结构与功能特性

这是从程序设计者角度所看到的计算机属性。它包括机器内的数据表示、寻址方式,以及对这些数据的运算和控制这些运算的执行等(即指令系统)。不过,它并非仅包括与中央处理器有关的部分,而应是工作于机器级的程序设计者所看到的机器的所有部分,也就是包括处理机、存储系统、输入-输出联结方法和中断机构等。对于通用型机器,一般包括:数据表示(能由硬件直接辨认的数据类型,如定点、浮点数、逻辑数等);寻址方式(指令是如何访问到其操作数的,包括最小编址单元和地址运算等);寄存器定义(包括操作数寄存器、变址寄存器、控制寄存器的定义);指令系统(包括机器指令的操作类型和格式,指令间的排序和控制机构等);中断机构;机器工作状态(如管态和自态等)的定义和状态切换;机器级的输入-输出结构(包括对输入-输出设备的访问方式,输入-输出数据的源、目的与数据传送的控制,输入-输出操作的结束与出错指示)以及对信息保护的支持等。

学科内容

计算机系统结构作为学科,主要研究软件、硬件功能分配和对软件、硬件界面的确定。70年代以来,在计算机软件方面有了显著的进展。在计算机组织和实现技术上,最显著的是器件技术的进展,其次是微程序技术、并行技术、专用部件和运算方法等方面的进展。计算机在性能、速度、价格、可靠性和组织、实现技术上虽比50年代末60年代初有了巨大的突破,然而,它们的系统结构却并没有什么明显的、突破性的进展。从程序设计者的角度所看到的计算机的属性和60年代初相比,变化很小。例如,对于指令系统,程序设计者基本上仍然立足于60年代初的计算机系统结构观点来设计复杂得多的软件。

绝大多数机器的计算机系统结构,仍然没有脱离诺伊曼型(见计算机组织)的范围。但是,J.诺伊曼设计其系统结构时,既没有考虑到要采用高级语言,也没有顾及有操作系统和许多应用领域的各种要求,由此引起的矛盾日益突出。

计算机系统结构的设计要求,经历了从面向汇编程序设计,到面向编译程序设计和操作系统设计,直至增加面向应用软件研制的几个阶段。

计算机系统结构落后于其设计要求的状况,可以用语义差距来说明。这包括高级语言与机器语言的语义差距、操作系统与计算机系统结构的语义差距,以及程序设计环境与计算机系统结构的语义差距。

高级语言与机器语言的语义差距

这个差距表现在很多方面。从运算符和数据类型的关系来看,二者的用法甚至是相反的。在高级语言中,由说明语句指明数据的类型,使类型直接与数据本身相联系,但其运算符却是通用的,并无数据类型的含义;而机器语言则正相反,它是由操作码指明的运算符来决定操作数的类型。因此,在编译过程中就需要把高级语言程序中的数据类型说明语句变换成机器语言的不同数据类型操作,而且要保证运算符两边的操作数类型确实与运算符所要求的相等。

采用带标志符的数据表示,即由每个数据的标志位指明数据是二进制整数、十进制整数、浮点数、字符串,还是地址等,可以显著缩小这方面的语义差距,从而有两方面的好处。

(1)简化程序设计:标志符数据表示能提高指令的通用性。例如,加法指令只需一种,而不必分为二进制加、十进制加、浮点加、逻辑加等,可减少指令种类,简化汇编程序设计。

(2)为应用软件的研制提供支持:采用标志符技术,可由机器硬件直接检测出多种程序设计错误,例如操作数错误定义、不相容、有未被定义的操作数等,从而提供了“类型安全环境”。由于每一字都可以有“软件定义捕捉标志符”而有助于程序跟踪和调试。此外,还能简化编译过程,由硬件直接执行数据变换,并有利于数据库系统去实现与数据类型的无关性。

标志符技术的缺点是使字长增加,每条指令所需的操作和拍数增加。从计算机的微观性能,如从机器的运算速度来看,标志符的引入是不利的;但从宏观性能,如从程序的编制、调试和执行的总开销来看,却是有利的。标志符技术已应用于一些微、小型机,很可能被下一代计算机所采用。另外,采用堆栈、向量数据表示也有利于缩小语义差距。

诺伊曼型计算机系统结构的寻址方式是对应于一维、线性、顺序编址的存储空间的。这和数据结构的要求并不一致,如数据结构往往是多维离散结构,就是名称变量也多是离散分布,因而须由软件进行映像和变换。要研究高级寻址方式以缩短数据结构与数据表示、寻址方式的语义差距。

人们早就提出应缩小高级语言与机器语言的语义差距,但一直没有根本改变,原因是多方面的。高级语言本身是多样化的,不稳定的,而且各种语言的语义结构也有较大差别。如果计算机系统结构被设计成语义结构尽量接近于某一种语言,则实现这种语言的效率必然很高;然而对语义结构与该语言差别较大的另一种高级语言来说,实现效率就可能比一般机器还低。对于需要设置多种高级语言的机器,只按一种高级语言来缩小语义差距,从整体来看往往是害多利少。因此,人们只得把计算机系统结构设计成比较通用的,使各种常用高级语言在语义差距上尽可能相近。这就是一般机器的计算机系统结构难以真正面向缩短语义差距的一个主要原因。当然,绝不是语义差距不能有任何缩小。人们已提出多种方案,也构成了一些实际机器,它们可按图分类。

图

编译中主要是采用翻译技术。采用微程序控制的机器,则是通过解释来实现机器语言的。因此,语义差距的缩小意味着增大解释的比重,减少翻译的比重。计算机系统要设置对应多种语言的多个编译系统,为缩小语义差距所需增大的解释部分,可以为多个编译系统用以简化翻译过程,这从总体上看是合理的。

图中传统机器的计算机系统结构是典型的诺伊曼型结构,它的语义差距最大,解释的分量比翻译的少得多。面向高级语言的机器采用多种缩小语义差距的措施,它的解释的分量明显增大。

进一步增大解释的比重,直至几乎没有语义差距,则可达到使高级语言成为机器的汇编语言,这种机器被称为高级语言机器。它用汇编的方法把高级语言源程序翻译成机器语言程序。高级语言机器本身也可以没有机器语言,而直接由硬件和固件对高级语言源程序的语句逐条进行解释。它既没有编译程序,也不用汇编程序,这种机器被称为直接执行高级语言机器。已有的高级语言机器还没有较好的性能价格比。随着超大规模集成电路的发展,高级语言机器必然会得到发展。

缩小语义差距,改进指令系统、寻址方式和数据表示的目的远不限于简化编译程序的设计和提高代码生成的效率。对于计算机系统来说,编译程序只是软件中很小的一部分,而且它是由专门的、熟练的软件人员来设计的,又往往只须1~2年设计一次。然而,应用软件的开发却要天天进行,而且设计人员的水平相对比较低。应用软件的调试和排错开销很大,因而,应从计算机系统结构方面来改善软件的开发,如由硬件发现高级语言程序的语法、语义和词法上的错误,指明其错误所在,并将它返回映像到源程序,以及对安全性和程序的模块化提供更好的条件等,其意义远比改进编译程序的设计大得多。

操作系统与计算机系统结构的语义差距

操作系统与计算机系统结构间的语义差距较大。例如,进程的概念是操作系统的重要基础,但是计算机系统结构对于进程的生成与撤销、进程的切换、进程间的相互控制、进行间的同步与通信等提供的条件很少,几乎没有相应的机器指令。又如,计算机系统结构提供的存储保护是对连续、定长存储块的保护,这和操作系统所要求的对子程序或变量的保护和共享,在语义上差别较大。还有,对操作系统中用得很多的表格和队等也没有反映。

人们对于尽可能缩小计算机系统结构和操作系统的语义差距,已有几乎一致的认识,而不象对高级语言机器有不同的看法。但这并不意味着应把整个操作系统的全部功能硬化或固化,宜于硬化的是“机构型”的功能,而不是“策略型”的功能。机构型功能是指基本的、通用的功能,如进程管理、信息保护和存储管理等,它们是稳定的,能够确切定义的,是常用的,因而宜于实现硬化。典型的策略型功能有上机费用计算、作业排队、用户标识、资源管理等。这些功能随环境不同而异,而且用户能够修改,所以是不稳定的,在操作系统的生存期内可能会不断变化,因而适于用软件实现。硬件实现利于提高操作系统的执行效率和速度,减少开销;软件实现利于提供应有的灵活性。

随着超大规模集成电路的发展,必然会缩小语义差距。不过语义差距也非越小越好,因为语义差距的大小实质上取决于软、硬件功能分配,而这主要应从实现费用、对速度的影响和其他性能要求来考虑,亦即考虑如何分配能提高性能价格比。

实现费用包括研制费用和重复生产费用。硬件的设计费用和重复生产费用都比软件大,宜于硬件实现的功能应该是稳定的、常用的、比较小的、而且是软件实现的速度下降会对计算机系统性能有较大影响的那些功能。硬件实现只是对产量大的计算机系统才有经济效益。如果硬件实现不能给用户带来明显的好处,则不论硬件比例多高也不会有生命力。