您的位置:首页 > 其它

SPARC体系结构(话题讲解人:于银涛)

2007-04-18 23:10 417 查看
于银涛为这次讨论作了极精心的准备,值得学习。

SPARC是最早的RISC结构,其特点是拥有大量的寄存器,并以窗口方式使用,主要用在空间领域(但是不知道为什么)。
SPARC的特点是寄存器窗口,任意进程只能看到当前窗口中的寄存器,进程可以使用命令强行启用新窗口。每个窗口包含24个寄存器,窗口之间的寄存器有16个重叠(分别是8个全局寄存器、8个输入寄存器)用于传递参数。
在每一个窗口中都包含了下列寄存器
R0~R7,通用寄存器,也称为G0~G7,全局寄存器
R8~R15,输出寄存器,窗口间的重叠部分,也称为O0~O7,也是下一个窗口的I0~I7
R16~R23,本地寄存器,进程私有
R24~R31,输入寄存器,也称为I0~I7,与上一个窗口的O0~O7重叠
在如此多的寄存器中,有几个寄存器是有特殊用途的:
G0,永远为零,用于保存无用的计算结果(实际上,我还见过将其当作0使用的很多例子,将其作为0可以加快运算速度)
L1,L2,用于在中断中保存当前的PC和NPC(下一条指令的指针)
I7,O7,其中O7保存CALL指令的PC值,而I7则是上一窗口的O7(这里引出了一个,不启用新寄存器窗口的函数不能再调用其它函数,原因是会将O7覆盖)
I6,O6,这两个寄存器不是自动使用的,只是约定俗成用于保存堆栈指针,I6保存了fp,O6保存了sp,编译器也会按照约定使用该寄存器保存堆栈指针。
每当有新的进程(或者确切的说函数)启用了新的窗口,可用窗口的数量就会减少,当减少到1的时候会发生窗口上溢出中断,于是处理器会将某一个窗口的值保存在堆栈中,并且将该窗口置为可用。当窗口不断被释放,回到那些被保存的窗口时,也就是只有一个窗口在使用中并回退时,处理器发生窗口下溢出中断,此时系统会将保存在堆栈中的值放回到窗口中。
关于跳转指令。SPARC中包含了Brunch(分支),CALL(调用,4G访问),JMPL(保存当前地址的跳转,功能很强),JMP(不保存当前地址的跳转),TRAP(软中断)。跳转指令都有一个执行槽,可以在流水线上指向下一条指令。

大概就是这么多了,一个小时的内容相当于300页英文文档,赚了,呵呵。

话题总结人:张杨
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: