传统计算机系统采用分层方式构建,即计算机系统是一个层次结构系统,通过向上层用户提供一个抽象的简洁接口将较低层次的实现细节隐藏起来。计算机解决应用问题的过程就是不同抽象层进行转换的过程。
图1-6是计算机系统抽象层及其转换示意图,描述了从最终用户希望计算机完成的应用(问题)到电子工程师使用器件完成基本电路设计的转换过程。
图1-6 计算机系统抽象层及其转换
希望计算机完成或解决的任何一个应用(问题)最开始是用自然语言描述的,但是,计算机硬件只能理解机器语言,而要将一个用自然语言描述的应用问题转换为机器语言程序,需要经过多个抽象层的转换。
首先,将应用问题转化为算法(Algorithm)描述,使应用问题的求解变成流程化的清晰步骤,并能确保步骤是有限的。任何一个问题都可能有多个求解算法,需要进行算法分析以确定哪种算法在时间和空间上能够得到优化。
其次,将算法转换为用编程语言描述的程序(Program),这个转换过程通常是手工进行的,也就是说,需要程序员进行程序设计。程序语言(Programming Language)与自然语言不同,它有严格的执行顺序,不存在二义性,能够唯一地确定计算机执行指令的顺序。编程语言可以分成各类不同抽象层的编程语言、适用于不同领域的编程语言、采用不同描述结构的编程语言等,目前大约有上千种编程语言。从抽象层次上来分,可以分成高级语言和低级语言两类。高级语言(High-Level Language)与底层计算机结构关联不大,是机器无关语言,大部分编程语言都是高级语言;低级语言(Low-Level Language)则与运行程序的计算机的底层结构密切相关,通常称为机器级语言(Machine-Level Language),机器语言和汇编语言都是机器级语言。机器语言(Machine Language)就是用二进制进行编码的机器指令(Instruction),每条机器指令都是一个0/1序列,因此,机器语言程序的可读性很差,也不易于记忆,给程序员的编写和阅读带来极大的困难。因此,人们引入了一种机器语言的符号表示语言,用简短的英文符号和二进制代码建立对应关系,以方便程序员编写和阅读机器语言程序,这种语言被称为汇编语言(Assembly Language)。因为高级语言的可读性比低级语言的可读性好得多,所以,绝大部分程序员都使用高级语言编写程序。
然后,将高级语言程序转换成计算机能够理解的机器语言程序。因为这个转换过程是计算机自动完成的,所以需要有能够执行自动转换的程序,我们把实现这种转换的软件统称为程序设计语言处理系统。通常,程序员借助程序设计语言处理系统来开发软件。任何一个语言处理系统中都包含一个翻译程序(Translator),它能把一种编程语言表示的程序转换为等价的另一种编程语言表示的程序。被翻译的语言和程序分别称为源语言和源程序,翻译生成的语言和程序分别称为目标语言和目标程序。翻译程序有以下三类。
· 汇编程序(Assembler):也称汇编器,用来将汇编语言源程序翻译成机器语言目标程序。
· 解释程序(Interpreter):也称解释器,用来将源程序中的语句按其执行顺序逐条翻译成机器指令并立即执行。
· 编译程序(Compiler):也称编译器,用来将高级语言源程序翻译成汇编语言或机器语言目标程序。
当然,所有的语言处理系统都必须在操作系统提供的计算机环境中运行,操作系统是对计算机底层结构和计算机硬件的一种抽象,这种抽象构成了一台可以让程序员使用的虚拟机(Virtual Machine)。
从应用问题到机器语言程序的每次转换所涉及的概念都属于软件的范畴,而机器语言程序所运行的计算机硬件和软件之间需要有一个“桥梁”,这个软件和硬件之间的“桥梁”就是指令集体系结构(Instruction Set Architecture,ISA),简称为体系结构或系统结构(Architecture),它是软件和硬件之间接口的完整定义。ISA定义了一台计算机可以执行的所有指令的集合,每条指令规定了计算机执行什么操作,以及所处理的操作数存放的地址空间和操作数类型。ISA规定的内容包括:数据类型及格式,指令系统格式,寻址方式和可访问地址空间大小,程序可访问的寄存器个数、位数和编号,控制寄存器的定义,I/O空间的编址方式,中断结构,机器工作状态的定义和切换,输入/输出结构和数据传送方式,存储保护方式等。可以看出,指令集体系结构是指软件能感知到的部分,也称为软件可见部分。
机器语言程序就是一个ISA规定的指令的序列,因此,计算机硬件执行机器语言程序的过程就是让其执行一条一条指令的过程。ISA是对指令系统的一种规定或结构规范,具体实现的组织(Organisation)称为微体系结构(Microarchitecture),简称微架构。ISA和微体系结构是两个不同层面上的概念,微体系结构是软件不可感知的部分。例如,加法器采用串行进位方式还是并行进位方式实现属于微体系结构。相同的ISA可能具有不同的微体系结构,例如,对于Intel x86这种ISA,很多处理器的组织方式不同,即具有不同的微体系结构,但因为它们具有相同的ISA,所以在一种处理器上运行的程序也能在另一种处理器上运行。
微体系结构最终是由逻辑电路(Logic Circuit)实现的,当然,微体系结构中的一个功能部件可以用不同的逻辑来实现,用不同的逻辑实现方式得到的性能和成本是有差异的。
最后,每个基本的逻辑电路都是按照特定的器件技术(Device Technology)实现的,例如CMOS电路中使用的器件和NMOS电路中使用的器件不同。