MIPS指令类型

Ryan Lu Lv4

MIPS 指令

操作码的长度决定了可以提供多少个指令数;操作码的编码一定要有唯一的解释

一、计算机的寻址方式

  1. 立即寻址:指令中给出操作数
  2. 直接寻址:指令中给出操作数所在的有效地址
  3. 间接寻址:指令中给出一个间接地址,间接地址在内存中寻找直接地址,直接地址读出操作数
  4. 寄存器间接寻址:指令给出寄存器编号,根据寄存器内容找出操作数
  5. 基址寻址:指令中给出一个寄存器编号,同时给出一个偏移地址,基址寄存器内容+偏移地址从内存中取操作数

二、操作码编码

  1. 定长操作码编码
  2. 扩展操作码编码

三、MIPS 的指令可以分为 3 种操作类型

  1. R 型
  2. I 型
  3. J 型

1、R 型指令

  • OP:000000 由 func 来决定他的功能
  • rs、rt 是两个源操作数所在的寄存器号
  • rd 是目的操作数所在的寄存器号
  • shamt 是位移量,执行移位操作的时候指明需要移动的次数

同时也要牢记 R 型指令的指令表:

2、I 型指令

  • 操作功能由 OP 决定
  • rs 是第一个源操作数,immediate 是第二个源操作数
  • rt 是目的操作数所在的寄存器编号

I 型指令的操作表:

  • 在 I 型指令中,addi 指令是需要进行符号位扩展,但是 andi、ori、xori 指令只需要进行零扩展即可
  • sw、lw、beq、bne 等操作都是进行符号位扩展

3、J 型指令

  • 操作功能由 OP 决定
  • 转移地址:26 位(立即数)

J 型指令操作表:

跳转指令寻址:

伪直接寻址

image-20241204201758789

PC 相对寻址

image-20241204201816128

异常和中断

image-20241204202419275
image-20241204202444945

Cache 映射

直接映射

主存中的每个块只能放在 Cache 中的唯一位置(行)

Cache 行号=主存块号 mod Cache 行数

image-20241204202801123

全相联映射

主存中的每个块可放置在 Cache 中的任何位置(行)

image-20241204202851289

N 路组相联映射

一个 Set 是若干块的集合

主存和 Cache 中的组都具有同样大小(组内块数相同)

“N 路”指每个组中包含的块(行)的数目,也称为相联度

主存中的一个块首先被映射到 Cache 中的唯一一组中,然后该块可以放在这个组的任何一行中

image-20241204203017769

总结

image-20241204203026144

Cache 结构的表示

image-20241204203049833

Cache 块替换策略

LRU

image-20241204203225314

Cache 写命中策略

image-20241204203412872

写直达

动画

写回

动画1

写分配

动画2

写不分配

动画3

虚拟索引虚拟标记(VIVT)

优点: 不需要每次访存的时候把虚拟地址经过 MMU 转换为物理地址缩短了访存关键路径, 提升了频率, 提升了 Cache 访问速度

缺点: 即使 Cache 命中,也需要访问并更新 TLB(两者可以并行) 进程切换需要冲刷 Cache,或者增加 PID(进程 ID)位 歧义问题(ambiguity) 别名问题(alias)

歧义问题: 相同的虚拟地址映射到不同的物理地址 假设 A 进程的虚拟地址 0x4000 映射物理地址 0x2000,B 进程的虚拟地址 0x4000 映射物理地址 0x3000。A 进程切换到 B 进程,导致 0x4000 地址访问命中,而对应的是物理地址 0x2000 中的数据,从而出现错误 解决方案:冲刷(flush)Cache(使用专门的 Cache 指令,例如 MIPS 中的 Cache),保证切换后的进程不会错误的命中上一个进程的缓存数据

别名问题: 不同的虚拟地址映射到相同的物理地址,例如进程间通信假设虚拟地址 0x2000 和 0x4000 都映射到相同的物理地址 0x3000,其中虚拟地址中的[15…4]位作为 index,此时同一物理地址数据被加载到不同的 Cache Line,容易破坏数据一致性。

物理索引物理标记

从虚拟地址中抽取 index 查找 Cache,从物理地址中抽取 tag 进行比较 Cache 的查找和物理地址的转换同时进行,性能优于 PIPT 不存在歧义问题,但依然存在别名问题。

VIPT 中的别名问题

直接映射:当 Cache 容量不大于页大小时,将不会产生别名问题 组相联:当 Cache 中一路的容量不大于页大小时,将不会产生别名问题 此时,index 位于页偏移之中,虚拟地址和物理地址对应的 index 相同 VIPT 相当于 PIPT

image-20241207205415587

解决方案 1:提高相联度,将索引 index 控制在 page offset 字段范围之内 解决方案 2:使用大页,将索引 index 控制在 page offset 字段范围之内 解决方案 3:调整虚实映射,避免相同物理地址数据加载到不同 Cache 行对于直接相联,在建立共享映射的时候,虚拟地址都是按照 Cache 大小对齐对于组相联,在建立共享映射的时候,虚拟地址都是按照一路 Cache 大小对齐 解决方案 4:但满足不了将索引 VA 的 index 控制在 page offset 字段范围之内时,需要操作系统提供支持,即 Page Color 功能。

  • Title: MIPS指令类型
  • Author: Ryan Lu
  • Created at : 2024-12-04 20:13:58
  • Updated at : 2025-11-13 03:13:49
  • Link: http://ryan-hub.site/1c9b239f2e4a/
  • License: This work is licensed under CC BY-NC-SA 4.0.