靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)系統(tǒng)軟件與體系結(jié)構(gòu)領(lǐng)域。具體涉及靈活高效的跨權(quán)限級(jí)與域 的調(diào)用方法,主要是提出了一種靈活的跨域調(diào)用方法,保證安全性的同時(shí)提高系統(tǒng)的性能。
【背景技術(shù)】
[0002] 計(jì)算機(jī)系統(tǒng)技術(shù)特別是虛擬化技術(shù)的革命性發(fā)展為系統(tǒng)軟件棧增加了更多的垂 直層次,目前已經(jīng)有虛擬機(jī)監(jiān)控器、虛擬機(jī)管理工具、操作系統(tǒng)和用戶態(tài)程序四種保護(hù)層 次。云計(jì)算場(chǎng)景的多租戶應(yīng)用則在一臺(tái)計(jì)算機(jī)的橫向發(fā)展上引入了多重保護(hù)域(如虛擬 機(jī))。此外,嵌套虛擬化場(chǎng)景等的逐漸流行,進(jìn)一步在橫向和縱向上增加了軟件棧的復(fù)雜性。
[0003] 復(fù)雜性不斷增加的軟件棧為我們帶來了機(jī)遇與挑戰(zhàn):一方面,開發(fā)者能夠更自由 地利用不同層次的軟件棧實(shí)現(xiàn)多樣化的功能,包括安全增強(qiáng)、功能解耦和可管理度增強(qiáng)等; 另一方面,軟件層次與保護(hù)域的增加同樣導(dǎo)致了更加復(fù)雜的跨域調(diào)用與控制機(jī)制。例如一 個(gè)跨虛擬機(jī)的調(diào)用(從一個(gè)虛擬機(jī)中調(diào)用另一個(gè)虛擬機(jī)的代碼)通常需要在虛擬機(jī)之間以 及虛擬機(jī)與虛擬機(jī)監(jiān)控器之間頻繁的切換。這里的域指的是由處理器權(quán)限級(jí)、處理器運(yùn)行 模式與程序地址空間等狀態(tài)所組成的計(jì)算環(huán)境,地址空間和模式分別是由頁(yè)表和處理器執(zhí) 行模式(如ring級(jí)、root或非root模式)決定的。
[0004] 這種復(fù)雜的跨域調(diào)用與控制機(jī)制導(dǎo)致了許多不必要的系統(tǒng)復(fù)雜度和性能開銷,其 原因是現(xiàn)有的跨域調(diào)用機(jī)制不夠靈活。如圖1所示,當(dāng)前的硬件機(jī)制大多只支持從用戶態(tài)程 序到內(nèi)核態(tài)程序的系統(tǒng)調(diào)用(稱為syscall)和從虛擬機(jī)到虛擬機(jī)監(jiān)控器的調(diào)用(稱為 hypercall,也可以稱為vmcall)。因此,一個(gè)跨域的調(diào)用需要多次往返地經(jīng)過虛擬機(jī)監(jiān)控 器,以檢查調(diào)用者的身份并根據(jù)請(qǐng)求的具體信息決定是否授權(quán)執(zhí)行這樣的調(diào)用。
[0005] 更進(jìn)一步地,跨域調(diào)用不單單需要跨越權(quán)限級(jí)(如從Ring 3到Ring 0)還會(huì)跨越 不同的地址空間,這不僅讓跨域調(diào)用變得更加復(fù)雜、低效,而且由于跨域切換會(huì)導(dǎo)致緩存、 快表等命中率低下從而降低整體性能。如圖2所示,當(dāng)一個(gè)虛擬機(jī)需要調(diào)用另一個(gè)虛擬機(jī)中 的服務(wù)時(shí),理想的調(diào)用過程只需要經(jīng)過2次域切換即可完成;然而現(xiàn)實(shí)情況是,該調(diào)用過程 需要經(jīng)過多達(dá)9次的域切換,在此過程中產(chǎn)生相當(dāng)多的性能損耗??缣摂M機(jī)調(diào)用的系統(tǒng)由于 都需要大量的經(jīng)過虛擬機(jī)監(jiān)控器或是操作系統(tǒng)內(nèi)核的來回切換,從而導(dǎo)致實(shí)現(xiàn)的復(fù)雜性和 性能的低下,極大地限制了這類系統(tǒng)的可用性。
【發(fā)明內(nèi)容】
[0006] 針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種靈活高效的跨權(quán)限級(jí)與域的調(diào) 用方法,其給出的靈活高效而又安全的跨域調(diào)用機(jī)制,能夠解決目前域間切換性能低下且 復(fù)雜的問題。
[0007] 根據(jù)本發(fā)明提供的一種靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法,采用認(rèn)證與授權(quán)分 離的方式;
[0008] 所述認(rèn)證與授權(quán)分離的方式,是指:在發(fā)生域調(diào)用時(shí),通過向被調(diào)用域傳遞調(diào)用域 的信息完成認(rèn)證,由被調(diào)用域決定是否授權(quán)該域調(diào)用的執(zhí)行。
[0009] 優(yōu)選地,包括調(diào)用準(zhǔn)備階段步驟;
[0010] 在一次域調(diào)用過程中,所述調(diào)用準(zhǔn)備階段步驟僅執(zhí)行一次;
[0011] 所述調(diào)用準(zhǔn)備階段步驟,包括如下步驟:
[0012] 步驟A1,調(diào)用者與被調(diào)用者分別通過一條系統(tǒng)調(diào)用指令或虛擬機(jī)調(diào)用指令調(diào)用下 層軟件,并分別將自身域注冊(cè)到域表中;
[0013] 步驟A2,調(diào)用者與被調(diào)用者通過下層軟件的協(xié)助建立兩個(gè)域間共享的內(nèi)存區(qū)域, 所述內(nèi)存區(qū)域用于存儲(chǔ)跨域調(diào)用中的內(nèi)存拷貝;所述兩個(gè)域是指調(diào)用者所處域和被調(diào)用者 所處域;
[0014] 步驟A3,調(diào)用者與被調(diào)用者分別通過下層軟件獲取到對(duì)方所處域的域ID; 即,調(diào)用 者通過下層軟件獲取到被調(diào)用者所處域的域ID,被調(diào)用者通過下層軟件獲取到調(diào)用者所處 域的域ID。
[0015] 優(yōu)選地,還包括軟件調(diào)用者執(zhí)行調(diào)用步驟;
[0016] 所述軟件調(diào)用者執(zhí)行調(diào)用步驟,包括如下步驟:
[0017] 步驟Bl,調(diào)用者提供要調(diào)用的被調(diào)用者所處域的域ID,然后執(zhí)行域調(diào)用指令;
[0018] 所述域調(diào)用指令的執(zhí)行,包括如下步驟:
[0019] 步驟il,調(diào)用域提供被調(diào)用域的作為令牌唯一標(biāo)識(shí)的域ID,其中,所述域ID表示域 表項(xiàng)的ID,記為WID;
[0020] 步驟i2,處理器首先根據(jù)調(diào)用者的自身WID在域表中查找是否存在該項(xiàng)WID;若不 存在,則說明該被調(diào)用域未被創(chuàng)建并返回錯(cuò)誤;若存在,則進(jìn)入步驟i 3繼續(xù)執(zhí)行;
[0021] 步驟i3,處理器根據(jù)調(diào)用域所提供的自身WID在域表緩存中查找被調(diào)用域?qū)?yīng)的 域表項(xiàng);若查找到,則進(jìn)入步驟i4繼續(xù)執(zhí)行;若沒有查找到,則進(jìn)入步驟if繼續(xù)執(zhí)行;
[0022] 步驟i4',處理器認(rèn)為產(chǎn)生異常并從內(nèi)存中的域表中查找對(duì)應(yīng)的域表項(xiàng)并填充到 域表緩存中,然后轉(zhuǎn)入步驟i3繼續(xù)執(zhí)行;如果處理器在內(nèi)存中的域表也沒有查找到對(duì)應(yīng)的 域表項(xiàng),則認(rèn)為域調(diào)用失敗,處理器在調(diào)用域中產(chǎn)生一個(gè)異常并交由調(diào)用域軟件進(jìn)行處理;
[0023] 步驟i4,處理器找到被調(diào)用域?qū)?yīng)的域表項(xiàng)后,將當(dāng)前的調(diào)用域的狀態(tài)進(jìn)行保存, 然后處理器加載被調(diào)用域?qū)?yīng)的域表項(xiàng)中的信息,在寄存器中保存調(diào)用域的自身WID以供 被調(diào)用域作進(jìn)一步授權(quán),并跳轉(zhuǎn)到被調(diào)用域中執(zhí)行;跳轉(zhuǎn)的地址是根據(jù)被調(diào)用域?qū)?yīng)的域 表項(xiàng)中的信息的PC值而定,其中,PC值用于指示域表項(xiàng)對(duì)應(yīng)的域調(diào)用的入口地址;如果該P(yáng)C 值不為〇,則跳到這個(gè)PC值所指向的地址中;如果該P(yáng)C值為0,則跳轉(zhuǎn)的地址由調(diào)用域指定; [0024]其中,使用一個(gè)域表保存一個(gè)域的信息,并通過不可偽造的令牌來唯一地識(shí)別一 個(gè)域;一個(gè)域僅在域表上注冊(cè)方才成為一個(gè)可被調(diào)用的域,注冊(cè)時(shí)處理器會(huì)在域表中增加 一項(xiàng),每項(xiàng)代表著一個(gè)域并由一個(gè)域ID作為令牌唯一標(biāo)識(shí)。
[0025] 優(yōu)選地,還包括處理器硬件執(zhí)行調(diào)用切換步驟;
[0026] 所述處理器硬件執(zhí)行調(diào)用切換步驟,包括如下步驟:
[0027]步驟Cl,處理器執(zhí)行域調(diào)用指令;
[0028]其中,所述步驟Cl具體包括如下步驟:
[0029] 步驟Cl. 1,將當(dāng)前調(diào)用者所處域的狀態(tài)進(jìn)行保存;
[0030] 步驟Cl. 2,根據(jù)調(diào)用者提供的被調(diào)用者所處域的域ID,在域表中查找對(duì)應(yīng)的域表 項(xiàng);
[0031 ]步驟Cl. 3,將處理器當(dāng)前寄存器的狀態(tài)更改為所查找到的域表項(xiàng)的值;
[0032]步驟Cl.4,處理器將一寄存器的值設(shè)置為調(diào)用域的域ID。
[0033]優(yōu)選地,還包括軟件被調(diào)用者執(zhí)行授權(quán)步驟;
[0034]所述軟件被調(diào)用者執(zhí)行授權(quán)步驟,包括如下步驟:
[0035]步驟Dl,處理器開始執(zhí)行被調(diào)用域入口處對(duì)應(yīng)的命令,根據(jù)所獲取的調(diào)用域ID,實(shí) 施對(duì)調(diào)用者的權(quán)限檢查。
[0036] 優(yōu)選地,調(diào)用域的身份與被調(diào)用域的身份均是通過硬件產(chǎn)生或管理的不可偽造的 令牌進(jìn)行標(biāo)識(shí)的,調(diào)用執(zhí)行時(shí)由處理器硬件向被調(diào)用域提供調(diào)用域的令牌實(shí)現(xiàn)認(rèn)證,并且 調(diào)用域調(diào)用某一被調(diào)用域是通過軟件授權(quán)方式完成的。
[0037] 優(yōu)選地7、根據(jù)權(quán)利要求6所述的靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法,其特征在 于,所述軟件授權(quán)的具體過程是:跨域調(diào)用執(zhí)行時(shí),被調(diào)用域根據(jù)硬件提供的不可偽造的令 牌獲知該跨域調(diào)用的源調(diào)用域,并進(jìn)行授權(quán)。
[003