<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > SPARC結構與實(shí)時(shí)內核的移植

SPARC結構與實(shí)時(shí)內核的移植

作者: 時(shí)間:2012-05-17 來(lái)源:網(wǎng)絡(luò ) 收藏

1.

結構繼承伯克利RISC結構,是其一個(gè)重要特性。又稱(chēng)寄存器組,且該組寄存器只對當前運行程序可見(jiàn)。一個(gè)寄存器窗口包含32個(gè)無(wú)浮點(diǎn)寄存器,根據其使用習慣通常記為g0,...,g7;l0,...l7;i0,...,i7;o0,...,o7。其中 g0,...,g7為全局寄存器,其余24個(gè)為當前窗口寄存器。如圖1。

圖1:寄存器窗口

指 N個(gè)寄存器窗口,其中,結構規定N=2**n(1=n=5),即N=2、4、8、16或32,本文中N的值為8。在一個(gè)寄存器窗口組中,相鄰寄存器窗口存在寄存器公用。SAVE指令能夠分配一個(gè)全新的窗口CWP-1。其中8個(gè)inputs寄存器繼承窗口CWP的outputs寄存器的值。RESTORE指令則將CWP加1,使之前的窗口為當前可用的窗口。

特殊寄存器%PSR、%WIM

處理器狀態(tài)(Processor State Register)寄存器。Bit0~Bit4為當前窗口指針(CWP)。Bit5為T(mén)rap開(kāi)關(guān)(ET)。Bit8~Bit11為優(yōu)先級(PIL)。其中CWP與寄存器窗口操作相關(guān),ET與Trap處理相關(guān),PIL與處理相關(guān)。

無(wú)效窗口標識(Windows Invalid Register)寄存器。Bit0~Bit7分別對應窗口0~7,當該位值為1時(shí)表示對應窗口為無(wú)效窗口。注意,%WIM只能有一位為1,即在CPU的8個(gè)寄存器窗口中只能存在一個(gè)窗口為無(wú)效窗口。

寄存器窗口的狀態(tài)與相關(guān)操作

每個(gè)寄存器窗口都可以劃分到以下四個(gè)狀態(tài)之中:Current態(tài)、Invalid態(tài)、Used態(tài)和Unused態(tài)。假設CWP值為5,%WIM值為0x01,那么寄存器窗口組可以進(jìn)行如下劃分:

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

Overflow:當前語(yǔ)句為SAVE指令,并且CWP-1對應的窗口為無(wú)效窗口時(shí),發(fā)生Overflow Trap。因為在程序調用時(shí)每出現一個(gè)新的子程序就對應一個(gè)SAVE語(yǔ)句,當子程序調用級數大于寄存器窗口數時(shí),就會(huì )出現寄存器窗口用完的情況,從而需要進(jìn)行Overflow Trap的處理,通常是將Used態(tài)的寄存器窗口的寄存器值保存在RAM中。

Underflow:當前語(yǔ)句為RESTORE指令,并且CWP+1對應的窗口為無(wú)效窗口時(shí),發(fā)生Underflow Trap。通常RESTORE的內容是之前Overflow Trap處理時(shí)保存到RAM中的,當恢復到原來(lái)窗口時(shí)需要從RAM中讀出到寄存器。

2.堆棧結構

堆棧幀

根據 V8手冊的附錄D,每個(gè)程序都對應一個(gè)堆棧幀。每個(gè)幀包括四個(gè)基本組成部分。從%sp開(kāi)始,第一部分大小為16個(gè)字,用來(lái)在Overflow Trap和Underflow Trap時(shí)保存當前窗口的inputs寄存器和local寄存器。第二部分大小為1個(gè)字,用來(lái)傳遞隱藏參數。當前子程序返回值不是一個(gè)變量,而是一個(gè)數據結構時(shí),該參數可以是指向該數據結構的指針。第三部分大小為6個(gè)字,分別對應六個(gè)入口參數。這三部分是編譯器為每個(gè)子程序的常規分配。其余的為第四部分,大小不確定,通常包含當前子程序中包含的Auto型的變量、數據結構等等。

通常%sp為棧頂指針,%fp為棧幀指針,相當于當前棧的棧底。并且%sp就是%o6,%fp就是%i6,所以編譯器通常用語(yǔ)句(SAVE %sp,—0x148,%sp)來(lái)為新的線(xiàn)程分配一個(gè)新的棧幀。

圖2:棧結構


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>