通過這篇有趣的教程,熟悉運(yùn)行在賽靈思 Zynq UltraScale+ MPSoC 上的 Xen 管理程序。
賽靈思和 DornerWorks 的系統(tǒng)軟件團(tuán)隊(duì)在賽靈思的 Zynq? Ultrascale+? MPSoC 上啟動(dòng) Xen Project 管理程序時(shí),我們發(fā)現(xiàn)可通過運(yùn)行當(dāng)年叱詫一時(shí)的流行電子游戲 Doom 來演示和測試系統(tǒng)。
神馬?!你不知道 DOOM??(CS 你總知道吧 -__-||)
如何針對 Zynq UltraScale+ MPSoC 通過 QEMU 在 Xen 上運(yùn)行 Doom 呢,在詳細(xì)介紹具體步驟之前,我們先來了解什么是管理程序,以及它們?nèi)绾闻c Zynq UltraScale+ MPSoC 上的處理器協(xié)同工作。
管理程序及其工作原理
管理程序是一種可虛擬化處理器的計(jì)算機(jī)程序。運(yùn)行在虛擬化處理器上的應(yīng)用程序和操作系統(tǒng)似乎完全擁有系統(tǒng),但事實(shí)上管理程序負(fù)責(zé)管理虛擬處理器對物理機(jī)資源(例如存儲(chǔ)器和處理內(nèi)核)的訪問。管理程序之所以流行,是因?yàn)槟軐?shí)現(xiàn)設(shè)計(jì)分區(qū)以及系統(tǒng)上運(yùn)行的獨(dú)立軟件元素之間的隔離。
為了支持虛擬化,物理處理器必須提供一個(gè)供管理程序運(yùn)行的特殊“模式”。因此,介紹處理器模式有助于理解管理程序如何完成處理器魔法。
所有處理器都有一些指令,這些指令可操作寄存器中存儲(chǔ)的值,并可讀寫存儲(chǔ)器。處理器的模式是指令和寄存器的集合,以及利用指令訪問寄存器和存儲(chǔ)器時(shí)要遵守的規(guī)則。為了便于解釋,我們以通用處理器為例來介紹,并使用與結(jié)構(gòu)無關(guān)的術(shù)語。在這個(gè)實(shí)例中,處理器具有特定的寄存器、指令和模式。寄存器包括 RegisterA、RegisterB、RegisterC、UserProgramCounter、Register-Super 和 SuperProgramCounter。指令包括以下內(nèi)容。
ADD Register3 Register1 Register2 將 Register1 與 Register2 相加,并把結(jié)果存入 Register3,即 Register3 = Register1 + Register2。
MOVTO Register2 Register1 將 Register1 中地址所指向的存儲(chǔ)器內(nèi)容移動(dòng)到 Register2。
MOVFROM Register2 Register1 將 Register1 的內(nèi)容移動(dòng)到 Register2 中地址所指向的存儲(chǔ)器。
ENTERSUPER 進(jìn)入處理器的 SUPER 模式。
EXITSUPER 退出 SUPER 模式并進(jìn)入 USER 模式。
在 USER 模式下,處理器的指令的功能受到限制。本例中,指令可對除 RegisterSuper 和 SuperProgramCounter 以外的所有寄存器進(jìn)行讀和寫操作,處理器可執(zhí)行除 EXITSUPER 以外的所有指令。
此外,在 USER 模式下,所有指令只能讀和寫一部分存儲(chǔ)器,例如從地址 0x0000_0100 到 0x0FFF_FFFF。在 USER 模式下,如果程序嘗試執(zhí)行不應(yīng)該執(zhí)行的指令,或者訪問無權(quán)訪問的寄存器或存儲(chǔ)器位置,那么處理器將暫停出錯(cuò)指令 (offending instruction)。
SUPER 模式下,處理器的指令可以讀/寫上述所有寄存器,包括 RegisterSuper 和 SuperProgramCounter。以上所列的所有指令,包括 EXITSUPER,都可以執(zhí)行,另外,附加的指令 ENTERHYPER 也可執(zhí)行(后面詳細(xì)介紹該指令)。此外,在 SUPER 模式下,指令可以訪問系統(tǒng)中的全部存儲(chǔ)器(從 0x0000_0000 到 0x7FFF_ FFFF)。
采用帶模式的處理器,使我們可以利用設(shè)計(jì)分區(qū)來更簡單地解決軟件工程設(shè)計(jì)問題。以上實(shí)例中,只有一種方法進(jìn)入 SUPER 模式:執(zhí)行 ENTERSUPER 指令。同樣,只有一種方法退出 SUPER 模式:執(zhí)行 EXITSUPER。此外,在 USER 模式下程序只能訪問機(jī)器的部分存儲(chǔ)器。有了這種方案,我們可編寫一個(gè)程序讓處理器同時(shí)運(yùn)行多個(gè) USER 模式程序。這個(gè)“操作系統(tǒng)”(OS) 程序運(yùn)行在 SUPER 模式,并管理在 USER 模式中運(yùn)行的程序。
當(dāng) OS 運(yùn)行時(shí),會(huì)查看需要運(yùn)行的所有 USER 模式程序,選擇一個(gè)運(yùn)行,然后使用 EXITSUPER 這樣的指令通知處理器切換到 USER 模式以運(yùn)行程序。所選的程序會(huì)一直運(yùn)行,直到有事件導(dǎo)致處理器切回 SUPER 模式。這類事件可以是來自 USER 模式程序的 ENTERSUPER 指令,或外部事件,例如定時(shí)器,它可以不提醒正在 USER 模式下運(yùn)行的程序?qū)⑻幚砥髑袚Q到 SUPER 模式。無論切換如何發(fā)生,每當(dāng)事件發(fā)生時(shí),我們都可構(gòu)建 OS 以根據(jù)相應(yīng)策略相繼選擇和運(yùn)行程序。當(dāng)切換快速進(jìn)行時(shí),用戶認(rèn)為 USER 程序同時(shí)運(yùn)行。
USER HYPER 模式的用處是讓很多 SUPER 程序運(yùn)行。SUPER 模式下的每個(gè)程序都可以是 OS;這些 OS 本身會(huì)讓很多 USER 程序并行運(yùn)行。
SUPER 處理器模式還能防止 USER 程序干擾運(yùn)行在 SUPER 模式的程序或其他 USER 模式程序。USER 模式程序的任何錯(cuò)誤或違規(guī)都可被控制在該程序自身的實(shí)例中,不會(huì)破壞或干擾為 SUPER 模式操作保留的系統(tǒng)存儲(chǔ)器和寄存器。
聽起來很好,但能否用另一個(gè)模式實(shí)現(xiàn)一些功能?
對我們的機(jī)器稍加擴(kuò)展,就可以引入 HYPER 模式。HYPER 模式可以讀/寫所有初始寄存器(RegisterA、RegisterB、RegisterC、UserProgramCounter、RegisterSuper 和 SuperProgramCounter)以及兩個(gè)附加寄存器:RegisterHyper 和 HyperProgramCounter。HYPER 模式下的指令包括初始集以及下面的斜體字。
ADD Register3 Register1 Register2 將 Register1 與 Register2 相加并把結(jié)果放在 Register3 中,即 Register3 = Register1 + Register2。
MOVTO Register2 Register1 將 Register1 中地址所指向的存儲(chǔ)器內(nèi)容移到 Register2。
MOVFROM Register2 Register1 將 Register1 的內(nèi)容移到 Register2 中地址所指向的存儲(chǔ)器。
MOVTOPHYS Register2 Register1 將 Register1 中物理地址指向的存儲(chǔ)器內(nèi)容移到 Register2。
MOVFROMPHYS Register2 Register1 將 Register1 的內(nèi)容移到 Register2 中地址指向的物理存儲(chǔ)器。
ENTERSUPER 進(jìn)入處理器的 SUPER 模式。
EXITSUPER 退出 SUPER 模式并進(jìn)入 USER 模式。
ENTERHYPER 進(jìn)入處理器的 HYPER 模式。
EXITHYPER 退出處理器的 HYPER 模式。
SWITCHSUPER RegisterHyper 切換到 SUPER 程序,該程序?qū)⑹褂?RegisterHyper 中的值來執(zhí)行下一個(gè) SUPER 程序。
HYPER 模式中的附加指令和寄存器允許處理器切換哪個(gè)程序在 SUPER 模式中運(yùn)行,就像 SUPER 模式允許處理器切換哪個(gè)程序在 USER 模式中運(yùn)行一樣。HYPER 模式的一個(gè)特性是能夠切換哪個(gè)存儲(chǔ)器 SUPER 模式能看到;當(dāng)一個(gè)在 HYPER 模式中運(yùn)行的程序執(zhí)行 SWITCHSUPER RegisterHyper 時(shí),底層存儲(chǔ)器完全斷開。這就是說當(dāng) HYPER 模式中的程序執(zhí)行了 EXITHYPER 之后,下個(gè) SUPER 程序運(yùn)行之時(shí),SUPER 模式看到的實(shí)際物理存儲(chǔ)器與運(yùn)行在 SUPER 模式中的另一個(gè)程序使用的物理存儲(chǔ)器不同。SUPER 模式程序仍使用相同地址訪問存儲(chǔ)器,但是該地址指向不同的物理位置。圖 1 顯示了執(zhí)行 SWITCHSUPER RegisterHyper 前后的處理器存儲(chǔ)器視圖。
HYPER 模式很有用,是因?yàn)樗试S很多個(gè) SUPER 程序運(yùn)行。SUPER 模式中每個(gè)程序都可以是 OS;這些 OS 本身可以讓很多 USER 程序并列運(yùn)行.這意味著,我們可以在相同硬件上運(yùn)行多個(gè) OS,例如 Windows 和 Linux;在一個(gè)處理器上運(yùn)行 20 個(gè) Linux 實(shí)例;或者之間的任意組合。由于每個(gè)虛擬 OS 實(shí)例無法看到另一個(gè) OS 實(shí)例,因此如果一個(gè)崩潰,不會(huì)使另一個(gè)實(shí)例也崩潰。HYPER 模式的特性還有其他應(yīng)用:我們可以在多個(gè) OS 之間對系統(tǒng)資源分區(qū);監(jiān)測 HYPER 模式下每個(gè) OS 的執(zhí)行,以在崩潰時(shí)重啟;以及在虛擬 OS 運(yùn)行時(shí)密切關(guān)注系統(tǒng)狀態(tài)。
圖 1:HYPER 模式下執(zhí)行 SWITCHSUPER RegisterHyper 的前后區(qū)別
隨著處理器從 USER 切換到 SUPER 模式,再從 SUPER 切換到 HYPER 模式,機(jī)器會(huì)賦予執(zhí)行代碼更多特權(quán)。本例中,USER 模式程序只有權(quán)使用四個(gè)寄存器(RegisterA、RegisterB、RegisterC 和 UserProgramCounter)和四個(gè)指令:(ADD、MOVTO、MOVFROM和ENTER-SUPER)。此外,USER 程序只能讀寫 0x0000_0100 至 0x0FFF_ FFFF 的存儲(chǔ)器。一旦進(jìn)入 SUPER 模式,處理器允許指令與 RegisterSuper 和 SuperProgramCounter 對話,并允許執(zhí)行 EXITSUPER 和 ENTERHYPER。此外,SUPER 程序可以訪問從 0x0000_0000 至 0x7FFF_FFFF 的存儲(chǔ)器。
最后,一旦處理器進(jìn)入 HYPER 模式,其指令就可以操作 RegisterHyper 和 HyperProgramCounter,而且程序可執(zhí)行 SWITCH-SUPER 和 EXITHYPER。
?
圖 2:各種模式如環(huán)形所示
HYPER 模式還允許處理器讀寫所有虛擬存儲(chǔ)器,0x0000_0000 至 0xFFFF_FFFF,以及讀寫實(shí)際物理存儲(chǔ)器。這些特權(quán)等級通常被直觀地用環(huán)形來描述(圖 2)。主環(huán),即 HYPER 環(huán)為特權(quán)等級較低的環(huán)賦予權(quán)限,最終可控制整個(gè)系統(tǒng)。
理論結(jié)合實(shí)踐
ARM? 創(chuàng)建處理器設(shè)計(jì),供 ARM 合作伙伴構(gòu)建芯片用。ARM 處理器包含一個(gè)或多個(gè)內(nèi)核。每個(gè)內(nèi)核實(shí)現(xiàn)一個(gè) ARM 架構(gòu)。例如,Zynq UltraScale+ MPSoC 包含一個(gè) ARM Cortex?-A53 處理器及四個(gè) ARMv8-A 物理內(nèi)核(圖 3)。
當(dāng)查看 ARM 處理器的文檔和代碼時(shí),這種區(qū)別很重要;為了全面理解具有一個(gè) ARM 內(nèi)核的“芯片”,可參考有關(guān)架構(gòu) (如 ARMv8-A) 和處理器 (如 Cortex-A53) 的文檔。ARMv8 架構(gòu)中有四個(gè)例外等級 (來源:ARM 架構(gòu)參考手冊,D1-1404):
1、例外等級 0 (EL0),無需特權(quán)即可執(zhí)行;
2、例外等級 1 (EL1),執(zhí)行 OS 以及任何執(zhí)行特權(quán)指令的內(nèi)容;
3、例外等級 2 (EL2),允許硬件被虛擬化;以及
4、例外等級 3 (EL3),允許在安全與非安全處理器狀態(tài)之間切換。
以下程序通常在這些模式下運(yùn)行,如ARM 架構(gòu)參考手冊 (D1–1404)中所述:EL0,應(yīng)用程序;EL1,OS 內(nèi)核以及通常所描述的相關(guān)特權(quán)函數(shù);EL2,管理程序;EL3,安全監(jiān)控器。我們的理論實(shí)例直接對應(yīng) ARMv8 執(zhí)行模式 EL0 至 EL2:USER 對應(yīng) EL0,SUPER 對應(yīng) EL1,HYPER 對應(yīng) EL2。ARM 添加第四個(gè)特權(quán)等級,即 EL3;利用這個(gè)特權(quán)等級,我們可在安全與非安全環(huán)境之間切換 EL0 和 EL1。盡管 EL3 的使用是一個(gè)很重要的論題,能夠?yàn)榧軜?gòu)增加大量的功能,但是在本實(shí)例中我們將其忽略,并著重介紹 EL0-EL2(利用管理程序的虛擬化)。如果對計(jì)算機(jī)如何保護(hù)金融交易感興趣,可以參閱 ARMv8 EL3 文檔(免費(fèi)提供,需注冊)。這是非常好的參考文檔,從中可以獲得極為詳細(xì)的介紹。
圖 3:Zynq UltraScale+ MPSoC 架構(gòu)
評論
查看更多