MIPS体系结构学习笔记

  • 第一章 概述
  • 第二章 MIPS的体系结构
    • 相关寄存器的时序
    • 32个通用寄存器
      • 通用寄存器的命名
    • 32个浮点寄存器
      • 基本地址空间
  • 第三章 协处理器0(cp0):MIPS处理器控制
    • CP0所做的工作
    • CPU控制寄存器及其编码
      • 状态寄存器SR,status register
      • 原因寄存器CR,cause register
      • 异常返回地址寄存器,EPC
      • 无效虚地址寄存器,BadVaddr
      • 计数/比较寄存器,Count/Compare
      • 处理器ID寄存器,PRId
      • 配置寄存器,Config
      • 中断与异常设置 EBase和IntCtl
      • 影子寄存器的设置 SRSCtl和SRSMap
      • 链接加载地址寄存器 LLAddr
    • CP0冒险
  • 第四章 MIPS处理器的高速缓存
    • 高速缓存是什么
      • 直接映射高速缓存
      • 组相联高速缓存
      • 全相联高速缓存
      • 多级cache机制
    • CPU写数据
      • 写透视高速缓存(早期)
      • 写回式高速缓存
      • 高速缓存效率
  • 第五章 异常、中断和初始化
    • 精确异常
    • 非精确异常
    • 异常发生时MIPS CPU所做的工作
    • 异常处理步骤
    • 嵌套异常
    • 最常见的异常
    • 中断处理顺序
    • 启动顺序
  • 底层内存管理与TLB
    • TLB结构
    • TLB工作方式
    • TLB异常
    • 指令

第一章 概述

MIPS的特点:独立的指令缓存和数据缓存,CPU可以同时获取指令和读写内存变量。

MIPS的五段流水线:

  1. IF取指 instruction fetch。I-cache指令缓存里面取
  2. RD读寄存器。
  3. ALU算术/逻辑单元。
  4. MEM从D-cache数据缓存中读取变量。
  5. WB写回寄存器。

MIPS硬件资源配置:

  • 32个通用寄存器;
  • 32个32位单精度浮点寄存器f0 - f31;
  • 2个32位乘、商寄存器Hi和L0:运算乘法时分别存放64位乘积的高、低32位; 除法时分别存放余数和商。

第二章 MIPS的体系结构

数据类型及数据结构

  • 所有MIPS指令都是32位长的;
  • 单位:
    1byte = 8bits 1b(字节)=8位
    1halfword = 2bytes 1h(半字长)=2字节
    1word = 4bytes 1w(字长)=4字节
    1dword = 8bytes 1d=8字节

一个字符空间 =1个字节
一个整形 = 一个字长 = 4个字节

  • 符号:
    数字就是数字,例如:5
    单个字符用单引号,例如:'h’字符串用双引号,例如:“A string”

栈的走向是从高地址到低地址

相关寄存器的时序

  1. 上电后。设置SR使CPU进入可工作状态,以便启动程序。Config寄存器需要结合硬件确认配置问题足够一致。
  2. 处理异常。Cause寄存器可以找出异常类型并分别处理;K0或K1指向异常处理程序预留的某个地址空间;返回地址存在EPC寄存器中。
  3. 从异常处理返回。最终必须返回异常时存在 EPC 的值。SR设置原来的值,恢复用户特权级设置,使能中断。
  4. 中断。SR调整中断掩码,中断优先级的判断。 只是用来触发异常的指令。break和sycalll指令。

32个通用寄存器

  1. $0:始终是0
  2. $1-$30:正常读写,任何指令可以使用
  3. $31:存放子程序调用指令(jal)返回的地址,大多数情况

通用寄存器的命名

格式:寄存器编号–助记符–用途—英文

0–zero–总是返回0–zero
1–at–汇编暂存寄存器–Assembler temporary register
2,3–v0,v1–子程序返回值–value
4,7–a0,a3–子程序前面参数–arguments
8,15–t0,t7–暂存器–temporary register
16,23–s0,s7-- 子程序寄存器变量,如果用,需要SAVE/RESTORE–saved)
24,25–t8,t9–暂时的(或随便用的) --temporary
26,27–k0,k1–中断/陷入处理器保留
28–gp-- 全局指针(Global Pointer)
29–sp-- 堆栈指针(Stack Pointer)
30–s8/fp–帧指针(Frame Pointer)
31–ra–返回地址(return address)

32个浮点寄存器

做乘法运算需要4-12个周期;做除法运算需要20-40个周期
只能用load和store指令访问内存

基本地址空间

地址空间分为四个区域

  1. 地址:0x0000.0000–7FFF.FFFF
    kuseg,32位用户空间,2G

  2. 地址:0x8000.0000–9FFF.FFFF
    kseg0,非映射、缓存的,512MB
    高位清零就转换成物理地址

  3. 地址:0xA000.0000–BFFF.FFFF
    kseg1,非映射、非缓存的,512MB
    重启的入口向量:0xBFC0.0000
    可作为访问初始程序的ROM,也可以用来访问IO寄存器

  4. 地址:0xC000.0000–FFFF.FFFF
    kseg2,映射的,1G
    只能在核心态下使用

(地址范围按位编址,内存是按照字节编址,一字节八位。2的10次方是1kb)

寻址方式:只有一种内存寻址方式。就是基地址加一个16位的地址偏移;

第三章 协处理器0(cp0):MIPS处理器控制

CP0所做的工作

  • CPU的配置
  • 缓存控制
  • 异常中断控制
  • 存储管理单元控制
  • 杂项,包括:时钟、事件计数器、奇偶校验错误检测

CPU控制寄存器及其编码

状态寄存器SR,status register

SR寄存器的各个域及重要域的解读:

  • 31:28----CU3:CU0
    每一位分别用于设定协处理器3-0是否可用
    CU3的解码空间被MIPS32/64标准中的浮点指令集所占用,与标准CP1不兼容
    实现CU2为得到32个额外的、容易访问的寄存器
    CU1置1 可以使用FPU
    CU0置位会得到用户特权级别的程序
  • RP,减少功率reduced power
  • FR,模式开关。置1使32个双精度浮点寄存器对软件可见
  • RE,反转用户态的大小尾端设置
  • MX,使能DSP或者MDMX ASE(指令集扩展),实现其一
  • PX,见UX
  • BEV,启动异常向量,一般为0,反之进入异常入口
  • TS,TLB关闭
  • SR,NMI,软件重启或不可屏蔽中断的发生
  • 15:8----IM7:0,中断屏蔽
  • 7:5—KX,SX,UX,对应三个不同的特权级别:内核kernel、监管者superintendent、用户user
  • KSU,EXL或ERL被异常置位,cpu工作在内核级别
  • ERL,错误级别
  • EXL,异常级别
  • IE,使能全局中断

原因寄存器CR,cause register

可以查询发生了什么种类异常并调用哪一个异常处理例程。

  • BD:分支延迟
  • TI异常是由于内部计时器中断引起的
  • CE协处理器错误
  • DC置1可以停止count寄存器继续计数
  • PCI,CP0性能计数器溢出,产生这个中断
  • IV写为1使用一个特殊的中断异常入口地址
  • WP若读值为1,cpu进入异常模式,挂起观测点异常
  • IP7-0中断被挂起,提示哪个中断要发生
  • ExcCode,是一个五位编码,告诉你哪种异常发生

异常返回地址寄存器,EPC

无效虚地址寄存器,BadVaddr

计数/比较寄存器,Count/Compare

CPU上的计时器

处理器ID寄存器,PRId

配置寄存器,Config

负责CPU资源信息与配置
MIPS32/64标准定义了4个可供系统初始化软件使用的配置寄存器:Config、Config1-3


Config字段:

  • M 延续位
  • Impl实现相关的配置标记
  • BE,1大尾端;0小尾端
  • AT 0–MIPS32;1–MIPS64指令集,但是使用MIPS32的地址映射;2—MIPS64指令集,使用全地址映射
  • AR体系发行版本
  • MT,MMU类型
  • VI虚拟指令缓存
  • K0可写字段用来确定固定的kseg0区域是否可存

Config1字段和Config2字段类似
Config3字段
以上三个寄存器字段对应书籍51页

中断与异常设置 EBase和IntCtl

提供对增加的中断进行控制的能力
EBase为了能够对CPU的所有异常项进行重新分配

影子寄存器的设置 SRSCtl和SRSMap

链接加载地址寄存器 LLAddr

监控可能导致后来的条件存储失败的访问

CP0冒险

  • 执行冒险:被影响到的指令在其他需要读CP0寄存器的值之前不会受到影响。使用ehb指令清楚。
  • 指令冒险:被影响到的指令在一开始就会受到影响,最坏的情况就是从缓存或者从内存中取指令的时候。使用jr.hb和jalr.hb指令清楚冒险。

第四章 MIPS处理器的高速缓存

高速缓存是什么

高速缓存的工作就是将内存中的最近读写过的数据在高速缓存中保留一个备份,对应用程序绝对透明。

工作原理的通用逻辑:

  1. 组选择(索引)
  2. 行匹配
  3. 字抽取

直接映射高速缓存

高速缓存行:标签(数据所属地址)+数据

  1. 内存地址低位索引至组
  2. 内存地址高位与高速缓存行匹配(命中/缺失),每组只有一行
  3. 根据偏移地址取值
    优点:结构简单、速度快
    缺点:低位地址冲突,命中率低

组相联高速缓存

  1. 同直接映射
  2. 稍复杂,需要一个一个进行匹配
  3. 同直接映射
    优点:解决高速缓存缺失
    缺点:难集成

全相联高速缓存

一个组多行,不需要索引直接匹配
优点:用于快速地址翻译
缺点:价格昂贵

多级cache机制

对于以一级cache没有命中的的情况,很多高性能的处理器采用三级cache的方法。但是其读写延迟依次增加,实现的成本依次降低。
现代系统采用从 Register —> L1 Cache —> L2 Cache —> L3Cache —> Memory —> Mass storage 的层次结构,是为解决性能与价格矛盾所采用的实际可行的折中设计。

CPU写数据

写透视高速缓存(早期)

CPU将数据直接写入到主内存中。如果对应的内存位置在高速缓存中有备份,将会被更新状态和数据
缺点:速度慢,会拥塞存储系统

写回式高速缓存

把要写的数据保存在高速缓存中,并做好标记,后面需要将这些数据写回到内存中

高速缓存效率

缓存性能取决于系统等待高速缓存充填的时间,总结为两个参数的乘积:

  • 每条指令的高速缓存缺失率
  • 高速缓存缺失或者充填的开销

提高系统运行速度:

  • 减少高速缓存缺失次数。(高速缓存变大、增加相联度、增加层次)
  • 减少高速缓存充填的代价。(数据更快到达)
  • 尽早重启CPU
  • 直到必须使用数据时才停止CPU
  • 多线程CPU

第五章 异常、中断和初始化

异常事件:

  1. 外部事件
  2. 内存翻译异常
  3. 其他不太常见的内核修正的程序条件
  4. 程序或者硬件探测到的错误
  5. 数据完整性的问题
  6. 系统的调用和陷入

精确异常

发生异常之后,CP0中的EPC寄存器指向异常发生时跳转指令之前的位置,处理完成之后指向该地址继续执行。
但如果受害指令在分支延迟槽中,则会硬件自动处理使EPC往回指一条指令,即分支指令。在重新执行分支指令时,分支延迟槽中的指令会被再执行一次。

非精确异常

异常发生时,跳转前最后被执行的指令是其MEM阶段刚好被执行完的那条指令。受害指令是其ALU阶段刚好执行完的那条指令。

异常发生时MIPS CPU所做的工作

  1. 设置EPC,指向重新启动的位置;
  2. 置SR(EXL),禁用中断,CPU进入内核模式
  3. 设置cause寄存器,查找异常原因
  4. 根据错误进入处理入口点取指执行

异常处理步骤

  1. 引导
  2. 区分不同的异常
  3. 构建异常处理环境
  4. 处理异常
  5. 准备返回
  6. 从异常返回

嵌套异常

定义:处理某个异常的时候,同时允许其他异常的发生
设计嵌套异常就需要用一块内存区域来存储寄存器的值,这样可以保证错误数据不会再次覆盖。

最常见的异常

  • TLB缺失
  • 中断

中断处理顺序

  • 查看 Cause 的 IP 域
  • 选择一个活跃的且使能的中断来处理
  • 更新中断屏蔽为 SR(IM) 。
  • 设置全局中断使能位,允许处理更高级别的中断,改变 SR(KSU) ,使 CPU 工作在内核态。
  • 调用中断处理过程。
  • 返回时,禁止中断以恢复中断前的寄存器的值,恢复被中断任务的执行。

启动顺序

  • 跳转到主 ROM 代码。 异常入口没有足够的空间存放完整的启动代码,另外也是一个简单的测试( CPU 是否可用)。
  • 设置状态寄存器 SR。(可对非缓存区操作)
  • 在初始化并且对 RAM 的完整性进行自检前,启动代码只能使用寄存器。
  • 分配栈,设置其他寄存器。
  • 初始化缓存,运行代码

底层内存管理与TLB

TLB结构

  • VPN2虚页框号;PFN物理页框号
  • 第一个 PFN 对应的虚页框号为 VPN2 ;第二个 PFN 对应的虚页框号为 VPN2 + 1。
  • PageMask,页掩码,为支持可变页大小而设。
  • G,Globle 位,如置该位为 1 ,则说明该 TLB项是全局的,可供任何进程使用,TLB 检索时处理器将忽略 ASID 的检查
  • V: Valid,1 位,置 1 说明该页是有效的。
  • D:Dirty,1 位,置 1 表明该页中的数据被修改过
  • C: Cache,3 位,指示对该页所用的缓存算法,可以设置之,而让处理器不将该页数据缓存于 Cache

TLB工作方式

  1. 处理器取虚址的高位作 VPN
  2. 直接将其与 TLB 的所有项同时比较。有匹配的项且该项有效 (V 为 1) 则直接输出 PFN ,否则抛出 TLB Refill 异常,后则由 OS 负责在该异常处理。
  3. 以随机方式写入 TLB
  4. 异常返回,重新执行一次访存指令,因此会重走一次 TLB。

TLB异常

  • TLB 重填异常 。当所访问的虚拟地址在 TLB 中没有对应项时 , 处理器会抛出该异常。TLB 的容量有限 , 而一个 OS 的页表众多, 这个就需要软件在适当的时候填充 TLB , 这个是引入 TLB 重填异常的目的。
  • TLB 无效异常 。 处理器用 VA 匹配 TLB时 , 有命中但该项之有效位 V 为 0 则引发给异常。硬件在匹配时检测到一个匹配项无效时 , 相应的就需要软件的处理 , 这个是引入TLB 无效异常的目的。
  • TLB 修改异常。当匹配的 TLB 表项有效时,内存对映射地址引用,但是表项的 D 位为零,表示该页面不可写。

指令

  • tlbr
    TLB 读指令。处理器执行该指令时,直接读取 Index 所指示的 TLB 项,并将其内容分别置入 PageMask,EntryHi,EntryLo0 和 EntryLo1。
    其中EntryLo0 之 G 位与 EntryLo1 之 G 位相同,来自 TLB 项中仅有的一个 G 位。

tlbwi/tlbwr
TLB 写指令。
tlbwi 为 TLB Write Indexed ,即索引方式写 TLB ,入口项由 Index 寄存器指定。
tlbwr 为 TLB Write Random ,即随机方式写 TLB ,入口项以 Random 寄存器的值为伪随机数,计算相应的入口值。
输入的 TLB 数据,亦置于 EntryHi,EntryLo0 和 EntryLo1。
输入数据时要注意,EntryLo0 之 G 位要与 EntryLo1 之 G 位一致。

tlbp
TLB 查询指令,即 TLB Probe。
其以 EntryHi[VPN2] 检索整个 TLB ,有匹配的项则继续检查该项之 ASID 是否与EntryHi[ASID] 相等,若满足,则将该项的索引值(标号)写入 Index 。若无满足条件的项,则将 Index 的 31 位置为 1。
该指令 probe 的内容仅此而已,若要读取该项的其它数据,可在其后紧随一条 tlbr 。

MIPS体系结构学习笔记相关推荐

  1. MIPS架构学习笔记

    MIPS架构学习笔记 来源: ChinaUnix博客 日期: 2007.03.13 23:18 (共有条评论) 我要评论 MIPS架构学习笔记                              ...

  2. MIPS汇编语言学习笔记23:if 语句分支指令

    C语言 #include<stdio.h> int main() {int i = 3;if (i < 5){printf("yes!\n");}else{pri ...

  3. MIPS汇编语言学习笔记07:打印双精度浮点数

    课程原视频: https://www.bilibili.com/video/BV19J411y7pA?p=7 程序功能: 设定两个双精度浮点型数据,将其相加后打印输出. 代码: .datamyDoub ...

  4. MIPS汇编语言学习笔记11:整数减法 (mult方法)

    任务:整数相乘,并输出打印. 代码: .dataintA: .word 5intB: .word 2 .textli $v0, 1lw $a1, intAlw $a2, intBmult $a1, $ ...

  5. Oracle DBA学习基础篇(一) Oracle体系结构 学习笔记

    这里是我通过Oracle DBA实战这本书学习的 Oracle体系结构,大部分是我对书中的内容做的总结,还有遇到不理解的知识点,通过查询资料做的整合.通过这篇博客希望可以让你对Oracle的一些内部原 ...

  6. 网络工程师 B站希赛视频第6章网络体系结构学习笔记

    计算机网络的概念 网络的性能 网络协议 OSI模型层次(OSI功能复杂) 物理层:在两个相邻节点间,透明地传输以比特位单位的数据. 数据链路层:在两个相邻节点间,传递以帧为单位的数据.遇到报错时,会要 ...

  7. 体系结构学习笔记---白话理解Tomasulo算法

    乱序执行 1.1 影响流水线性能的因素 单位时间执行的指令数目是衡量CPU的一项重要指标,为了让各个部件尽量处于工作状态,于是提出了指令流水,但是随之而来的问题就是因为程序之间的相关性,从而引起的流水 ...

  8. MIPS指令集(学习中)

    MIPS指令集(学习笔记) 先序: 1.指令存储在存储器当中,每条指令包括操作类型.操作数. 2.MIPS汇编语法规定,可以用两种方式表示寄存器,比如10或10或10或t2都是"10号寄存器 ...

  9. 《计算机体系结构:量化研究方法》5th 学习笔记

    本书的目的 权衡:成本-性能-功耗 新平台:个人移动设备和仓库级计算机 新体系结构:多核和GPU 关于第五版 两个极端:以移动电话和平板电脑到的个人移动设备PMD 为客户端,以提供云计算的仓库级计算机 ...

最新文章

  1. es中的Coordinator
  2. 计算机 专业英语 考试,《计算机专业英语》期末考试试卷
  3. ITK:将ITK灰度图像转换为CV :: Mat
  4. 【转】Eclipse Code Recommenders正式发布 智能代码建议工具
  5. Linux+GitLab+Jenkins实现项目的持续集成
  6. linux查找替换grep以及正则表达式
  7. DVbbs8.2入侵思路与总结
  8. 新建maven写页面_使用 IDEA 创建 Maven Web 项目 (三)- 编写一个简单的 WEB 应用
  9. 模板模式(Template Pattern)
  10. 谷歌浏览器chrome安装Hackbar插件方式
  11. svchost.exe进程内存占用过高案例解决方案一例
  12. 安卓手机模拟路由器 测试WIFI信道遍历
  13. python加粗线宽代码_python-增加matplotlib中图例行的线宽
  14. vivado sata ip (phy)配置
  15. Devise邮件模板路径
  16. Windows11设置共享打印机
  17. SUS系统可用性量表
  18. 递归算法与非递归算法的转化
  19. 7.3 Python 一维数据的格式化和处理
  20. 大学计算机VB考试试题,大学计算机二级VB测试题

热门文章

  1. 利用PE工具修改系统密码
  2. 有关单引号,双引号,三引号的使用方法
  3. 免费微软认证考试券轻松拿
  4. 【愚公系列】2023年04月 文件上传渗透测试之绕过黑名单检查(::$DATA、点+空格+点)
  5. 主编编辑器如何新建文章?
  6. VVDocumenter-Xcode
  7. 电源完整性仿真流程梳理
  8. 看大型成功项目案例—中巴地球资源卫星CBERS研制
  9. 群体遗传学--Fst指数
  10. 顶尖条码标签秤android开发,顶尖电子秤使用教程之条码标操作方法