新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > SPARC结构与实时内核的移植

SPARC结构与实时内核的移植

作者:时间:2012-05-17来源:网络收藏

1.

结构继承伯克利RISC结构,是其一个重要特性。又称寄存器组,且该组寄存器只对当前运行程序可见。一个寄存器窗口包含32个无浮点寄存器,根据其使用习惯通常记为g0,...,g7;l0,...l7;i0,...,i7;o0,...,o7。其中 g0,...,g7为全局寄存器,其余24个为当前窗口寄存器。如图1。

图1:寄存器窗口

指 N个寄存器窗口,其中,结构规定N=2**n(1=n=5),即N=2、4、8、16或32,本文中N的值为8。在一个寄存器窗口组中,相邻寄存器窗口存在寄存器公用。SAVE指令能够分配一个全新的窗口CWP-1。其中8个inputs寄存器继承窗口CWP的outputs寄存器的值。RESTORE指令则将CWP加1,使之前的窗口为当前可用的窗口。

特殊寄存器%PSR、%WIM

处理器状态(Processor State Register)寄存器。Bit0~Bit4为当前窗口指针(CWP)。Bit5为Trap开关(ET)。Bit8~Bit11为优先级(PIL)。其中CWP与寄存器窗口操作相关,ET与Trap处理相关,PIL与处理相关。

无效窗口标识(Windows Invalid Register)寄存器。Bit0~Bit7分别对应窗口0~7,当该位值为1时表示对应窗口为无效窗口。注意,%WIM只能有一位为1,即在CPU的8个寄存器窗口中只能存在一个窗口为无效窗口。

寄存器窗口的状态与相关操作

每个寄存器窗口都可以划分到以下四个状态之中:Current态、Invalid态、Used态和Unused态。假设CWP值为5,%WIM值为0x01,那么寄存器窗口组可以进行如下划分:

W0:Invalid;W1~W4:Unused;W5:Current;W6~W7:Used。

Overflow:当前语句为SAVE指令,并且CWP-1对应的窗口为无效窗口时,发生Overflow Trap。因为在程序调用时每出现一个新的子程序就对应一个SAVE语句,当子程序调用级数大于寄存器窗口数时,就会出现寄存器窗口用完的情况,从而需要进行Overflow Trap的处理,通常是将Used态的寄存器窗口的寄存器值保存在RAM中。

Underflow:当前语句为RESTORE指令,并且CWP+1对应的窗口为无效窗口时,发生Underflow Trap。通常RESTORE的内容是之前Overflow Trap处理时保存到RAM中的,当恢复到原来窗口时需要从RAM中读出到寄存器。

2.堆栈结构

堆栈帧

根据 V8手册的附录D,每个程序都对应一个堆栈帧。每个帧包括四个基本组成部分。从%sp开始,第一部分大小为16个字,用来在Overflow Trap和Underflow Trap时保存当前窗口的inputs寄存器和local寄存器。第二部分大小为1个字,用来传递隐藏参数。当前子程序返回值不是一个变量,而是一个数据结构时,该参数可以是指向该数据结构的指针。第三部分大小为6个字,分别对应六个入口参数。这三部分是编译器为每个子程序的常规分配。其余的为第四部分,大小不确定,通常包含当前子程序中包含的Auto型的变量、数据结构等等。

通常%sp为栈顶指针,%fp为栈帧指针,相当于当前栈的栈底。并且%sp就是%o6,%fp就是%i6,所以编译器通常用语句(SAVE %sp,—0x148,%sp)来为新的线程分配一个新的栈帧。

图2:栈结构


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭