其他分享
首页 > 其他分享> > MIPS体系结构学习笔记

MIPS体系结构学习笔记

作者:互联网

MIPS体系结构学习笔记

第一章 概述

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

MIPS的五段流水线:

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

MIPS硬件资源配置:

第二章 MIPS的体系结构

数据类型及数据结构

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

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

相关寄存器的时序

  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控制寄存器及其编码

状态寄存器SR,status register

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

原因寄存器CR,cause register

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

异常返回地址寄存器,EPC

无效虚地址寄存器,BadVaddr

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

CPU上的计时器

处理器ID寄存器,PRId

配置寄存器,Config

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


Config字段:


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

中断与异常设置 EBase和IntCtl

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

影子寄存器的设置 SRSCtl和SRSMap

链接加载地址寄存器 LLAddr

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

CP0冒险


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

高速缓存是什么

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

工作原理的通用逻辑:

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

直接映射高速缓存

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

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

组相联高速缓存

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

全相联高速缓存

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

多级cache机制

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

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

TLB结构

在这里插入图片描述

TLB工作方式

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

TLB异常

标签:笔记,TLB,地址,寄存器,MIPS,异常,CPU,高速缓存,体系结构
来源: https://blog.csdn.net/heartbeat196/article/details/118113746