• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    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 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 塔河县| 德化县| 缙云县| 泽库县| 凤庆县| 黄浦区| 东方市| 甘南县| 鲜城| 民丰县| 香港 | 西乡县| 来安县| 邹城市| 南丹县| 余姚市| 钟祥市| 门源| 东源县| 靖西县| 吴川市| 铁力市| 新宁县| 呼图壁县| 永安市| 平和县| 资溪县| 大城县| 济阳县| 正镶白旗| 类乌齐县| 济南市| 盐津县| 安庆市| 滦南县| 鄱阳县| 湘阴县| 武城县| 仙桃市| 洪湖市| 凌海市|