csapp第八章-CPU的结构和功能

Posted by serrini on March 29, 2021

第八章 CPU的结构和功能

8.1 CPU结构

8.1.1 CPU功能

取指令 分析指令 执行指令 指令控制、操作控制、时间控制、数据加工和处理中断功能

8.1.2 CPU结构框图

  • ALU(算逻部件)、寄存器、中断系统、CU(控制部件)
  • 系统总线有控制总线、数据总线、地址总线*
    • –使用系统总线的CPU
  • 细化
    • 算逻部件ALU里面有状态标志、移位、取反、算术和布尔逻辑
    • ……

G

8.1.3 CPU的寄存器

第四章的存储器分层结构图 寄存器 缓存 主存 磁盘 磁带

用户可见寄存器

  • 通用寄存器
    • 基址寻址所需的基址寄存器、变址寻址所需的变址寄存器、堆栈寻址所需的栈指针
  • 数据寄存器
  • 地址寄存器
  • 条件代码寄存器

控制和状态寄存器

  • 大部分之类寄存器对用户是透明的
    • MAR
    • MDR
    • PC程序计数器,存放现行指令的地址,通常有计数功能,遇到转移类指令的时候PC值可被修改
    • IR指令寄存器,存放当前欲执行的指令
    • PSW:程序状态字寄存器,存放条件码和其他状态信息
    • 在具有中断系统的机器中还有中断标记寄存器

8.2 指令周期

  • 取指阶段+执行阶段=指令周期
    • 取指阶段完成取指令和分析指令的操作,叫取指周期
    • 无条件转移指令JMP X,该阶段不需访问主存,操作简单,完全可以在取指阶段的后期将转移地址X送到PC
      • JMP X指令的指令周期就是-取指周期
    • 加法指令ADD X,这种治疗在取指和执行阶段各访问一次存储器
    • 乘法指令,其执行阶段完成的操作比加法指令多得多,故执行周期超过了加法指令
  • 间接寻址
    • 需要先访存一次,取出有效地址,然后再访存,取出操作数
  • 标志触发器FE、IND、EX、INT

取指周期数据流

取指周期的任务是根据PC中内容从主存中取出指令代码存放在IR中

描述 备注
(PC)-> MAR  
1 -> R CU发出控制信号,读
M(MAR) -> MDR MAR所指地址中内容送入MDR
(MDR) -> IR MDR中内容(指令)送入IR
(PC) + 1 -> PC CU控制信号,计数器加一

间址周期数据流

间址周期的任务是取操作数有效地址

描述 备注
Ad(IR) -> MAR或Ad(MDR) -> MAR 取指周期把指令从MDR传到IR,进入间址周期时MDR里面还没变,可以用
1 -> R CU发出控制信号,启动主存读
M(MAR) -> MDR,把MAR所指主存中内容经数据总线进入MDR 取到地址可以放在IR中,也可以直接放在MDR中

执行周期数据流

执行周期的任务是根据IR中指令字的操作码和操作数通过ALU操作产生结果

中断周期

中断周期的任务是处理中断请求

堆栈结果保存断点,SP表示栈顶地址,进栈先修改指针,后存入数据

描述 备注
(SP)-1 -> SP, (SP) -> MAR即 a -> MAR CU控制SP-1,修改后地址送入MAR,即将断点存取某个存储单元
1 -> CU CU发出控制信号,写
(PC) -> MDR 将断点PC内容送入MDR
CU控制将中断服务程序的入口地址送入PC,即向量地址 -> PC  

标志触发器

FE(取址)、IND(间址)、EX(执行)、INT(中断) INT(中断)的进栈sp-1,堆栈向低地址增加

8.3 指令流水

FI、DI、CO、FO、EI、WO

并行性

作业级或程序级、任务级或进程级、指令之间级和指令内部级 前两级是粗粒度,又叫过程级,后两级是细粒度,又叫 粗粒度并行是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序 细粒度是在处理机的操作机和指令级的并行性

二级流水和四级流水哪个更能提高处理机速度?

什么情况下流水线受阻?

8.3.2 流水线性能影响因素

访存冲突

两个独立的存储器存操作数和指令 指令预取技术

数据相关

几条相近的指令间共同用一个存储单元或寄存器时发生的 可以用旁路技术解决 数据相关又分 读后写相关 写后读相关 写或写相关

8.3.3 流水线中的多发技术

超标量技术 并行将两条或两条以上指令编译并执行 超流水线技术 流水线以3倍于原来时钟频率的速度运行 超长指令字技术

8.3.4 流水线结构

指令流水线结构 运算流水线

8.4 中断系统

人为中断 转管指令

程序性事故

硬件故障

I/O设备

外部事件

8.4.2 中断请求标记和中断判优逻辑

中断请求触发器INTR …

CPU内有PC、IR、MAR、MDR、AC、CU

取指周期全部操作

PC->MAR 现行指令地址->MAR 1->R 命令存储器读 M(MAR)->MDR 现行指令从存储器中读到MDR MDR->IR 现行指令->IR OP(IR)->CU 指令操作码->CU译码 (PC)+1->PC

SUB X

Ad(IR)->MAR 指令的地址码->MAR 1->R 命令存储器读 M(MAR)->MDR 有效地址从存储器中读到MDR (ACC)-(MDR)->ACC

JMP

Ad(IR)->PC ??

取指周期

PC → MAR 现行指令地址→MAR 1 → R 命令存储器读 M(MAR)→ MDR 现行指令从存储器中读至MDR MDR → IR 现行指令→IR OP(IR)→ CU 指令的操作码→CU译码 (PC)+1 → PC 形成下一条指令的地址

间址周期

Ad(IR)→ MAR 指令的地址码字段→MAR 1 → R 命令存储器读 M(MAR)→ MDR 有效地址从存储器中读至MDR MDR → Ad(IR)

执行周期

取数指令 LDA X Ad(IR)→ MAR 指令的地址码字段 → MAR 1 → R 命令存储器读 M(MAR)→ MDR 有效地址从存储器中读至MDR MDR → (ACC) 操作数 → ACC

存数指令 STA X Ad(IR)→ MAR 指令的地址码字段 → MAR 1 → 320124199901073226 命令存储器写 ACC → MDR 欲写入数据 → MDR MDR → M(MAR) 数据写入存储器中

加法指令 ADD X Ad(IR)→ MAR 指令的地址码字段 → MAR 1 → R 命令存储器读 M(MAR)→ MDR 有效地址从存储器中读至MDR (ACC)+(MDR)→ ACC 两数相加结果送ACC

转移指令

无条件转移指令 JMP

Ad(IR)→ PC 转移(目标)地址 Y → PC