1.2 计算机系统层次结构
计算机系统(CO 自命名)
1、CO的组成
硬件系统和软件系统共同构成了一个完整的计算机系统
——硬件:有形的物理设备,是CO中实际物理装置的总称
——软件:在硬件上运行的程序和相关的数据及文档
2、计算机硬件
冯·诺依曼机基本思想
存储程序 的基本思想是:将事先编制好的程序和原始数据送入主存后才能执行,一旦程序被启动执行,就无须操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。
冯·诺依曼在研究EDVAC机时提出了存储程序
的概念,
存储程序
的思想 奠定了现代计算机的基本结构,- 以此概念为基础的各类计算机通称为冯·诺依曼机,
其特点如下:
- 采用“存储程序”的工作方式。
- 计算机硬件系统由5大部件组成: 运算器、存储器、控制器、输入设备和输出设备。
- 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。
- 指令和数据均用二进制代码表示。
——指令由操作码和地址码组成,
操作码指出操作的类型,
地址码指出操作数的地址。
计算机的功能部件
1 输入设备 输出设备
——输入/输出设备(I/O设备)是计算机与外界联系的桥梁,是计算机中不可缺少的重要组成部分。
2 存储器
存储器分为主存储器(内存储器)和辅助存储器(外存储器)
——主存储器
CPU能够直接访问的存储器是主存储器。
主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式。
——辅助存储器
辅助存储器用于帮助主存储器记忆更多的信息,
辅助存储器中的信息必须调入主存后,才能为 CPU所访问。
主存储器的最基本组成如图所示。
- 存储体存放二进制信息,
- 地址寄存器(MAR) 存放访存地址,经过地址译码后找到所选的存储单元。
- 数据寄存器(MDR) 用于暂存要从存储器中读或写的信息,
- 时序控制逻辑用于产生存储器操作所需的各种时序信号。
存储体由许多存储单元组成,
每个存储单元包含若干存储元件,
每个存储元件存储一位二进制代码“0”或“1”。
因此存储单元可存储一串二进制代码,称这串代码为存储字,称这串代码的位数为存储字长,存储字长可以是1B(8bit)或是字节的偶数倍。
MAR用于寻址,其位数对应着存储单元的个数,如MAR为10位,则有2^10=1024个存储单元,记为1K。MAR的长度与PC的长度相等。
MDR的位数和存储字长相等,一般为字节的2次幂的整数倍。
注意:MAR与MDR虽然是存储器的一部分,但在现代计算机中却是存在于CPU中的
3 运算器
——是计算机的执行部件,用于进行算术运算和逻辑运算。
——运算器的核心是算术逻辑单元(ALU)。
——运算器包含若干通用寄存器,用于暂存操作数和中间结果,
如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、 变址寄存器(IX)、基址寄存器(BR)等,其中前3个寄存器是必须具备的。
——运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息,如结果是否溢出、有无产生进位或借位、结果是否为负等。
4 控制器
——控制器是计算机的指挥中心,由其“指挥”各部件自动协调地进行工作。
——控制器由程序计数器(PC)、指令寄存器(IR)、控制单元(CU)组成。
——PC用来存放当前欲执行指令的地址,具体自动+1的功能(这里的“1”指一条指令的长度), 即可自动形成下一条指令的地址,它与主存的MAR之间有一条直接通路。
——IR用来存放当前的指令,其内容来自主存的MDR指令中的操作码OP(IR)送至CU, 用以分析指令并发出各种微操作命令序列
——而 地址码Ad(IR) 送往 MAR,用以取操作数。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU)
CPU和主存储器共同构成主机,而除主机外的其他硬件装置(外存、IO设备等)统称为外部设备,简称外设。
CPU包含ALU、通用寄存器组GPRs、标志寄存器、 控制器、指令寄存器IR、程序计数器PC、存储器地址寄存器MAR\存储器数据寄存器MDR。
图中从控制器送出的虚线就是控制信号,可以控制如何修改PC以得到下一条指令的地址,可以控制ALU执行什么运算,可以控制主存是进行读操作还是写操作(读/写控制信号)
3、计算机软件
按其功能分类,可分为系统软件和应用软件
系统软件是一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。
系统软件主要有操作系统(OS)、数据库管理系统(DBMS)、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等。
应用软件是指用户为解决某个应用领域中的各类问题而编制的程序,如各种科学计算类程序、工程设计类程序、数据统计与处理程序等。
三个级别的语言
- 机器语言(二进制代码语言):
——需要编程人员记忆每条指令的二进制编码
——机器语言是计算机唯一可以直接识别和执行的语言
- 汇编语言
——汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。
——使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为机器语言程序后,才能在计算机的硬件系统上执行。 - 高级语言
——高级语言(如C、C++、java等)是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。
——通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。
由于计算机无法直接理解和执行高级语言程序,翻译程序有以下三类:
——汇编程序(汇编器)
将汇编语言程序翻译成机器语言程序。
——解释程序(解释器)
将源程序中的语句按执行顺序逐条翻译成机器指令并立即执行。
——编译程序(编译器)
将高级语言程序翻译成汇编语言或机器语言程序。
软件和硬件的逻辑功能等价性
-
硬件实现的往往是最基本的算术和逻辑运算功能,而其他功能大多通过软件的扩充得以实现。
-
对某一功能来说,既可以由硬件实现,又可以由软件实现,从用户的角度来看,它们在功能上是等价的。
-
例如,浮点数运算既可以用专门的浮点运算器硬件实现,又可以通过一段子程序实现,这两种方法在功能上完全等效,不同的只是执行时间的长短而已,显然硬件实现的性能要优于软件实现的性能。
-
软件和硬件逻辑功能的等价性是计算机系统设计的重要依据,
-
软、硬件的功能分配 及 其界面的确定 是计算机系统结构研究的重要内容。
-
当研制一台计算机时,设计者必须明确分配每一级的任务,确定哪些功能使用硬件实现,哪些功能使用软件实现。
-
软件、硬件功能界面的划分是由设计目标、性能价格比、技术水平等综合因素决定的
-
一个功能若其自身使用频繁 且 用硬件实现的成本较为理想,使用硬件解决可以提高效率。
4、计算机系统的层次结构
计算机是一个硬软件组成的综合体。
由于软/硬件的设计者和使用者从不同的角度、用不同的语言来对待同一个计算机系统,因此他们看到的计算机系统的属性对计算机系统提出的要求也就各不相同。
计算机系统的多级层次结构的作用,就是针对上述情况,根据从各种角度所看到的机器之间的有机联系,来分清彼此之间的界面,明确各自的功能,以便构成合理、高效的计算机系统。
关于计算机系统层次结构的分层方式,目前尚无统一的标准:
第1级是微程序机器层,这是一个实在的硬件层, 它由机器硬件直接执行微指令。
第2级是传统机器语言层,它也是一个实际的机器层,由微程序解释机器指令系统。
第3级是操作系统层,它由操作系统程序实现。操作系统程序是由机器指令和广义指令组成的,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称混合层。
第4级是汇编语言层,它为用户提供一种符号化的语言,借此可编写汇编语言源程序。这一层由汇编程序支持和执行。
第5级是高级语言层,它是面向用户的,是为方便用户编写应用程序而设置的。该层由各种高级语言编译程序支持和执行。在高级语言层之上,还可以有应用程序层。
- 没有配备软件的纯硬件系统称为裸机
- 第3层~第5层称为虚拟机,简单来说就是软件实现的机器。
虚拟机器只对该层的观察者存在,这里的分层和计算机网络的分层类似,对于某层的观察者来说,只能通过该层的语言来了解和使用计算机,而不必关心下层是如何工作的。 - 层次之间的关系紧密,下层是上层的基础,上层是下层的扩展
- 软件和硬件之间的界面就是指令集体系结构(ISA),ISA定义了一台计算机可以执行的所有指令的集合,每条指令规定了计算机执行什么操作,以及所处理的操作数存放的地址空间和操作数类型。
- 可以看出,ISA是指软件能感知到的部分,也称软件可见部分。
5、计算机系统工作原理
5.1“存储程序”工作方式
-
“存储程序”工作方式规定,程序执行前,需要将程序所含的指令和数据送入主存,一旦程序被启动执行,就无须操作人员的干预, 自动逐条完成指令的取出和执行任务。
-
一个程序的执行就是周而复始地执行一条一条指令的过程。
-
每条指令的执行过程包括:
从主存取指令、对指令进行译码、计算下条指令地址、取操作数并执行、将结果送回存储器。 -
程序执行前,先将程序第一条指令的地址存放到PC中,取指令时,将PC的内容作为地址访问主存。
-
在每条指令执行过程中, 都需要计算下条将执行指令的地址,并送至PC。
若当前指令为顺序型指令,则下条指令地址为PC的内容加上当前指令的长度;若当前指令为转跳型指令,则下条指令地址为指令中指定的目标地址。 -
当前指令执行完后,根据PC的值到主存中取出的是下条将要执行的指令,因而计算机能周而复始地自动取出并执行一条一条的指令。
5.2 从源程序到可执行文件
预处理阶段——编译阶段——汇编阶段——链接阶段
5.3 程序执行过程的描述
-
程序的执行过程就是数据在CPU、主存储器和IO设备之间流动的过程,
-
所有数据的流动都是通过总线、IO接口等进行的。
-
在程序的执行过程中,必须依靠操作系统的支持。用户程序不能直接访问某些底层硬件(键盘、磁盘等),需要依靠操作系统内核来完成。(eg:用户程序需要调用内核的read系统调用来读取磁盘上的文件。)
5.4 指令执行过程的描述
- 可执行文件代码段是由一条一条机器指令构成的,
- 指令是用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(控制单元)
- 指令译码并送出控制信号。
- 控制器根据IR中指令的操作码,生成相应的控制信号,送到不同的执行部件。
- 在本例中,IR中是取数指令,因此读控制信号被送到总线的控制线上。
Ⅲ执行指令:Ad(IR)→ MAR →M→ MDR →ACC(累加器)
- 取数操作。
- 将IR中指令的地址码送MAR,MAR中的内容送地址线,
- 同时控制器将读信号送 读/写信号线,从主存中读出操作数,
- 并通过数据线送至MDR,再传送到ACC中。
- 每取完一条指令,还须为取下条指令做准备,计算下条指令的地址,即(PC)+1→PC