2014-09-04 204 views
2

我正在閱讀有關ARM v8的ARM文檔,並且在查找允許從32位切換到64位(以及其他方式)的確切機制時遇到了一些麻煩發生異常。首先,如果任何人都可以向我解釋,那會很好。使用arm v8運行32位和64位操作系統

另外我想知道是否一個管理程序(在EL2中)可以運行不同類型的操作系統,在EL1中同時具有32位和64位?

最佳,

V

回答

3

restrictions on execution state是一個改變只能出現在異常電平的變化,而異常水平可以不大於它上面的一個使用較寬的寄存器。因此,EL2上使用AArch64的64位管理程序可以在EL1上支持64位和32位客戶機,就像EL1上的64位OS在EL0上支持64位和32位進程一樣。如果你喜歡看一些真正的代碼,那麼arm64 port of KVM就是這樣一個hypervisor。另一方面,在EL2上使用AArch32的管理程序只能託管32位客戶端。

要求更改異常級別意味着您不能通過對自己的級別進行例外來任意切換 - 您必須得到上述級別的支持才能爲您執行此操作。硬件確定最高實現的異常級別(即復位狀態)的執行狀態,然後每個EL具有控制下面一個的寄存器寬度位 - 如果實現EL3,則SCR_EL3.RW控制EL2的狀態(或EL1不存在EL2時);如果EL2被實現,則HCR.RW控制EL1;在EL1,PSTATE.nRW控制EL0。

因此,EL0的切換機制稍有不同,因爲PSTATE.nRW位於SPSR中 - 這使得有效地自動切換不同進程的狀態,作爲從EL1返回正常異常的一部分。在較高的異常級別下,管理程序/安全監視器還必須採取額外的步驟來編程相關的配置寄存器,作爲在下降之前恢復異常上下文的一部分。

+0

太棒了!你填補了我在閱讀中留下的漏洞。非常感謝你。 – Vinz 2014-09-05 07:12:55

相關問題