目录

一、计算机系统层次结构1. 计算机系统的组成2. 计算机硬件1)冯·诺依曼机的基本思想2)现代计算机的结构3)计算机的功能部件4)计算机的工作过程

3. 计算机软件1)应用软件和系统软件2)三个级别的语言3)软件和硬件的逻辑功能等价性

4. 计算机系统的层次结构5. 计算机系统的工作原理1)存储程序工作方式2)从源程序到可执行文件3)指令执行过程的描述

二、计算机的性能指标1. 机器字长2. 数据通路带宽3. 主存容量4. 运算速度1)系统整体的性能指标2)CPU的性能指标

5. 基准程序6. 专业术语

三、本章小结

一、计算机系统层次结构

1. 计算机系统的组成

计算机系统 = 硬件系统 + 软件系统。

硬件:是指有形的物理设备,是计算机系统中实际物理装置的总称。

软件:是指在硬件上运行的程序和相关的数据及文档。

注:对某一功能来说,其既可以用软件实现,又可以用硬件实现,则称为软硬件在逻辑功能上是等价的。

2. 计算机硬件

【总结】:

1)冯·诺依曼机的基本思想

冯·诺依曼机利用了“存储程序”的思想。

“存储程序”的基本思想是:将事先编制好的程序和原始数据送入主存后才能执行,一旦程序被启动执行,就无须操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。

冯·诺依曼计算机的特点:

计算机由五大部件(运算器、存储器、控制器、输入设备、输出设备)组成;

指令和数据以同等地位存于存储器(可按地址寻访),形式上没有区别,但计算机应能区分它们;

指令和数据均用二进制表示;

指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址;

采用 “存储程序” 的工作方式,基本工作方式是控制流驱动方式(数据信息流是被动地调用处理);

以运算器为中心(输入/输出设备与存储器之间的数据传送通过运算器完成)。

2)现代计算机的结构

注:现代计算机以存储器为中心。

一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU = 运算器 + 控制器)。CPU 和主存储器共同构成主机,而除主机外的其他硬件装置(外存、I/O 设备等)统称为外部设备, 简称外设。

3)计算机的功能部件

【总结】:

① 输入设备:

输入设备的主要功能是将程序和数据以机器所能识别和接受的信息形式输入计算机。最常用也最基本的输入设备是键盘,此外还有鼠标、扫描仪、摄像机等。

② 输出设备:

输出设备的任务是将计算机处理的结果以人们所能接受的形式或其他系统所要求的信息形式输出。最常用、最基本的输出设备是显示器、打印机。输入/输出设备(简称 I/O 设备)是计算机与外界联系的桥梁,是计算机中不可缺少的重要组成部分。

③ 存储器:

存储器分为主存储器(又称内存储器)和辅助存储器(又称外存储器)。CPU 能够直接访问的存储器是主存储器。辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能为 CPU 所访问。

主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式。

存储体存放二进制信息。

地址寄存器(MAR)存放访存地址,经过地址译码后找到所选的存储单元。 MAR 用于寻址, 其位数对应着存储单元的个数,MAR 的长度与 PC 的长度相等。

数据寄存器(MDR)用于暂存要从存储器中读或写的信息。 MDR 的位数和存储字长相等,一般为字节的 2 次幂的整数倍。

时序控制逻辑用于产生存储器操作所需的各种时序信号。

注意: MAR 与 MDR 虽然是存储器的一部分,但在现代计算机中却是存在于 CPU 中的;另外,后文提到的高速缓存(Cache)也存在于 CPU 中。

④ 运算器:

运算器是计算机的执行部件,用于进行算术运算和逻辑运算。算术运算是按算术运算规则进行的运算,如加、减、乘、除;逻辑运算包括与、或、非、异或、比较、移位等运算。

运算器的核心是算术逻辑单元(Arithmetic and Logical Unit, ALU)。

运算器包含若干通用寄存器,用于暂存操作数和中间结果,如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)等,其中前 3 个寄存器是必须具备的。

运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放 ALU 运算得到的一些标志信息或处理机的状态信息,如结果是否溢出、有无产生进位或借位、结果是否为负等。

⑤ 控制器:

控制器是计算机的指挥中心,由其“指挥“各部件自动协调地进行工作。控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。

PC 用来存放当前欲执行指令的地址, 具体自动加 1 的功能(这里的“1”指一条指令的长度),即可自动形成下一条指令的地址,它与主存的 MAR 之间有一条直接通路。

IR 用来存放当前的指令,其内容来自主存的 MDR 。指令中的操作码 OP(IR) 送至 CU ,用以分析指令并发出各种微操作命令序列;而地址码 Ad(IR) 送往 MAR ,用以取操作数。

4)计算机的工作过程

下面展示计算 a·b+c 的过程

① 取数 a 至 ACC 中:

② 乘 b 得 a·b ,存于 ACC 中:

③ 加 c 得 a·b+c ,存于 ACC 中:

④ 将 a·b+c ,存于主存单元:

⑤ 停机:

3. 计算机软件

【总结】:

1)应用软件和系统软件

软件按其功能分类,可分为系统软件和应用软件。

系统软件是一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。系统软件主要有操作系统(OS)、数据库管理系统(DBMS)、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等。

应用软件是指用户为解决某个应用领域中的各类问题而编制的程序,如各种科学计算类程序、工程设计类程序、数据统计与处理程序等。

2)三个级别的语言

编译器、汇编器、解释器,可统称“翻译程序” 。

机器语言:又称二进制代码语言,需要编程人员记忆每条指令的二进制编码。 机器语言是计算机唯一可以直接识别和执行的语言。

汇编语言:汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。 使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为机器语言程序后,才能在计算机的硬件系统上执行。

高级语言:高级语言(如 C 、C++ 、Java 等)是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。 通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。

由于计算机无法直接理解和执行高级语言程序,需要将高级语言程序转换为机器语言程序,通常把进行这种转换的软件系统称为翻译程序。翻译程序有以下三类:

汇编程序(汇编器):将汇编语言程序翻译成机器语言程序。

解释程序(解释器) :将源程序中的语句按执行顺序逐条翻译成机器指令并立即执行。

编译程序(编译器):将高级语言程序翻译成汇编语言或机器语言程序。

编译程序是先完整编译后运行的程序(只需翻译一次),如 C 、C++ 等;解释程序是一句一句翻译且边翻译边执行的程序(每次执行都要翻译),如 JavaScript 、Python 等。 【注】:编译程序编译时间较长,运行速度较快;解释程序方法较简单,运行速度较编译程序慢(要边翻译成机器语言边执行)。

3)软件和硬件的逻辑功能等价性

软件和硬件的逻辑功能等价性:同一个功能,既可以用硬件实现(性能高成本高),也可以用软件实现(性能低成本也低)。

4. 计算机系统的层次结构

第 1 层 M0 :微程序机器(执行微指令),这是一个实在的硬件层,它由机器硬件直接执行微指令;

第 2 层 M1 :传统机器(执行机器语言指令),它也是一个实际的机器层,由微程序解释机器指令系统;

第 3 层 M2 :操作系统机器(向上提供广义指令),它由操作系统程序实现,操作系统程序是由机器指令和广义指令组成的,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称混合层;

第 4 层 M3 :汇编机器(执行汇编语言),它为用户提供一种符号化的语言,借此可编写汇编语言源程序,这一层由汇编程序支持和执行;

第 5 层 M4 :高级语言机器(执行高级指令),它是面向用户的,是为方便用户编写应用程序而设置的。该层由各种高级语言编译程序支持和执行。在高级语言层之上,还可以有应用程序层,它由解决实际问题的处理程序组成,如文字处理软件、多媒体处理软件和办公自动软件等。

没有配备软件的纯硬件系统称为裸机。第 3 层~第 5 层称为虚拟机,简单来说就是软件实现的机器。

软件和硬件之间的界面就是指令集体系结构(ISA),ISA 定义了一台计算机可以执行的所有指令的集合,每条指令规定了计算机执行什么操作,以及所处理的操作数存放的地址空间和操作数类型。可以看出, ISA 是指软件能感知到的部分,也称软件可见部分。

5. 计算机系统的工作原理

1)存储程序工作方式

“存储程序”工作方式规定,程序执行前,需要将程序所含的指令和数据送入主存,一旦程序被启动执行,就无须操作人员的干预,自动逐条完成指令的取出和执行任务。

如上图所示,一个程序的执行就是周而复始地执行一条一条指令的过程。每条指令的执行过程包括:从主存取指令、对指令进行译码、计算下条指令地址、取操作数并执行、将结果送回存储器。

程序执行前,先将程序第一条指令的地址存放到 PC 中,取指令时,将 PC 的内容作为地址访问主存。在每条指令执行过程中,都需要计算下条将执行指令的地址,并送至 PC。若当前指令为顺序型指令,则下条指令地址为 PC 的内容加上当前指令的长度;若当前指令为转跳型指令,则下条指令地址为指令中指定的目标地址。当前指令执行完后,根据 PC 的值到主存中取出的是下条将要执行的指令,因而计算机能周而复始地自动取出并执行一条一条的指令。

2)从源程序到可执行文件

从 C 语言源程序到可执行文件:

预处理阶段:预处理器(cpp)对源程序中以字符#开头的命令进行处理,例如将#include 命令后面的 .h 文件内容插入程序文件。输出结果是一个以 .i 为扩展名的源文件 hello.i 。

编译阶段:编译器(ccl)对预处理后的源程序进行编译, 生成一个汇编语言源程序 hello.s 。汇编语言源程序中的每条语句都以一种文本格式描述了一条低级机器语言指令。

汇编阶段:汇编器(as)将 hello.s 翻译成机器语言指令,把这些指令打包成一个称为可重定位目标文件的 hello.o ,它是一种二进制文件,因此用文本编辑器打开会显示乱码。

链接阶段:链接器(Id)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件,或简称可执行文件。本例中,链接器将 hello.o 和标准库函数 printf 所在的可重定位目标模块 printf.o 合并,生成可执行文件 hello 。最终生成的可执行文件被保存在磁盘上。

3)指令执行过程的描述

可执行文件代码段是由一条一条机器指令构成的,指令是用 0 和 1 表示的一串 0/1 序列,用来指示 CPU 完成一个特定的原子操作。例如,取数指令从存储单元中取出一个数据送到 CPU 的寄存器中,存数指令将 CPU 寄存器的内容写入一个存储单元, ALU 指令将两个寄存器的内容进行某种算术或逻辑运算后送到一个 CPU 寄存器中,等等。

下面以取数指令(送至运算器的 ACC 中)为例来说明,其信息流程如下:

取指令: PC → MAR → M → MDR → IR 根据 PC 取指令到 IR :将 PC 的内容送 MAR ,MAR 中的内容直接送地址线,同时控制器将读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上, MDR 从数据线接收指令信息,并传送到 IR 中。

分析指令: OP(IR) → CU 指令译码并送出控制信号:控制器 CU 根据 IR 中指令的操作码,生成相应的控制信号,送到不同的执行部件。在本例中, IR 中是取数指令,因此读控制信号被送到总线的控制线上。

执行指令: Ad(IR) → MAR → M → MDR → ACC 取数操作:将 IR 中指令的地址码送 MAR ,MAR 中的内容送地址线,同时控制器将读信号送读/写信号线,从主存中读出操作数,并通过数据线送至 MDR ,再传送到 ACC 中。每取完一条指令,还须为取下条指令做准备,计算下条指令的地址,即 (PC)+1 → PC 。

注意:(PC) 指程序计数器 PC 中存放的内容。PC → MAR 又应理解为 (PC) → MAR ,即程序计数器中的值经过数据通路送到 MAR ,也即表示数据通路时括号可省略(因为只是表示数据流经的途径,而不强调数据本身的流动)。但运算时括号不能省略,即 (PC)+1 → PC 不能写为 PC+1 → PC。

二、计算机的性能指标

【总结】:

1. 机器字长

字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数,通常与 CPU 的寄存器位数、加法器有关。因此,字长一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高。计算机字长通常选定为字节(8 位)的整数倍。

2. 数据通路带宽

3. 主存容量

4. 运算速度

1)系统整体的性能指标

2)CPU的性能指标

IPC 表示每个时钟周期运行多少条指令,它是 CPI 的倒数。

5. 基准程序

基准程序(Benchmarks)是专门用来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能,可以通过在不同机器上运行相同的基准程序来比较在不同机器上的运行时间,从而评测其性能。对于不同的应用场合,应该选择不同的基准程序。

6. 专业术语

系列机:具有基本相同的体系结构,使用相同基本指令系统的多个不同型号的计算机组成的一个产品系列。

兼容:指软件或硬件的通用性,即运行在某个型号的计算机系统中的硬件/软件也能应用于另一个型号的计算机系统时,称这两台计算机在硬件或软件上存在兼容性。

软件可移植性:指把使用在某个系列计算机中的软件直接或进行很少的修改就能运行在另一个系列计算机中的可能性。

固件:将程序固化在 ROM 中组成的部件称为固件。固件是一种具有软件特性的硬件,吸收了软/硬件各自的优点,其执行速度快于软件,灵活性优于硬件,是软/硬件结合的产物。例如,目前操作系统已实现了部分固化(把软件永恒地存储于 ROM 中)。

三、本章小结

1、计算机由哪几部分组成?以哪部分为中心?

计算机由运算器、控制器、存储器、输入设备及输出设备五大部分构成,现代计算机通常把运算器和控制器集成在一个芯片上,合称为中央处理器。

而在微处理器面世之前,运算器和控制器分离,而且存储器的容量很小,因此设计成以运算器为中心的结构,其他部件都通过运算器完成信息的传递。

随着微电子技术的进步,同时计算机需要处理、加工的信息量也与日俱增,大量 I/O 设备的速度和 CPU 的速度差距悬殊,因此以运算器为中心的结构不能满足计算机发展的要求。现代计算机已经发展为以存储器为中心,使 I/O 操作尽可能地绕过 CPU ,直接在 I/O 设备和存储器之间完成,以提高系统的整体运行效率。

2、翻译程序、解释程序、汇编程序、编译程序的区别和联系是什么?

翻译程序有两种:

一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,只要源程序不变,就无须重新翻译。

另一种是解释程序,它将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。

汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译为机器语言程序。

编译程序与汇编程序的区别:

若源语言是诸如 C 、C++ 、Java 等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,则这样的一个翻译程序称为编译程序。

若源语言是汇编语言,而目标语言是机器语言,则这样的一个翻译程序称为汇编程序。

3、什么是透明性?透明是指什么都能看见吗?

在计算机领域中,站在某类用户的角度,若感觉不到某个事物或属性的存在,即“看”不到某个事物或属性,则称为“对该用户而言,某个事物或属性是透明的”。这与日常生活中的“透明”概念(公开、看得见)正好相反。

例如,对于高级语言程序员来说,浮点数格式、乘法指令等这些指令的格式、数据如何在运算器中运算等都是透明的;而对于机器语言或汇编语言程序员来说,指令的格式、机器结构、数据格式等则不是透明的。

在 CPU 中,IR 、MAR 和 MDR 对各类程序员都是透明的。

4、字、字长、机器字长、指令字长、存储字长的区别和联系是什么?

在通常所说的“某 16 位或 32 位机器”中,16、32 指的是字长,也称机器字长。所谓字长,通常是指 CPU 内部用于整数运算的数据通路的宽度,因此字长等于 CPU 内部用于整数运算的运算器位数和通用寄存器宽度,它反映了计算机处理信息的能力。

字和字长的概念不同。字用来表示被处理信息的单位,用来度量数据类型的宽度,如 x86 机器中将一个字定义为 16 位。

指令字长:一个指令字中包含的二进制代码的位数。 指令字长一般取存储字长的整数倍,若指令字长等于存储字长的 2 倍,则需要 2 个访存周期来取出一条指令;若指令字长等于存储字长,则取指周期等于机器周期。

存储字长:一个存储单元存储的二进制代码的长度。 早期的存储字长一般与指令字长、字长相等,因此访问一次主存便可取出一条指令或一个数据。

随着计算机的发展,指令字长、字长都可变,但必须都是字节的整数倍。

5、计算机体系结构和计算机组成的区别和联系是什么?

计算机体系结构是指:机器语言或汇编语言程序员所看得到的传统机器的属性,包括指令集、数据类型、存储器寻址技术等,大都属于抽象的属性。

计算机组成是指:如何实现计算机体系结构所体现的属性,它包含对许多对程序员来说透明的硬件细节。

例如,指令系统属于结构的问题,但指令的实现即如何取指令、分析指令、取操作数、如何运算等都属于组成的问题。因此,当两台机器指令系统相同时,只能认为它们具有相同的结构,至于这两台机器如何实现其指令,完全可以不同,即可以认为它们的组成方式是不同的。例如,一台机器是否具备乘法指令是一个结构的问题,但实现乘法指令采用什么方式则是一个组成的问题。许多计算机厂商提供一系列体系结构相同的计算机,而它们的组成却有相当大的差别,即使是同一系列的不同型号机器,其性能和价格差异也很大。

6、主频高的 CPU 一定比主频低的 CPU 快吗?为什么?

衡量 CPU 运算速度的指标有很多,不能以单独的某个指标来判断 CPU 的好坏。CPU 的主频,即 CPU 内核工作的时钟频率。CPU 的主频表示 CPU 内数字脉冲信号振荡的速度,主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为 CPU 的运算速度还要看 CPU 的流水线的各方面的性能指标(架构、缓存、指令集、CPU 的位数、Cache 大小等)。由于主频并不直接代表运算速度,因此在一定情况下很可能会出现主频较高的 CPU 实际运算速度较低的现象。

7、不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?

机器语言和汇编语言与机器指令对应,而高级语言不与指令直接对应,具有较好的可移植性。其中机器语言可以被硬件直接执行。

8、基准程序执行得越快说明机器的性能越好吗?

一般情况下,基准测试程序能够反映机器性能的好坏。但是,由于基准程序中的语句存在频度的差异,因此运行结果并不能完全说明问题。