2017-04-07 90 views
0

在Sparc V8架構中,我們有一些N寄存器窗口。通常情況下,在上下文切換過程中,RTOS會壓入和彈出寄存器。是否有可能(或已經完成)將這些寄存器窗口中的每一個用作線程之一。這將切換到下一個線程,就像移動寄存器窗口並推送和彈出PSR一樣好!從而節省上下文切換時間並實現更快的上下文切換頻率Sparc V8 RTOS查詢

+1

一個實現可能有三個到32個註冊窗口,這會限制可能使用此方法的任務數量。 V8 Arch手冊描述了上下文切換;我希望一個實現可以遵循這一點。 V9 Arch手冊提到了設計上的改進,可以更快地進行上下文切換。 – Clifford

+0

我知道你的觀點。我的問題是,是否有可能。如果它是否允許超快的上下文切換。 – Prakhar

+0

不要忘記相鄰寄存器窗口之間有重疊。一個窗口的輸出寄存器成爲下一個窗口的輸入。所以,即使你爲每個任務分配了一個註冊窗口,你仍然需要在每個上下文開關上保存/恢復輸入寄存器(當然還有全局變量)。 –

回答

0

也許,這取決於你所說的線程和多少。

寄存器窗口是圍繞函數調用和返回的思想構建的,它在具有明確定義的操作的硬件和軟件陷阱中實現。如果你的線程只是以循環方式被調用的函數等等,那麼是的,它們將以這種方式進行切換,就像從你的「線程」調用的任何其他函數一樣。這就是說,一旦你有更多的功能比登記窗口的數量,他們將開始進入和退出寄存器文件。

從操作系統和用戶代碼的角度來看......當我進入和離開一個註冊窗口時,會發生什麼情況,因爲這是作爲陷阱實現的,因爲我理解它可能在固件中。如果你改變工作方式,你不再運行Sparc,因爲它在Spec中定義了什麼。

寄存器窗口的整個過程一直是快速的上下文切換..但是Sparc硬件的其他方面,例如TLB可能妨礙...在具有平坦地址空間的Sparc MCU的上下文中...那麼是的,它會非常快。