《计算机组织结构》期末复习-第16讲-控制器

第16讲-控制器

原文链接

处理器的结构

159d2db376dcaf898b1ffee596422de

寄存器

  1. 寄存器分类

    • 用户可见寄存器(user visible register)
      • 允许编程人员通过机器语言或汇编语言访问,通过优化寄存器的使用而减少对主存的访问
    • 控制和状态寄存器(control and status register)
      • 由控制器来控制CPU 的操作,并由拥有特权的操作系统程序来控制程序的执行
      • 大多数控制和状态寄存器在大多数机器上是用户不可见的
        • 某些在控制或操作系统模式下执行的机器指令是用户可见的(如程序计数器,在x86上是用户可见的)
    • 两者的区分并不严格
  2. 用户可见寄存器

    • 通用寄存器(general purpose register,简称GPR)
      • 可被程序员指派各种用途
    • 数据寄存器(data register)
      • 仅可用于保持数据而不能用于操作数地址的计算
    • 地址寄存器(address register)
      • 可以是自身有某些通用性,或是专用于某种具体的寻址方式
      • 例如:段指针、变址寄存器、栈指针
    • 条件码寄存器(condition codes register)/ 标志(flag)寄存器
      • CPU硬件设置这些条件位作为操作的结果
      • 至少是部分用户可见的,但程序员不可修改
        设计出发点
      • 使用完全通用的寄存器还是规定各寄存器的用途
        • 影响指令集的设计
      • 寄存器数量
        • 太少的寄存器会导致更多的存储器访问
        • 太多的寄存器又不能进一步减少存储器访问
      • 寄存器长度
        • 应能保存大多数数据类型的值
        • 某些机器允许两个相邻的寄存器作为一个寄存器来保持两倍长度的值
          保存和恢复
    • 子程序调用会导致自动保存所有用户可见的寄存器,并在返回时自动取回
      • 这些保存和恢复是作为调用和返回指令执行功能的一部分,由CPU 完成
      • 这允许各个子程序独立地使用用户可见寄存器
    • 子程序调用之外保存用户可见寄存器的相关内容是程序员的责任,需要在程序中为此编写专门的指令
  3. 控制和状态寄存器

    • 程序计数器(Program counter,PC)
      • 存有待取指令的地址
      • 通常在每次取指令之后,PC 的内容即被CPU 更改,转移或跳步指令也会修改PC 的内容,因此总指向将被执行的下一条指令
    • 指令寄存器(Instruction register,IR)
      • 存有最近取来的指令,在其中分析操作码和操作数
    • 存储器地址寄存器(Memory address register,MAR)
      • 直接与地址总线相连,存有存储器位置的地址
    • 存储器缓冲寄存器(Memory buffer register,MBR)
      • 直接与数据总线相连,存有将被写入存储器的数据字或从存储器读出的字,用户可见寄存器再与MBR 交换数据
      • ALU可对MBR 和用户可见寄存器直接存取
    • 程序状态字(Program status word,PSW)
      • 一个或一组包含状态信息的寄存器,包含条件码加上其他状态信息
      • 包含的字段或标志
        • 符号(Sign):容纳算术运算结果的符号位
        • 零(Zero):当结果是0 时被置位
        • 进位(Carry):若操作导致最高位有向上的进位(加法)或借位(减法)时被置位,用于多字算数运算
        • 等于(Equal):若逻辑比较的结果相等,则置位
        • 溢出(Overflow):用于表示算术溢出
        • 中断允许、禁止:用于允许或禁止中断
        • 监管(Supervisor):指出CPU 是执行在监管模式中还是在用户模式中
    • 一个指向含有附加状态信息的存储器块的指针寄存器
    • 在使用向量式中断的机器中,可能提供有一个中断向量寄存
    • 若栈用于实现某些功能,需要有一个系统栈指针
    • 对于虚拟存储器系统,会有一个页表指针寄存器
    • 设计出发点
      • 对操作系统的支持
        • 某些类型的控制信息是专门为操作系统使用的
        • 若CPU 设计者对将要使用的操作系统有基本的了解,则寄存器的组织可能在一定程度上为该操作系统定制
      • 控制信息在寄存器和存储器之间的分配
        • 一种普遍的做法是将存储器最前面(最低地址)的几百或几千个字用于控制目的
        • 在成本和速度之间进行权衡
  4. X86体系结构:8086 的寄存器

    image-20231220132120995
    • 数据寄存器
      • 均为16 位寄存器
      • 均可分为2 个8 位寄存器使用
      • AX:存放乘除等指令的操作数
      • BX:存放存储单元的偏移地址
      • CX:存放计数值
      • DX:乘法运算产生的部分积、除法运算的部分被除数
    • 地址寄存器
      • 均为16 位寄存器
      • SP和BP:用于堆栈操作
      • SI和DI:用于串操作
      • 均可以作为数据寄存器使用
    image-20231220132333535
    • 段寄存器
      • 与其他寄存器联合生成物理地址
      • CS:代码段寄存器
      • DS:数据段寄存器
      • SS:堆栈段寄存器
      • ES:附加段寄存器
    image-20231220132529694
    a98267b33b6de82524a46699609271c
    • 标志寄存器

      879813df371ed8f7a172acb422b3377
    • 指令寄存器

      • 保存一个内存地址,指向当前需要取出的指令
      • 当CPU 从内存中取出一个指令后,IP 会自增,指向下一个地址
      • 程序员不能直接对IP 进行存取操作
      • 转移指令、过程调用指令等会改变IP 中的内容
      • IP寄存器有16 位,但8086 的寻址范围是220
  5. X86体系结构:IA-32 的寄存器

84cbee4bf7fca2f59ecf2c290687b9b
  1. X86体系结构:X86-64 的寄存器
1bf804873e92d9966e394d43dadfb6e

微操作(micro operation)

执行程序时,计算机操作是由一系列指令周期组成,每个周期执行一条机器指令。
每个指令周期又可以看作是由几个更小的子周期组成,包括:取指、间址、执行、中断。
每个子周期由一系列涉及CPU 寄存器操作的更小步骤组成,这些步骤称为微操作。

image-20231220133317380
  1. 微操作分组的原则
    • 事件的流动顺序必须是恰当的
      • 例:MAR <- (PC) 必须先于MBR <- 内存,因为内存读操作要使用MAR 中的地址
    • 必须避免冲突
      • 例:MBR <- 内存 和 IR <- MBR 这两个微操作不应出现在同一时间单位里
    • 满足上述条件下,所用的时间单位尽可能少
      • 例:PC <- (PC)+ I 不能放在一个单独的时间单位里
  2. 取指周期:出现在每个指令周期的开始,将指令从存储器中取出
8170971f8956fa2ab32ed61f66e85f1
  1. 间址周期
    • 如果指令采用间接寻址,则在指令执行前有一个间址周期
    • 完成间址周期后,IR 的状态与不使用间接寻址方式的状态是相同的,已经为执行周期准备就绪
image-20231220134053680
  1. 执行周期

    • 对于不同的操作码,会出现不同的微操作序列

      • 例:加法指令 ADD R1, X
      image-20231220134400626
      • 例:“转移并保存地址”指令 BSA X
      image-20231220134431005
  2. 中断周期

    • 在完成执行周期时,要确定是否有允许的中断产生。如果有,则出现一个中断周期。
c41b7b0c19abbce5b6ec9238e867795

指令周期代码(Instruction Cycle Code,ICC)

取指、间址、中断周期各有一个微操作序列,执行周期则对于每个操作码有一个微操作序列
指令周期代码:假设一个2 位的ICC 寄存器,明确CPU 处于指令周期哪个阶段

  • 00:取指
  • 01:间址
  • 10:执行
  • 11:中断
image-20231220134822899

处理器的控制

  1. 控制CPU 的功能需求
    • CPU的基本元素:ALU,寄存器组,内部数据通路,控制器,外部数据通路
    • CPU需要完成的四类微操作
      • 在寄存器之间传送数据
      • 将数据由寄存器传送到外部接口(如系统总线)
      • 将数据由外部接口传送到寄存器
      • 将寄存器作为输入和输出,完成算术和逻辑运算
    • 控制器的两个基本任务
      • 定序(sequencing):根据正被执行的程序,控制器使CPU 以正确的顺序通过一系列微操作
      • 执行(execution):控制器使每个微操作得以完成
  2. 控制器的输入
    • 指令寄存器:当前指令的寻址方式和操作码
    • 标志:确定CPU 的状态和前一个ALU 操作的结果
    • 时钟:控制器要在每个时钟脉冲完成一个或一组同时的微操作
    • 来自控制总线的控制信号:向控制器提供控制信号
      • 例:中断请求
  3. 控制器的输出(所有的控制信号最终作为二进制输入量直接输入到各个逻辑门上)
    • CPU内的控制信号:
      • 用于寄存器之间传送数据
      • 用于启动特定的ALU 功能
    • 到控制总线的控制信号:
      • 到存储器的控制信号
      • 到I/O 模块的控制信号
image-20231220135810119
  1. 控制信号示例:取指周期
    • 传送PC 的内容到MAR
      • 打开C2:PC 传到MAR
    • 由存储器读一条指令装入MBR,并且递增PC
      • 打开C0:MAR 的内容送到地址总线上
      • 存储器读控制信号CR 送到控制总线上
      • 打开C5:数据总线上的内容存入MBR
      • 控制信号对PC 内容加1(指令长度)并把结果存回PC
    • 传送MBR 的内容到IR
      • 打开C4:MBR 的内容送到IR
    image-20231220140501106
image-20231220140046430
  1. 控制器的最小特性
    • 它只需要知道将被执行的指令和算术、逻辑运算结果的性质(如正负、溢出等),而不需要知道正被处理的数据或得到的实际结果具体是什么
    • 它只是以少量的送到CPU 内的和送到系统总线上的控制信号来实现控制
  2. CPU内部总线
    • ALU和寄存器都连接到CPU 内部总线上
    • 为了数据在该内部总线和各寄存器之间传递,内部总线和寄存器之间有门和控制信号
    • 控制线控制着数据和系统总线(外部)的交换以及ALU 的操作
    image-20231220140649190

控制器实现

  1. 硬布线实现(hardwired implementation):控制器是一个组合电路,把输入逻辑信号转换为一组输出逻辑信号,即控制信号。

    1. 控制器输入

      • 标志和控制总线信号
        • 每位都有特定的意义
      • 指令寄存器
        • 通过译码,使每一操作码有一个唯一的逻辑输入
        • 译码器有n 个输入和2n 个输出
          • 控制器要考虑变长的操作码,译码器会更复杂些
      c9fb6a931cd3ffe6bbc2b4378740242
      • 时钟
        • 在一个指令周期内,控制器要在不同时间单位发送不同的控制信号
        • 使用一个定时器作为控制器的输入,并且控制器在指令周期(或子周期)结束时必须通知定时器以使其重新开始计数
          image-20231220141820407
    2. 控制器逻辑

      • 为每个输出的控制信号设计一个关于控制器输入的布尔表达式
      • 定义两个新的控制信号P 和Q
        • PQ=00:取指周期,
        • PQ=01:间址周期,
        • PQ=10:执行周期,
        • PQ=11:中断周期
        • 示例:控制信号C5:使外部数据总线上的数据读入MBRC5
          • 在取指和间址周期的第二个时间单位(T2)有效
            C 5 = P ‾ ⋅ Q ‾ ⋅ T 2 + P ‾ ⋅ Q ⋅ T 2 C_{5} = \overline{P} \cdot \overline{Q} \cdot T_2 + \overline{P} \cdot Q \cdot T_2 C5=PQT2+PQT2
          • C5在执行周期也需要
            C 5 = P ‾ ⋅ Q ‾ ⋅ T 2 + P ‾ ⋅ Q ⋅ T 2 + P ⋅ Q ‾ ⋅ ( L D A + A D D + A N D ) ⋅ T 2 C_{5} = \overline{P} \cdot \overline{Q} \cdot T_2 + \overline{P} \cdot Q \cdot T_2+P \cdot \overline{Q} \cdot (LDA + ADD+AND) \cdot T_2 C5=PQT2+PQT2+PQ(LDA+ADD+AND)T2
  2. 微程序实现(microprogrammed implementation):控制逻辑是微程序指定的,控制器是一个相对简单的逻辑电路,通过执行每条微指令来产生控制信号

    1. 基本概念和思路

      • 微程序(固件)介于硬件与软件之间
        • 设计固件比设计硬件容易,但写固件程序比软件程序困难
        • 微指令序列
      • 微指令:每行描述同一个时间内出现的一组微操作
      • 基本思路
        • 对于每个微操作,控制器的任务是产生一组控制信号,即控制器发出的每根控制线或开或关(每根控制线由一个二进制数字表示)
        • 构造一个控制字,每位代表一根控制线,这样每个微操作能用控制字中的不同的0 和1 的样式来表示
        • 将这些控制字串在一起,可以表示控制器需要完成的微操作序列
        • 由于微操作序列不是固定的,把控制字放入一个存储器单元中,每个字有自己唯一的地址
          • 添加少数几位用于指示条件的真假
            • 若条件位指示的条件为假,则顺序执行下一条指令
            • 若条件位指示的条件为真,则地址字段指向的微指令是将被执行的下一条微指令
          • 给每个控制字添加一个地址字段,以指示某种条件为真时,将要执行的下一控制字的位置
        image-20231220143136049
    2. 微程序执行

    image-20231220144027678
    1. 微程序控制器:任务

      • 微指令定序(microinstruction sequencing)
        • 根据当前的微指令、条件标志和指令寄存器的内容,产生下一微指令的控制存储器地址
        • 设计考虑
          • 微指令的大小:减小微指令的大小就能节省控制存储器的成本
          • 地址生成时间:尽可能快地执行微指令
      • 微指令执行(microinstruction execution)
        • 产生控制信号:发往CPU 内部,送往外部控制总线或其他外部接口
          • 根据微指令中的二进制序列,设置控制线
    2. 微程序控制器:构成

      • 定序逻辑:向控制地址寄存器装入地址,并发出读命令
      • 控制地址寄存器:含有下面即将被读取的微指令地址
      • 控制存储器:存有一组微指令
      • 控制缓冲寄存器:存放被读出的微指令
      image-20231220144608050
    3. 微程序控制器:定序

      • 双地址字段:在每条微指令中提供两个地址字段,选择并发送其中某一个地址或操作码到控制地址寄存器
      image-20231220150149393
      • 单地址字段:下一个地址的选择可以是地址字段或下一个顺序地址
      image-20231220150218707
      • 可变格式:提供两种完全不同的指令格式,一位字段用于指定哪种格式被使用
        image-20231220150243984
    4. 微程序控制器:工作流程

      • 执行一条指令,定序逻辑发出一个读命令给控制存储器
      • 当一条微指令由控制存储器读出后,即被传送到控制缓冲寄存器
      • 控制缓冲寄存器的内容生成控制信号,并为定序逻辑提供下一条地址信息
        • 控制缓冲寄存器的左半部分与控制器发出的控制线相连
        • 由控制存储器读一条微指令等同于执行这条微指令
      • 定序逻辑根据这个地址信息和ALU 标志,将新的地址装入到控制地址寄存器
      • 生成新地址的三个选择
        • 取顺序下一条微指令:加1 到控制地址寄存器
        • 基于跳转微指令转移到一个新的例程:将控制缓冲寄存器的地址字段装入控制地址寄存器
        • 转移到一个机器指令例程:根据IR 中的操作码向控制地址寄存器装入机器指令例程的第一条微指令
      image-20231220145030079
    5. 优点

      • 简化了控制器的设计任务
      • 实现起来既成本较低,也能减少出错机会
      • 便于更新
    6. 缺点

      • 要比采用相同或相近半导体工艺的硬布线控制器慢一些
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值