计算机组成原理——CPU的结构和功能

涉及到控制器的内容之后会补充

1.CPU的结构

1.1CPU的功能

1.控制器的功能

  • 从内存中取出指令(指令控制)
  • 分析指令,对指令的操作码进行解码(操作控制)
  • 执行指令,按一定的顺序发出各种操作命令(时间控制)
  • 控制程序的输入及结果的输出(处理中断)
  • 管理总线的控制权和使用权
  • 处理异常和特殊请求

2.运算器的功能

  • 实现算数运算和逻辑运算(数据加工)

1.2CPU结构框图

1.CPU与系统总线

CPU通过系统总线(控制总线、数据总线、地址总线)和其他部件进行通讯

根据CPU的功能,考虑实现这些功能所需的结构:

  • 指令控制需要PC和IR,所以CPU中应该有寄存器单元。
  • 操作控制时间控制需要控制单元(CU)和时序电路,由控制单元对指令进行译码,并在给定的时刻给出给定的操作命令。
  • 数据加工需要运算器(ALU)和寄存器
  • 处理中断需要中断系统的支持。

 1.3CPU中的寄存器

不同的CPU、不同的指令集结构对CPU中寄存器设置的要求不一样,这里仅介绍寄存器在各种类型计算机中的简单分类。

1.用户可见寄存器和用户不可见寄存器

按可见性可以分为用户可见寄存器用户不可见寄存器。实际上用户不可见寄存器在计算机中是非常多的,如流水段之间的流水段寄存器,但此处只介绍用户可见寄存器

(1)通用寄存器

可用于存放操作数,也可作为某种寻址方式的专用寄存器。

(2)数据寄存器

保存数据或操作数,需要满足多种数据类型操作数的需求。两个寄存器拼接可以用来存放双倍字长的数据(例如乘法运算中乘积的高位和低位,除法运算中的商和余数等)。

(3)地址寄存器

用来存放地址(段基址,栈指针等可以用于特殊的寻址方式),其位数应满足最大的地址范围。

(4)条件码寄存器

存放条件码(如正、负、零、溢出、进位等),可作为程序分支的依据。

2.控制和状态寄存器

(1)控制寄存器

从内存中取出一条指令的流程:

PC-->MAR-->M-->MDR-->IR

PC将要取的指令地址给MAR,MAR将地址传递到内存,并且控制器发出读命令,取出的指令存放至MDR,进而传递给IR。

寄存器PC、MAR、MDR、IR都是用于控制CPU操作的,属于控制寄存器。其中,MAR、MDR、IR都是用户不可见的,PC是用户可见的。

(2)状态寄存器

反映计算机执行结果的情况或计算机的软硬件状态。

  • 条件码寄存器        存放条件码
  • PSW(程序状态字)寄存器        存放程序状态字

在中断或子程序调用后,为了能让程序返回断点继续执行,需要事先保存程序的运行现场和断点。这些运行现场和断点包括程序运行时的软硬件信息,保存在寄存器中。有些寄存器可以通过指令进行读取,但是由于状态繁多,为了简化指令集以及简化保存和恢复断点的操作,将软硬件相关的寄存器结合成程序状态字寄存器,程序状态字的长度可达几千位。这样就可以通过交换程序状态字的方式完成程序现场的切换。

1.4控制单元CU和中断系统 

1.CU(待补充)

功能:产生完成全部指令所需的微操作命令序列,实现完成指令的全部过程(包括取指、分析、执行、返回结果等)。

设计方法:

  • 组合逻辑设计        硬连线逻辑(如精简指令集计算机)
  • 微程序设计        存储逻辑

2.中断系统

参见文章第四节“中断系统”。

1.5ALU(待补充)

2.指令周期

2.1指令周期的基本概念

1.指令周期

取出并执行一条指令所需的全部时间,或者说解释(包括取指、分析、执行等阶段)一条指令所需的全部时间。

实际上每条指令的指令周期是不同的 ,存在以下三种情况:

(1)无执行周期,如NOP(空指令)

 (2)取指周期与执行周期长度相等,如ADD 

(3)执行周期很长,如MUL

2.具有间接寻址的指令周期

执行阶段需要从主存中取出操作数的地址,然后取出操作数,至少需要进行两次访存。 

3.具有中断周期的指令周期

执行周期结束后,需要检查是否有中断请求,如果有需要进行中断相应,完成保存程序断点,形成中断服务程序入口地址,硬件关中断等操作。 

4.指令周期流程

假定一条指令至少包括取指和执行两个阶段。

 5.CPU工作周期的标志

在指令周期的不同阶段,控制器需要知道当前处于指令周期的哪个阶段,并且发出不同的控制命令。

CPU访存有四种性质:

  • 取指令        放到IR
  • 若采用间址寻址,需要取地址        放到IR的地址码部分或MDR的地址码部分
  • 存取操作数或结果       放到CPU的寄存器中,为数据操作做准备
  • 中断阶段需要保存程序断点       将断点保存至内存单元的指定位置

可以看出尽管都是对内存的操作,在不同的指令周期,所需的控制命令是不同的,需要设置CPU工作周期的标志。

采用D触发器对取指周期、间址周期、执行周期、中断周期进行标识。

2.2指令周期的数据流

1.取指周期数据流

2.间址周期数据流

此时取指周期已经结束,指令存放在IR和MDR中,可以令数据流从MDR开始,把存放操作数地址的内存单元的地址给MDR。 

3.执行周期数据流(待补充)

不同指令的执行周期数据流差异很大,具体的执行过程后续补充。 

4.中断周期数据流

中断周期需要执行三个操作:保存断点、形成中断服务程序入口地址、硬件关中断。

由CU确定断点(即中断后需要执行的下一条指令的地址)保存在内存单元的地址。

下图是保存断点及形成中断服务程序入口地址的数据流。中断服务程序的入口地址由CU给出,并传递给PC,执行周期结束后进入中断服务程序。具体过程在下一节介绍。

3.指令流水

3.1如何提高机器速度

1.提高访存速度

  • 高速芯片
  • cache
  • 多体并行

2.提高I/O和主机之间的传送速度

  • 中断
  • DMA
  • 通道
  • I/O处理机
  • 多总线

3.提高运算器速度

  • 高速芯片
  • 改进算法
  • 快速进位链

4.提高整机处理能力

  • 高速器件
  • 改进体系结构,开发系统的并行性

3.2系统的并行性

1.并行的概念

并行分为两种:

  • 并发:两个或两个以上事件在同一时间段发生。如分时操作系统,多道程序在计算机系统中并发执行。
  • 同时:两个或两个以上事件在同一时刻发生。

2.并行性的等级

  • 过程级并行        程序、进程的并行        粗粒度        软件实现
  • 指令级并行(ILP)        指令之间、指令内部        细粒度        硬件实现

3.3指令流水原理

为了理解方便,假设指令只有取指和执行两个阶段

1.指令的串行执行

 取指令仅由取指令部件完成,执行指令仅由执行指令部件完成,总有一个部件是空闲的,CPU的利用率低。

2.指令的二级流水

取指和执行阶段时间上完全重叠,指令周期减半,速度上提高1倍(忽略准备阶段)。

3.指令的六级流水

假设每一段的时间相同。

 取指-->译码-->形成操作数的地址-->取操作数-->执行-->结果的写回

4.流水线性能

(1)吞吐率

单位时间内流水线所完成指令或输出结果的数量

  • 最大吞吐率(理想状态下,即没有资源冲突、数据相关、条件转移)
  • 实际吞吐率

例:设m段流水线的各段时间为\Delta t,也就是说每经过\Delta t时间就会有一个结果输出。

则最大吞吐率T_{pmax}=\frac{1}{\Delta t}

实际吞吐率T_{p}=\frac{n}{m\cdot \Delta t+(n-1)\cdot \Delta t}

(2)加速比S_{p}

流水线的速度与非流水线的速度之比

S_{p}=\frac{m\cdot n\cdot \Delta t}{m\cdot \Delta t+(n-1)\cdot \Delta t}=\frac{mn}{m+n-1}

(3)效率

流水线中各功能段的利用率(时空面积之比)

由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态。

效率=\frac{mn\Delta t}{m(m+n-1)\Delta t}=\frac{n}{m+n-1} 

3.4影响指令流水线性能的因素

(1)执行时间>取指时间

取出指令后放在缓冲区,等待执行指令部件空闲后进入执行周期。

(2)结构相关

不同指令争用同一功能部件产生资源冲突。如六级流水的示意图中蓝色字体的操作存在访存冲突。

解决方法:

  • 停顿(加入气泡)
  • 指令存储器和数据存储器分开
  • 指令预取技术,在取指周期利用空闲时间把多条指令从内存中取至CPU的指令缓存队列(适用于访存周期短的情况)
(3)数据相关

不同指令因重叠操作,可能改变操作数的读/写访问顺序。

  • (先)写后读相关(RAW)

下一条指令的操作数要利用到上一条指令的执行结果。 

  • 读后写相关(WAR)

  • 写后写相关(WAW)

 解决方法:

  • 后推法
  • 旁路技术,也叫相关专用通路或前向通道。沿用写后读的例子,第一条指令的执行结果不需要写入R1,而是直接送入第二条指令运算器的输入端。
(4)控制相关

对于条件转移指令,只有在执行阶段结束后才能确定下一条指令的地址。如果执行结果为需要进行条件转移,那么中间的指令就是转移损失。

3.5流水线的多发技术

1.超标量技术

  • 每个时钟周期可并发执行多条独立指令(多条独立指令同时进入到不同的流水线中进行解释)
  • 需要配置多个功能部件 
  • 不能调整指令的执行顺序,而是通过编译优化技术,把可并行执行的指令搭配起来

 2.超流水线技术

  • 在一个时钟周期内再分段
  • 在一个时钟周期内一个功能部件使用多次
  • 不同的指令处在同一个流水段中,相互之间的信号不能叠加
  • 也不在执行过程中调整指令的顺序,而是靠编译程序解决优化问题

常规的流水线设计中,流水段之间需要加入锁存器,锁存流水段的执行结果,作为下一个流水段的操作信号、控制信号或操作顺序。超标量流水线的流水段之间依然有锁存器,但流水段的等分段之间没有锁存器。

3.超长指令字技术

  • 由编译程序挖掘出指令间潜在的并行性(根据执行部件的种类和数量确定,另外执行部件之间也不能有相关性)
  • 将多条能并行操作的指令组合成一条
  • 具有多个操作码字段的超长指令(可达几百位)
  • 采用多个处理部件(便于同时译码)

3.6流水线结构

1.指令流水线结构

完成一条指令分6段,每段需要一个时钟周期。

 2.运算流水线

完成浮点加减运算可分对阶、尾数求和、规格化三段

分段原则:每段操作时间尽量一致,否则时钟周期按照最长段的时间设置

4.中断系统

4.1概述

1.引起中断的各种因素

(1)人为设置的中断

如转管指令

(2)程序性事故

溢出、操作码不能识别、除法非法

(3)硬件故障

(4)I/O设备

(5)外部事件

用键盘中断现行程序

2.中断系统需解决的问题

(1)各中断源如何向CPU提出请求?

(2)各中断源同时提出请求怎么办?

(3)CPU什么条件、什么时间、以什么方式响应中断?

(4)如何保护现场?

(5)如何寻找中断服务程序的入口地址?

(6)如何恢复现场?

(7)处理中断的过程中如果出现新的中断怎么办?

接下来的内容将会一一解答这些问题。

4.2中断请求标记与中断判优逻辑

1.中断请求标记

给每个中断源配置一个INTR中断请求标记触发器

多个INTR从逻辑上组成中断请求标记寄存器

实际上INTR分散在各个中断源的接口电路中,也可以集中在CPU的中断系统内

2.中断判优逻辑

先响应对系统影响最大的、最重要的中断源

(1)硬件实现(排队器)

a.分散在各个中断源的接口电路中(链式排队器)

b.集中在CPU内

 INTR1、 INTR2、 INTR3、 INTR4按优先级降序排序

这样的排队其电路保证了至多有一位输出是1,其余的中断源即使有中断请求,也会被高优先级的中断源 屏蔽。

(2)软件实现(程序查询)

A、B、C按优先级降序排列

4.3中断服务程序入口地址的寻找

 知道了要响应的中断源,才能确定要执行哪个中断服务程序

1.硬件向量法

速度快但灵活性低

排队器输出中只有一根线是高电平 

有两种方法通过中断向量地址给出中断服务程序的入口地址:

(1)在向量地址指向的存储单元中给出跳转指令(跳转到中断服务程序)

(2) 在向量地址指向的存储单元中给出中断服务程序的入口地址

 2.软件查询法

更灵活,要改变中断优先级顺序只需改变查询顺序

1#代表1号中断源,检查完成触发器,当结果为1时说明发出了中断请求,执行下一条指令,进入中断服务程序,否则跳过下一条指令,继续检查下一个中断源。 

4.4中断响应

1.响应中断的条件

若CPU只支持单重中断,即CPU在响应某一个中断源的中断请求并且开始执行中断服务程序时,即使有新的中断源发出请求,CPU也不能响应

为了表示CPU是否允许响应中断请求,设置允许中断触发器EINT,当EINT=1时,表示允许响应。

2.响应中断的时间

CPU只有在指令的执行阶段结束以后才能响应中断请求。

指令执行周期结束时刻由CPU发出查询信号,送到每一个中断源的中断请求触发器,从而驱动中断请求触发器,若此时中断源发出请求信号,则触发器的输出端被置为1,然后把中断请求信号发送到排队电路。

 3.中断隐指令

中断隐指令并不是指令集中的一条指令,但在响应中断时由计算机硬件执行以下操作:

(1)保护程序断点

可以把断点存于特定地址内,也可以让断点进栈。

(2)寻找中断服务程序入口地址
  • 向量地址-->PC(硬件向量法),向量地址指向的存储单元中包含中断服务程序的入口地址或跳转到中断服务程序的指令。
  • 中断识别程序的入口地址M-->PC(软件查询法)
(3)硬件关中断

INT是中断标记,表示CPU正在执行某一个中断。

EINT表示当前CPU是否允许响应新的中断请求。把EINT置为0,避免新的中断请求打断当前执行的中断服务程序。

由上图可以看出形成中断服务程序的入口地址和硬件关中断实际上是并行执行的。

当EINT=1且排队器的输出结果中有不少于一个1(实际上至多有一个1)时,将INT置为1,将EINT置为0。此外,排队器还将排队结果送至向量地址形成部件,将形成的向量地址发送给PC。

 4.5保护现场和恢复现场

1.保护现场

 2.恢复现场

由中断服务程序完成。

4.6多重中断

1.多重中断的概念

在多重中断中,如果在执行中断服务程序的过程中,有优先级更高的中断源发出了请求,需要进行响应。

 2.实现多重中断的条件

(1)提前设置开中断指令

(2)优先级别高的中断源有权中断优先级别低的中断源

  • 若同时收到多个中断请求信号,则先执行优先级高的中断服务程序,返回断点后再继续执行其余的中断服务程序;
  • 若执行中断服务程序过程中收到了优先级低的中断请求信号,则执行完当前的中断服务程序,返回断点后再继续执行新的中断服务程序;
  • 若执行中断服务程序过程中收到了优先级高的中断请求信号,则先执行优先级高的中断服务程序,执行完后返回断点,继续执行之前的中断服务程序;
  • 中断谁,返回谁。

3.中断屏蔽技术

通过中断屏蔽技术,通过设置中断屏蔽字,改变中断服务的优先级,从而提高系统设计和响应的灵活性。

(1)屏蔽触发器的作用

在硬件上设置和保存中断屏蔽字。

MASK=0,即Q端输出为0,\overline{Q}为1时,表示未屏蔽。此时若D触发器的Q端为1,即有中断请求信号时,INTR在CPU进行中断查询时,被置为1。当MASK=1,即屏蔽时,不管是否有中断请求信号,INTR都不能被置为1。

(2)屏蔽字

1表示屏蔽。

(3)屏蔽技术可改变处理优先等级

响应优先级由硬件电路确定,不可改变

处理优先级可以通过重新设置屏蔽字改变(让高优先级的中断源不能进入中断排队器)

响应优先级A->B->C->D降序排列

处理优先级 A->D->C->B降序排列

原屏蔽字CPU执行程序轨迹

新屏蔽字CPU执行程序轨迹

 响应优先级更高的中断服务程序在执行过程中,处理优先级比它高的中断服务程序还会发出中断请求,并把正在执行的中断服务程序中断掉。

(4)屏蔽技术的其他应用

可以人为地屏蔽某个中断源的请求

(5)新屏蔽字的设置

4.多重中断的断点保护

由中断隐指令完成

(1)断点进栈

(2)断点存入“0”地址(特定地址)

假设断点存入“0”地址

  • 0-->MAR,命令存储器进行写操作,准备将断点存入存储单元0地址
  • (PC)-->MDR
  • (MDR)-->存储器

假设三次中断,断点都存入“0”地址,如何保证断点不丢失?

(3)断点保护

SERVE 为中断服务程序的入口地址

STA  SAVE 把寄存器ACC的内容转存到内存单元SAVE

LDA  0 把0地址的内容(断点) 转存到ACC

STA  RETURN 把ACC的内容(断点) 转存到内存单元RETUEN

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值