本申請(qǐng)涉及虛擬化技術(shù)領(lǐng)域,特別涉及一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法、裝置和電子設(shè)備。
背景技術(shù):
Gralloc(Graphic Memory Allocator)是谷歌Google開(kāi)發(fā)的專為安卓Android顯示系統(tǒng)使用的一種共享內(nèi)存的管理模塊。該共享內(nèi)存特指一種物理地址連續(xù)、支持DMA(Direct Memory Access,直接內(nèi)存存取)設(shè)備直接訪問(wèn)的內(nèi)存區(qū)域,可以直接被GPU(Graphics Processing Unit,圖形處理器)、VPU(Visual Processing Unit,視覺(jué)處理單元)、相機(jī)Camera等硬件設(shè)備訪問(wèn),并且還支持作為OpenGL(Open Graphics Library,圖形程序接口)的紋理texture作渲染使用。
通過(guò)Gralloc可以使不同的模塊之間的內(nèi)存共享,并且該共享內(nèi)存支持DMA設(shè)備直接訪問(wèn),而不需要通過(guò)CPU(Central Processing Unit,中央處理器)拷貝和處理,大大降低了CPU的負(fù)載率,使CPU利用率和并行處理能力得到更大的提升。
隨著虛擬化技術(shù)的飛速發(fā)展,在虛擬化技術(shù)領(lǐng)域如何訪問(wèn)這種共享內(nèi)存成為亟待解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法、裝置和電子設(shè)備,主要用以實(shí)現(xiàn)多操作系統(tǒng)對(duì)共享內(nèi)存的訪問(wèn)。
第一方面,本申請(qǐng)實(shí)施例提供了一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法,所述方法包括:
在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;
在主操作系統(tǒng)中,通過(guò)共享內(nèi)存管理模塊Gralloc為所述客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向所述客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;
在客戶操作系統(tǒng)中,通過(guò)模擬處理器QEMU將所述索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至所述客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至所述軟件。
第二方面,本申請(qǐng)實(shí)施例提供了一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置,所述裝置包括:
申請(qǐng)模塊,用于在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;
第一處理模塊,用于在主操作系統(tǒng)中,通過(guò)共享內(nèi)存管理模塊Gralloc為所述客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向所述客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;
第二處理模塊,用于在客戶操作系統(tǒng)中,通過(guò)模擬處理器QEMU將所述索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至所述客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至所述軟件。
第三方面,本申請(qǐng)實(shí)施例提供了一種電子設(shè)備,所述電子設(shè)備包括:
存儲(chǔ)器,一個(gè)或多個(gè)處理器;存儲(chǔ)器與處理器通過(guò)通信總線相連;處理器被配置為執(zhí)行存儲(chǔ)器中的指令;所述存儲(chǔ)介質(zhì)中存儲(chǔ)有用于執(zhí)行上述第一方面中各個(gè)步驟的指令。
第四方面,本申請(qǐng)實(shí)施例提供了一種與電子設(shè)備結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括內(nèi)嵌于計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì)中的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序包括用于使所述電子設(shè)備執(zhí)行上述第一方面中各個(gè)步驟的指令。
有益效果如下:
本申請(qǐng)實(shí)施例中在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;在主操作系統(tǒng)中,通過(guò)Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;在客戶操作系統(tǒng)中,通過(guò)QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件,實(shí)現(xiàn)了多操作系統(tǒng)對(duì)共享內(nèi)存的訪問(wèn)。
附圖說(shuō)明
下面將參照附圖描述本申請(qǐng)的具體實(shí)施例,其中:
圖1為本申請(qǐng)實(shí)施例中的一種應(yīng)用用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法的系統(tǒng)的結(jié)構(gòu)示意;
圖2為本申請(qǐng)實(shí)施例中的一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法的流程示意圖;
圖3為本申請(qǐng)實(shí)施例中的另一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法的流程示意圖;
圖4為本申請(qǐng)實(shí)施例中的一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置的結(jié)構(gòu)示意圖;
圖5為本申請(qǐng)實(shí)施例中的一種電子設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本申請(qǐng)的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本申請(qǐng)的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說(shuō)明,顯然,所描述的實(shí)施例僅是本申請(qǐng)的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。并且在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以互相結(jié)合。
申請(qǐng)人在申請(qǐng)過(guò)程中注意到:
Gralloc既可以使不同的模塊同時(shí)訪問(wèn)一塊內(nèi)存,并且該內(nèi)存的訪問(wèn)還支持DMA設(shè)備的直接訪問(wèn)而不需要通過(guò)CPU拷貝,大大降低了CPU的負(fù)載率,使CPU利用率和并行處理能力得到更大的提升。但是對(duì)于虛擬操作系統(tǒng),目前沒(méi)有將Gralloc虛擬化的可行方案。
基于此,本申請(qǐng)?zhí)峁┝艘环N用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法,在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;在主操作系統(tǒng)中,通過(guò)Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;在客戶操作系統(tǒng)中,通過(guò)QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件,實(shí)現(xiàn)了多操作系統(tǒng)對(duì)共享內(nèi)存的訪問(wèn)。
本申請(qǐng)?zhí)峁┑囊环N用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法,應(yīng)用于圖1所示的系統(tǒng),該系統(tǒng)包括多個(gè)客戶操作系統(tǒng)101和一個(gè)主操作系統(tǒng)102。各客戶操作系統(tǒng)101均包括一個(gè)vGralloc和前端驅(qū)動(dòng)1011,主操作系統(tǒng)102包括后端驅(qū)動(dòng)1021、一個(gè)Gralloc1022、以及一個(gè)Gralloc服務(wù)端1023。
圖1所示的系統(tǒng)中任一客戶操作系統(tǒng)101在訪問(wèn)由所有客戶操作系統(tǒng)101和主操作系統(tǒng)102共享的物理連續(xù)的內(nèi)存時(shí),可按照如下流程實(shí)現(xiàn)。參見(jiàn)圖2,該流程為:
201,在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存。
其中,軟件為需要調(diào)用中央處理器直接訪問(wèn)內(nèi)存的軟件。例如,Camera Capture或者視頻軟編碼。
具體的,在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)發(fā)送共享內(nèi)存申請(qǐng)。
例如,任一客戶操作系統(tǒng)101在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),通過(guò)其包括的前端驅(qū)動(dòng)1011與后端驅(qū)動(dòng)1021之間的通信,向Gralloc服務(wù)端1023申請(qǐng)一塊共享內(nèi)存。
202,在主操作系統(tǒng)中,通過(guò)Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值。
具體的,主操作系統(tǒng)102通過(guò)后端驅(qū)動(dòng)1021接收到共享內(nèi)存申請(qǐng)后,請(qǐng)求Gralloc服務(wù)端1023調(diào)用Gralloc1022為該任一客戶操作系統(tǒng)1021分配一塊共享內(nèi)存子區(qū)域。主操作系統(tǒng)102通過(guò)前端驅(qū)動(dòng)1011與后端驅(qū)動(dòng)1021之間的通信,向該任一客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域?qū)?yīng)的索引值。
通過(guò)步驟201和步驟202為任一客戶操作系統(tǒng)101分配共享內(nèi)存子區(qū)域后,即實(shí)現(xiàn)Gralloc 1022的虛擬化。
203,在客戶操作系統(tǒng)中,通過(guò)QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件。
具體的,任一客戶操作系統(tǒng)101將索引值發(fā)送給QEMU,QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射到任一客戶操作系統(tǒng)101,任一客戶操作系統(tǒng)101將映射子區(qū)域的地址返回至軟件。
例如,將共享內(nèi)存子區(qū)域通過(guò)QEMU映射到任一客戶操作系統(tǒng)101系統(tǒng)中,再通過(guò)任一客戶操作系統(tǒng)101的kernel將QEMU映射的共享內(nèi)存子區(qū)域再映射到任一客戶操作系統(tǒng)101的用戶空間中,任一客戶操作系統(tǒng)101將映射子區(qū)域的地址返回至軟件,從而通過(guò)任一客戶操作系統(tǒng)101中的軟件訪問(wèn)該地址對(duì)應(yīng)的映射子區(qū)域,進(jìn)而訪問(wèn)主操作系統(tǒng)102的共享內(nèi)存子區(qū)域。
以拍照流程為例,通過(guò)本實(shí)施例提供的方法進(jìn)行內(nèi)存訪問(wèn)的方法如下。參見(jiàn)圖3,任一客戶操作系統(tǒng)101為Guest,主操作系統(tǒng)102為Host。Guest中的Camera準(zhǔn)備拍照時(shí),通過(guò)Guest的前端驅(qū)動(dòng)與Host的后端驅(qū)動(dòng)之間的通信,向Host的Gralloc服務(wù)端申請(qǐng)一塊共享內(nèi)存。Guest通過(guò)前端驅(qū)動(dòng)與Host的后端驅(qū)動(dòng)之間的通信獲取該共享內(nèi)存子區(qū)域?qū)?yīng)的索引值。當(dāng)Camera拍照時(shí),先將索引值發(fā)送至Camera的主操作系統(tǒng),由Camera的主操作系統(tǒng)根據(jù)索引值找到對(duì)應(yīng)的共享內(nèi)存子區(qū)域,并由Camera設(shè)備通過(guò)DMA將拍照后的數(shù)據(jù)填充至本區(qū)域,然后在Guest端將該共享內(nèi)存子區(qū)域?qū)?yīng)的索引值發(fā)送至QEMU,QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射到Guest系統(tǒng)中,進(jìn)而鎖定對(duì)應(yīng)的共享內(nèi)存子區(qū)域。Guest將該共享內(nèi)存子區(qū)域映射到用戶空間后,Guest將映射子區(qū)域的地址返回至軟件,Guest中的Camera的軟件通過(guò)CPU將該共享內(nèi)存子區(qū)域的數(shù)據(jù)讀出并保存為照片文件。
有益效果:
本申請(qǐng)實(shí)施例中在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;在主操作系統(tǒng)中,通過(guò)Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;在客戶操作系統(tǒng)中,通過(guò)QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件,實(shí)現(xiàn)了多操作系統(tǒng)對(duì)共享內(nèi)存的訪問(wèn)。
基于同一發(fā)明構(gòu)思,本實(shí)施例提供了一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置,該用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置解決問(wèn)題的原理與圖2所示的一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法相似,因此該用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置的實(shí)施可以參見(jiàn)圖2所示的一種用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法的實(shí)施,重復(fù)之處不再贅述。
參見(jiàn)圖4,該用于多操作系統(tǒng)的內(nèi)存訪問(wèn)裝置包括:
申請(qǐng)模塊401,用于在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;
第一處理模塊402,用于在主操作系統(tǒng)中,通過(guò)共享內(nèi)存管理模塊Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;
第二處理模塊403,用于在客戶操作系統(tǒng)中,通過(guò)模擬處理器QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件。
可選地,申請(qǐng)模塊401,用于在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)發(fā)送共享內(nèi)存申請(qǐng)。
可選地,軟件為需要調(diào)用中央處理器直接訪問(wèn)內(nèi)存的軟件。
有益效果:
本申請(qǐng)實(shí)施例中在客戶操作系統(tǒng)中,在監(jiān)測(cè)到軟件需要共享內(nèi)存時(shí),向主操作系統(tǒng)申請(qǐng)共享內(nèi)存;在主操作系統(tǒng)中,通過(guò)Gralloc為客戶操作系統(tǒng)分配一塊共享內(nèi)存子區(qū)域,向客戶操作系統(tǒng)返回共享內(nèi)存子區(qū)域的索引值;在客戶操作系統(tǒng)中,通過(guò)QEMU將索引值對(duì)應(yīng)的共享內(nèi)存子區(qū)域映射至客戶操作系統(tǒng)后,將映射子區(qū)域的地址返回至軟件,實(shí)現(xiàn)了多操作系統(tǒng)對(duì)共享內(nèi)存的訪問(wèn)。
再一方面,本申請(qǐng)實(shí)施例還提供了一種電子設(shè)備,參見(jiàn)圖5,電子設(shè)備包括:
存儲(chǔ)器501,一個(gè)或多個(gè)處理器502;存儲(chǔ)器與處理器通過(guò)通信總線相連;處理器被配置為執(zhí)行存儲(chǔ)器中的指令;所述存儲(chǔ)介質(zhì)中存儲(chǔ)有用于執(zhí)行上述的任一項(xiàng)所述的用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法中各個(gè)步驟的指令。
再一方面,本申請(qǐng)實(shí)施例還提供了一種與電子設(shè)備結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括內(nèi)嵌于計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì)中的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序包括用于使所述電子設(shè)備執(zhí)行上述的任一項(xiàng)所述的用于多操作系統(tǒng)的內(nèi)存訪問(wèn)方法中各個(gè)步驟的指令。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。