计算机组成原理 computer organization

低电平0

高电平1

计算机系统概述

1.发展

第一台电子数字计算机:Eniac(1946)电子管

1947年,晶体管在贝尔实验室出现

CPU是大规模集成电路

发展时间逻辑元件速度(次/s)内存外存
11946-1957电子管千 - 万汞延迟线、磁鼓穿孔卡片纸
21958-1964晶体管万 - 十万磁芯存储器磁带
31964-1971中小规模集成电路十万 - 百万半导体存储器磁带、磁盘
41972-new大规模集成电路、超大规模集成电路千万 - 万亿半导体存储器磁带、磁盘、光盘、半导体存储器

1.1分类

电子计算机可分为电子模拟计算机电子数字计算机

数字计算机又可按用途分为专用计算机通用计算机

通用计算机又分为巨型机、大型机、中型机、小型机、微型机、单片机。

在这里插入图片描述


计算机按指令和数据流可分为:

  1. 单指令流和单数据流系统(SISD),即传统冯诺依曼体系结构。
  2. 单指令流和多数据流系统(SIMD),包括阵列处理器和向量处理器系统。
  3. 多指令流和单数据流系统(MISD),这种计算机实际上不存在。
  4. 多指令流和多数据流系统(MIMD),包括多处理器和多计算机系统。

计算机的发展趋势是“两级分化”:

  1. 更微型、多途:微型计算机向更微型化、网络化、高性能、多用途方向发展;
  2. 更巨型、高速:另一极是巨型机向更巨型化、超高速、并行处理、智能化方向发展。

摩尔定律:集成电路上可容纳的晶体管数目,每隔18个月便增加一倍(每三年翻两番)

2.层次结构

请添加图片描述

硬件系统和软件系统共同构成一个完整的计算机系统。

对某一功能来说,其既可以用软件实现,又可以用硬件实现,则称为软硬件在逻辑上是等效的。在计算机系统中,许多功能既能由硬件直接实现,又可在硬件的配合下由软件实现。(例如,乘法运算既可用专门的乘法器实现,也可由乘法程序实现)在设计计算机系统时,要进行软/硬件的功能分配。一个功能若使用较为频繁且用硬件实现的成本较为理想,则使用硬件解决可以提高效率。而用软件实现可以提高灵活性,但效率往往不如硬件实现高。

e.g.:下列叙述中,正确的是()
  A.寄存器的设置对汇编语言是透明的
  B.实际应用程序的测试结果能全面代表计算机的性能
  C.系列机的基本特性是指令系统向后兼容
  D.软件和硬件在逻辑上是等价的

答案:C;向后兼容又称向下兼容(Backwards compatibility),指的是时间上向后兼容,即新机器兼容使用以前机器的指令系统,例如较高档的计算机可以运行较为低档计算机所开发的程序。对于B,全面代表计算机性能的是实际软件的运行情况。对于D,软件和硬件在逻辑上是等效的,但不是等价的。

2.1软件

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

2.1.1系统软件&应用软件

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

  • 系统软件

系统软件又称为系统程序,是一组保证计算机系统高效、正确运行的基础软件,通常作为系统资源提供给用户使用。系统软件主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,高效运行。
系统软件主要有操作系统OS、数据库管理系统DBMS、语言处理程序(如汇编程序、编译程序)、分布式软件系统、网络软件系统、标准库程序、服务性程序(如诊断程序、调试程序、连接程序)等。

注意:数据库管理系统DBMS不同于数据库系统DBS。DBMS是位于用户和OS之间的一层数据管理软件,是系统软件;DBS是指计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、数据库管理员DBA和应用系统构成。

  • 应用软件

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

2.2硬件

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

冯·诺依曼提出存储程序

第一台冯诺依曼结构计算机Edvac。

冯·诺依曼计算机特点:

  1. 5部分:I/O设备(输入设备、输出设备)、存储器、运算器、控制器
  2. 指令和数据以同等地位存储于存储器、可以按地址寻访
  3. 指令和数据用二进制表示
  4. 指令由操作码、地址码组成
  5. 存储程序:将指令以二进制代码的形式事先输入计算机的主存储器(内存)。
  6. 以运算器为中心(但是现代计算机是以存储器为中心的)。

请添加图片描述

不过现代计算机是以存储器为中心的,使I/O操作尽可能绕过CPU,直接在I/O设备和存储器之间完成,以提高系统的整体运行效率。

CPU = 运算器 + 控制器

硬盘属于辅存。

请添加图片描述

存储程序的概念是指将指令以代码形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按程序的规定顺序执行其他指令,直至程序执行结束。

CPU和主存之间通过一组总线相连,总线中有地址、控制、数据3组信号线。MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据是直接送到数据线上还是将数据线上的数据接收到MDR中。

例题:冯诺依曼机的基本工作方式是:
A.控制流驱动方式  B.多指令多数据流方式  C.微程序控制方式  D.数据流驱动方式

答案:A;冯·诺依曼机工作方式,可称为控制流(指令流)驱动方式。即按照指令的执行序列,依次读取指令,然后根据指令所含的控制信息,调用数据进行处理。B属于多处理机,冯诺依曼机是单指令流和单数据流系统;数据流驱动方式指:只有当一条或一组指令所需的操作数全部准备好时,才能激发相应指令的一次执行,执行结果又流向等待这一数据的下一条或一组指令,以驱动该条或该组指令的执行。因此,程序中各条指令的执行顺序仅仅是由指令间的数据依赖关系决定的。

例题:冯诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是()
A.指令操作码的译码结果  B.指令和数据的寻址方式  
C.指令周期的不同阶段  D.指令和数据所在的存储单元

答案:C;虽然指令和数据都以二进制存放在存储器中,但CPU可以根据指令周期的不同阶段来区分是指令还是数据,通常在取指阶段取出的是指令,在执行阶段取出的是数据。对于A,CPU只有在确定取出的是指令后,才会将其操作码送去译码,因此不可能依据译码的结果来区分指令和数据

例题:下列关于冯诺依曼结构计算机基本思想的叙述中,错误的是()
  A.程序的功能都通过中央处理器执行指令实现
  B.指令和数据都用二进制数表示,形式上无差别
  C.指令按地址访问,数据都在指令中直接给出
  D.程序执行前,指令和数据需预先存放在存储器中

答案:C;程序的功能都通过中央处理器(运算器和控制器)执行指令实现。指令按地址访问,数据由指令的地址码指出,除立即寻址外,数据均存放在存储器内。

2.2.1输入设备

输入设备的主要功能是将程序和数据以机器所能识别和接受的信息形式输入计算机。(常见的输入设备有键盘、鼠标、扫描仪、摄像机等)

2.2.2输出设备

输出设备的任务是将计算机处理的结果以人们所能接受的形式或其他系统所要求的信息形式输出(常用的输出设备有显示器、打印机等)。计算机的I/O设备是计算机与外界联系的桥梁。

2.2.3存储器

存储器是计算机的存储部件,用来存放程序和数据。

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

主存包括存储体M、各种逻辑部件及控制电路等。存储体由许多存储单元组成,每个存储单元包含若干存储元件(或称存储基元、存储元),每个存储元件存储一位二进制代码 0 or 1。因此存储单元可存储一串二进制代码,称这串代码为存储字,称这串代码的位数为存储字长,存储字长可以是1B或是字节的偶数倍。一个存储字既可代表数,也可代表一串字符,也可代表指令等。

  • 存储体

    • 存储单元:存储单元可存储一串二进制代码,称这串代码为存储字,称这串代码的位数为存储字长

      存储字长可以是1B或是字节的偶数倍。一个存储字既可代表数,也可代表一串字符,也可代表指令。

      • 存储元件:每个存储元件存储一位二进制代码 0 or 1

如果把一个存储体看成一栋大楼,那么每个存储单元可看作大楼中的每个房间,每个存储元件可看作每个房间中的一张床位,床位有人相当于1,无人相当于0。床位数相当于存储字长。每个房间都需要一个房间编号,同样可以赋予每个存储单元一个编号,称为存储单元的地址号。

请添加图片描述

主存的工作方式为:按存储单元的地址进行存取,这种存取方式称为按地址存取方式,即按地址访问存储器(简称按地址寻访,访存)。

关联存储器(相联存储器),是一种不根据地址而是根据存储内容来进行存取的存储器,可以实现快速地查找块表。相联存储器既可以按照地址寻址也可以按照内容寻址(通常是某些字段),为了与传统寄存器作区别,称为按内容寻址的存储器。

请添加图片描述

请添加图片描述

存储体存放二进制信息,
地址寄存器(MAR)存放访存地址,经过地址译码后找到所选的存储单元。
数据寄存器(MDR)用于暂存要从存储器中读或写的信息,时序控制逻辑用于产生存储器操作所需的各种时序信号。

请添加图片描述

MAR用于寻址,MAR位数 = 存储单元的个数,如MAR为10位,则有2^10=1024=1K个存储单元。MAR的长度 = PC的长度。

MDR的位数 = 存储字长,一般为字节的二次幂的整数倍。

MAR和MDR虽然是存储器的一部分,但在现代CPU中,MAR、MDR现在也可能集成到CPU里面。


:比特bit,简写为b

字节Byte,简写为B。1Byte = 8bit(1B = 8b)。

存储字长:每个存储单元中能够存储多少bit。如果每个存储单元可存放16bit,那么 1个字(word) = 16bit。

2.2.4运算器

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

运算器的核心是算术逻辑单元ALU(Arithmetic and Logical Unit)运算器包含若干通用寄存器,用于暂存操作数和中间结果,如累加器ACC乘商寄存器MQ操作数寄存器X变址寄存器IX基址寄存器BR等,其中ACC,MQ,X是必须有的

请添加图片描述

运算器内还有程序状态寄存器PSW,也称标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息。

2.2.5控制器

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

  • PC用于存放当前欲执行指令的地址,可自动+1以形成下一条指令的地址,与主存的MAR之间有一条直接通路。

  • IR用来存放当前的指令,其内容来自主存的MDR。指令中的操作码OP(IR)送至CU,用以分析指令并发出各种微操作命令序列;地址码Ad(IR)送往MAR,用以取操作数。(操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器内的位置)

请添加图片描述

2.2.6总结

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

硬件
主机
外设I/O
辅存
输入设备
输出设备
CPU
主存
存储器
算术逻辑单元ALU:计算器
控制单元CU:控制器

下图所示为冯诺依曼结构的模型机:

在这里插入图片描述

CPU包含ALU、通用寄存器组GPRs、标志寄存器、控制器、指令寄存器IR、程序计数器PC、存储器地址寄存器MAR和存储器数据寄存器MDR。

图中从控制器送出的虚线为控制信号,可控制如何修改PC以得到下一条指令的地址、ALU执行什么运算、主存是进行读操作还是写操作(读/写控制信号)。

CPU和主存之间通过一组总线相连,总线中有地址、控制、数据3组信号线。
MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;
控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据是直接送到数据线上还是将数据线上的数据接收到MDR中。

例题:在运算器中,不包含()
A.状态寄存器  B.数据总线  C.ALU  D.地址寄存器

答案:D;地址寄存器位于CPU内,但并未集成到运算器与控制器中。运算器中包含PSW、CPU内部数据总线

例题:若一个8位的计算机系统以16位来表示地址,则该计算机系统有()个地址空间

答案:2^16=65536;8位计算机表明计算机字长为8位,即一次可以处理8位的数据,而16位表示地址码的长度

例题:关于相联存储器,下列说法中正确的是()
  A.只可以按地址寻址
  B.只可以按内容寻址
  C.既可以按内容寻址又可按地址寻址
  D.以上说法均不对

答案:C;相联存储器既可以按照地址寻址也可以按照内容寻址(通常是某些字段),为了与传统寄存器作区别,称为按内容寻址的存储器。

例题:设主存储器容量为64K x 32位,且指令字长、存储字长、机器字长三者相等。写出如下图所示各寄存器的位数,并指出哪些寄存器之间有信息通路

在这里插入图片描述

答案:16位:MAR,PC;32位:MDR,IR,ACC,MQ,X;

寄存器之间的信息通路有:
PC——>MAR,MDR——>IR,Ad(IR)——>MAR,MDR——>ACC(取数)
ACC——>MDR(存数),MDR——>X(X为操作数寄存器)

(各个子系统通过数据总线连接形成的数据传送路径称为数据通路。数据通路是对于子系统之间而言的,因此答案中没有ACC与MQ,ACC与X)

2.3工作过程

计算机的工作过程分为以下3个步骤:

  1. 把程序和数据装入主存。
  2. 将源程序转换成可执行文件。
  3. 从可执行文件的首地址开始逐条执行指令。
2.3.1从源程序到可执行文件

在计算机中编写的C语言程序,都必须被转换为一系列的低级机器指令,这些指令按照一种称为可执行目标文件的格式打好包,并以二进制磁盘文件的形式存放起来。

以UNIX中的GCC编译器程序为例,读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello,整个翻译过程可分为4个阶段完成:

在这里插入图片描述

  1. 预处理阶段:预处理器cpp对源程序中以字符#开头的命令进行处理,例如将#include命令后面的.h文件内容插入程序文件。输出结果是一个以.i为扩展名的源文件hello.i
  2. 编译阶段:编译器ccl对预处理后的源程序进行编译,生成一个汇编语言源程序hello.s。汇编语言源程序中的每条语句都以一种文本格式描述了一条低级机器语言指令。
  3. 汇编阶段:汇编器as将hello.s翻译成机器语言指令,把这些指令打包成一个称为可重定位目标文件的hello.o,它是一种二进制文件
  4. 链接阶段:链接器Id将多个可重定位目标文件和标准库函数printf所在的可重定位目标模块printf.o合并,生成可执行文件hello。最终生成的可执行文件被保存在磁盘上。
2.3.2指令执行过程的描述

以取数指令(将指令地址码指示的存储单元中的操作数取出后送ACC)为例,其信息流程如下:

  1. 取指令:PC——>MAR——>M——>MDR——>IR

  2. 分析指令:OP(IR)——>CU

  3. 执行指令:Ad(IR)——>MAR——>M——>MDR——>ACC

  • 此外,每取完一条指令,还须形成下一条指令的地址,即(PC)+1——>PC

注意:在(1)中,PC没加括号,表示的是PC中的值经过数据通路送到MAR,在表示数据通路时括号可省略(因为只是表示数据流经的途径,不强调数据本身的流动),但当题目中的括号未省时,最好不省,和题目中保持一致。在运算时括号不可省。


实例:

PC=0,执行第一条指令的被划分为9个微指令进行操作如下:

请添加图片描述

  • Ad是address地址
  • OP是operation操作

执行完毕之后,PC++后为1,再执行第二条指令。

当前PC=1,那么就执行第二条指令:

请添加图片描述

同理,之后PC再++,然后依次执行下面的指令,直到结束。

2.4计算机系统的多级层次结构

计算机系统的层次结构划分应用了一种处理系统复杂性的方法——抽象,这与计算机网络中的分层思想类似。

计算机系统的多级层次结构的作用,即根据从各种角度所看到的机器之间的有机联系,来分清彼此之间的界面,明确各自的功能。

2.4.1五层结构

分层方式的一种(程序员角度的抽象):

请添加图片描述

  1. 第一级是微程序机器层,是一个实在的硬件层,由机器硬件直接执行微指令。机器M0是直接将机器M1中的每一条机器指令翻译成一组微指令,即构成一个微程序。机器M0每执行完对应于一条机器指令的一个微程序后,便由机器M1中的下一条机器指令使机器M0自动进入与其相对应的另一个微程序的执行。微程序机器M0可看作是对实际机器M1的分解,即用M0的微程序解释并执行M1的每一条机器指令。
  2. 第二级是传统机器语言层,也是一个实际的机器层,由微程序解释机器指令系统。
  3. 第三级是操作系统层,由操作系统程序实现。操作系统程序是由机器指令和广义指令组成的,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称混合层。
  4. 第四级是汇编语言层,它为用户提供一种符号化的语言,借此可编写汇编语言源程序。这一层由汇编程序支持和执行。
  5. 第五级是高级语言层,是面向用户的,由各种高级语言编译程序支持和执行。

在高级语言层之上,还可以有应用层,它由解决实际问题和应用问题的处理程序组成,如文字处理软件、数据库软件等。

通常把没有配备软件的纯硬件系统称为裸机,第3~5层称为虚拟机,简单来说就是软件实现的机器。虚拟机只对该层的观察者存在。

2.4.2三个级别的语言与四种程序

三个级别的语言:

计算机语言的发展:机器语言、汇编语言(面向机器)->高级语言(面向问题)

  1. 机器语言:又称二进制代码语言,是计算机唯一可以直接识别和执行的语言
  2. 汇编语言:使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为计算机的机器语言后,才能在计算机的硬件系统上运行。汇编语言没有通用性,每台机器必须有一种与之相对应的汇编语言。
  3. 高级语言:通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。

四种程序:

  1. 翻译程序:指把高级语言源程序翻译成机器语言程序(目标代码)的软件。
    翻译程序有两种:编译程序与解释程序
  2. 编译程序:将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只需执行目标程序
    因此只要源程序不变,则无须重新翻译。
    同一种高级语言在不同体系结构下,编译成的目标程序是不一样的,目标程序与体系结构相关,但仍不是计算机硬件能直接执行的程序。
  3. 解释程序:将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。
    所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。
  4. 汇编程序:把汇编语言源程序翻译成机器语言程序。

请添加图片描述


机器语言和汇编语言与机器指令对应,而高级语言不与指令直接对应,具有较好的可移植性。


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

  • 编译程序:翻译的源语言是高级语言,目标语言是诸如汇编语言或机器语言之类的“低级语言”。
  • 汇编程序:翻译的源语言是汇编语言,目标语言是机器语言。

例题:只有当程序执行时才将源程序翻译成机器语言,并且一次只能翻译一行语句,边翻译边执行的是( )程序,把汇编语言源程序转变为机器语言程序的过程是( )
1.编译  2.目标  3.汇编  4.解释

答案:4,3

例题:关于编译程序和解释程序,下列说法中错误的是()
  A.编译程序和解释程序的作用都是将高级语言程序转换成机器语言程序
  B.编译程序编译时间较长,运行速度较快
  C.解释程序方法较简单,运行速度也较快
  D.解释程序将源程序翻译成机器语言,并且翻译一条以后,立即执行这条语句

答案:C;由于解释程序要边翻译边执行,因此一般速度较编译程序慢。

例题:计算机硬件能够直接执行的是()
  1.机器语言程序   2.汇编语言程序   3.硬件描述语言程序
  A.1   B.1,2   C.1,3   D.1,2,3

答案:A;硬件能直接执行的只能是机器语言(二进制编码),汇编语言经过汇编后才能被执行;硬件描述语言是电子系统硬件行为描述、结构描述、数据流描述的语言,是对电路系统的结构、行为的标准文本描述。

2.5计算机体系结构 vs 计算机组成原理
  • 计算机体系结构:机器语言程序员所见到的计算机系统的属性概念性的结构与功能特性。(指令系统、数据类型、寻址技术、1/0机理)

探讨的是计算机的指令系统要如何设计,确定这个指令有没有。
比如有无乘法指令,没有乘法指令,那么程序员想要实现乘法就需要用加法指令来实现乘法。

探讨的是如何设计硬件与软件之间的接口

  • 计算机组成原理:实现计算机体系结构所体现的属性,对程序员“透明”。(具体指令的实现)

探讨的是如何实现某一个指令。
比如确定有乘法指令,那么要如何实现乘法指令

探讨的是如何用硬件实现所定义的接口

2.5.1透明

在计算机领域中,站在某类用户的角度,若感觉不到某个事物或属性的存在,即看不到某个事物或属性,则称为“对该用户而言,某个事物或属性是透明的”。

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

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐