8] 優(yōu)選地,域表只能被運(yùn)行在比域表中所注冊(cè)的域更高權(quán)限級(jí)的域管理軟件代碼訪 問。
[0039]優(yōu)選地,所述認(rèn)證是由硬件完成,由硬件提供被調(diào)用域的信息;所述調(diào)用是指處理 器控制流的切換。
[0040] 優(yōu)選地,所述調(diào)用通過共享內(nèi)存方式在域間傳遞數(shù)據(jù)流;
[0041] 當(dāng)域調(diào)用發(fā)生時(shí),處理器當(dāng)前的調(diào)用域的狀態(tài)將被保存在安全的地方,然后處理 器將從安全的地方加載被調(diào)用域的狀態(tài);
[0042] 其中,所述安全的地方,是指:
[0043] -一塊只允許處理器處于設(shè)定權(quán)限或模式時(shí)才可訪問的內(nèi)存地址;或者 [0044]-處理器內(nèi)部的一寄存器。
[0045] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
[0046] 本發(fā)明提出靈活高效的域調(diào)用方法,允許任意兩個(gè)域的直接調(diào)用,能夠保持調(diào)用 處理器的緩存局部性,實(shí)現(xiàn)較低的延遲并且不會(huì)中斷其他虛擬機(jī)或應(yīng)用程序,能夠極大地 提高跨域調(diào)用的性能;并且,本發(fā)明通過采用認(rèn)證與授權(quán)分離的方式,使得域調(diào)用能夠由軟 件自主配置,具有非常好的靈活性,并且能夠保證安全性。
【附圖說明】
[0047] 通過閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、 目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0048] 圖1是現(xiàn)有的直接跨域調(diào)用與本發(fā)明所能實(shí)現(xiàn)的直接跨域調(diào)用圖。
[0049]圖2是跨虛擬機(jī)調(diào)用時(shí)理想與實(shí)際的調(diào)用路線圖。
[0050] 圖3是處理器與內(nèi)存邏輯圖。
【具體實(shí)施方式】
[0051] 下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù) 人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對(duì)本領(lǐng)域的普通技術(shù) 人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變化和改進(jìn)。這些都屬于本發(fā)明 的保護(hù)范圍。
[0052] 本發(fā)明提出的一種靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法,在進(jìn)行跨權(quán)限級(jí)與地址 空間調(diào)用時(shí)通過減少權(quán)限級(jí)與地址空間的切換來提高調(diào)用性能;通過采用認(rèn)證與授權(quán)分離 的方式,保證調(diào)用的靈活性與安全性。
[0053] 傳統(tǒng)計(jì)算機(jī)處理器的跨域調(diào)用機(jī)制只有有限的幾條調(diào)用路徑,不同域的調(diào)用需要 多次復(fù)用已有的調(diào)用路徑才能完成,從而導(dǎo)致許多額外的跨權(quán)限級(jí)與地址空間的切換,而 本發(fā)明所提出的方法能夠有效地較少這種不必要的切換,在保證安全性的同時(shí)提高系統(tǒng)的 性能,促進(jìn)具有高性能需求的關(guān)鍵服務(wù)在基于虛擬化平臺(tái)或高性能操作系統(tǒng)的服務(wù)器、嵌 入式設(shè)備等場(chǎng)景的應(yīng)用,進(jìn)而帶來可觀的社會(huì)效益和經(jīng)濟(jì)效益。
[0054] 所述靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法,只需要執(zhí)行一次的調(diào)用準(zhǔn)備階段步 驟,以及后期進(jìn)行跨域調(diào)用時(shí)執(zhí)行的軟件調(diào)用者執(zhí)行調(diào)用步驟、處理器硬件執(zhí)行調(diào)用切換 步驟以及軟件被調(diào)用者執(zhí)行授權(quán)步驟。其中,調(diào)用準(zhǔn)備階段步驟只需要設(shè)置執(zhí)行一次,用于 設(shè)置好調(diào)用的環(huán)境參數(shù),后續(xù)的跨域調(diào)用即可復(fù)用該階段的調(diào)用結(jié)果。
[0055] 以下將通過具體實(shí)施示例來詳細(xì)描述本發(fā)明提供的靈活高效跨域調(diào)用機(jī)制。
[0056] 根據(jù)本發(fā)明提供的一種靈活高效的跨權(quán)限級(jí)與域的調(diào)用方法,采用認(rèn)證與授權(quán)分 離的方式,包括調(diào)用準(zhǔn)備階段步驟、軟件調(diào)用者執(zhí)行調(diào)用步驟、處理器硬件執(zhí)行調(diào)用切換步 驟、軟件被調(diào)用者執(zhí)行授權(quán)步驟。所述認(rèn)證與授權(quán)分離的方式,是指:在發(fā)生域調(diào)用時(shí),通過 向被調(diào)用域傳遞調(diào)用域的信息完成認(rèn)證,由被調(diào)用域決定是否授權(quán)該域調(diào)用的執(zhí)行。
[0057] 在一次域調(diào)用過程中,所述調(diào)用準(zhǔn)備階段步驟僅執(zhí)行一次;
[0058] 所述調(diào)用準(zhǔn)備階段步驟,包括如下步驟:
[0059] 步驟Al,調(diào)用者與被調(diào)用者分別通過一條系統(tǒng)調(diào)用指令或虛擬機(jī)調(diào)用指令調(diào)用 下層軟件,并分別將自身域注冊(cè)到域表中;其中,域是指一個(gè)執(zhí)行空間,調(diào)用者是指執(zhí)行空 間中的一段具體代碼,即,調(diào)用者執(zhí)行在調(diào)用域中;
[0060] 步驟A2,調(diào)用者與被調(diào)用者通過下層軟件的協(xié)助建立兩個(gè)域間共享的內(nèi)存區(qū)域, 所述內(nèi)存區(qū)域用于存儲(chǔ)跨域調(diào)用中的內(nèi)存拷貝;所述兩個(gè)域是指調(diào)用者所處域和被調(diào)用者 所處域;
[0061] 步驟A3,調(diào)用者與被調(diào)用者分別通過下層軟件獲取到對(duì)方所處域的域ID; 即,調(diào)用 者通過下層軟件獲取到被調(diào)用者所處域的域ID,被調(diào)用者通過下層軟件獲取到調(diào)用者所處 域的域ID。
[0062] 所述軟件調(diào)用者執(zhí)行調(diào)用步驟,包括如下步驟:
[0063]步驟Bl,調(diào)用者提供要調(diào)用的被調(diào)用者所處域的域ID,然后執(zhí)行域調(diào)用指令;其 中,所述域調(diào)用指令可以是已有處理器指令;
[0064]所述域調(diào)用指令的執(zhí)行,包括如下步驟:
[0065]步驟il,調(diào)用域提供被調(diào)用域的作為令牌唯一標(biāo)識(shí)的域ID,其中,所述域ID表示域 表項(xiàng)的ID,記為WID;
[0066]步驟i2,處理器首先根據(jù)調(diào)用者的自身WID在域表中查找是否存在該項(xiàng)WID;若不 存在,則說明該被調(diào)用域未被創(chuàng)建并返回錯(cuò)誤;若存在,則進(jìn)入步驟i 3繼續(xù)執(zhí)行;
[0067]步驟i3,處理器根據(jù)調(diào)用域所提供的自身WID在域表緩存中查找被調(diào)用域?qū)?yīng)的 域表項(xiàng);若查找到,則進(jìn)入步驟i4繼續(xù)執(zhí)行;若沒有查找到,則進(jìn)入步驟if繼續(xù)執(zhí)行;
[0068]步驟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)行處理; [0069]步驟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 值不為0,則跳到這個(gè)PC值所指向的地址中;如果該P(yáng)C值為0,則跳轉(zhuǎn)的地址由調(diào)用域指定;
[0070] 其中,使用一個(gè)域表保存一個(gè)域的信息,并通過不可偽造的令牌來唯一地識(shí)別一 個(gè)域;一個(gè)域僅在域表上注冊(cè)方才成為一個(gè)可被調(diào)用的域,注冊(cè)時(shí)處理器會(huì)在域表中增加 一項(xiàng),每項(xiàng)代表著一個(gè)域并由一個(gè)域ID作為令牌唯一標(biāo)識(shí)。
[0071] 所述處理器硬件執(zhí)行調(diào)用切換步驟,包括如下步驟:
[0072]步驟Cl,處理器執(zhí)行域調(diào)用指令;
[0073] 其中,所述步驟Cl具體包括如下步驟:
[0074] 步驟Cl. 1,將當(dāng)前調(diào)用者所處域的狀態(tài)進(jìn)行保存;
[0075] 步驟Cl. 2,根據(jù)調(diào)用者提供的被調(diào)用者所處域的域ID,在域表中查找對(duì)應(yīng)的域表 項(xiàng);
[0076] 步驟Cl .3,將處理器當(dāng)前寄存器的狀態(tài)更改為所查找到的域表項(xiàng)的值;
[0077]步驟Cl.4,處理器將一寄存器的值設(shè)置為調(diào)用域的域ID。
[0078]所述軟件被調(diào)用者執(zhí)行授權(quán)步驟,包括如下步驟:
[0079]步驟Dl,處理器開始執(zhí)行被調(diào)用域入口處對(duì)應(yīng)的命令,根據(jù)所獲取的調(diào)用域ID,實(shí) 施對(duì)調(diào)用者的權(quán)限檢查。
[0080] 優(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)方式完成的。