级,这一点大家都差不多。不同弯肆的是,L2 TLB miss之后,x86/arm硬件会自己page tab
le walk然后硬件自己填写TLB,而MIPS会抛出一个异常让软件填写(当然异常处理程序
的实现一般也是从page table里取),这里我觉得一定程度上是有效率损失,但效率损
失到底有多少?我猜应该不太大,因为即使是x86硬件自己填写TLB也是需要访问外存,
我猜访问外存在这里是主要矛盾,MIPS的TLB refill异常处理没有多少条指令,现在CP
U处理速度都很快,纯老所以我觉得差别不大。我猜MIPS TLB这样设计也是有优点的:MIPS的
TLB可以由用户控制增加了灵活性,它可以让用户灵埋裤轿活配置页表大小;另外硬件实现起来
应该也会比较简单。
MIPS有32个寄存器,汇编用 s0s开头代表保存寄存器,t开头代表临时寄存器
MIPS指令采用32位,按 *** 作类型分为3类:R指令,I指令,J指令
op是0
rs,rt是源寄存器
rd是目的寄存器
funct是R指令具体方法
rs,imm是源数
rt是目的数
跳转指令
使用两个特殊的寄存器hi和lo
mult s1(结果的高位存放到hi,低32位存放到lo)
div s1 (商保存到lo, 余存到hi中)
beq 当两个寄存器相等时,执行跳转语句
bne 当两个寄存器不等时,执行跳转语句
j 跳转到一个汇编标号位置
jr 跳转到一个寄存器地址
slt rd rs rt 当rs<rt时rd=1,当rs>rt时rd=0
lui s0, 0x1000 //s0=0x1000000 给s0高位设置0x1000
ori s0, s0, 0x700 // s0=0x10007000 给s0低位设置0x7000
lbu 装入无符号字节(装入时0扩展)
lb 装入字节(装入时符号扩展)
sb存储字节
调用函数调用前把参数放在 a3中(多出来的参数放在栈里)
被调用函数将返回值放在 v1(如果返回64位,则使用v1)
使用jal 调用一个函数(把下一条指令地址保存在 ra寄存器的地址)
s0~s7是受保护寄存器,被调用函数应该保证他们不被修改
t0~t1是非保护寄存器,被调用函数可以随便修改他们
伪直接寻址:因为32位的指令有6位保存opcode,只有26位留给addr,不够32位地址,有一种办法来实现。首先寻址的地址是吵尘液对齐的,所以最后两位一定是0,那就剩下32-26-2=4位,剩下4位取兄或当前PC的最高位4位升物,这种寻址方式称为伪直接寻址
在MIPS,异常处理程序总是位于0x80000180,使用cause专用的寄存器来保存中断的原因
单时钟周期的话就没有ILP,没有ILP所以就不需要流水线寄存器了,取址,译址等等就可以一条龙的执行下来,中间氏行不需要任何停顿。cache缺失必须由硬件来处理,这样才能提升块交换的速度,用软件调度的话更换一个数据块可能要花费上百万个时钟周期,虚拟内存等存储体系的低层的东西是由软件来管理调度( *** 作系统)
建议你看帕特森,亨尼斯的《计算机组成与设计 硬件/软件接口》这本书是以MIPS体系结构介绍芹缺的计算机原理,好好的看过一遍歼首哗之后你的问题就全解决了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)