[發明專利]一種基于內存共享的虛擬機內外通信方法在審
| 申請號: | 202110007550.6 | 申請日: | 2021-01-05 |
| 公開(公告)號: | CN112822266A | 公開(公告)日: | 2021-05-18 |
| 發明(設計)人: | 鄧金祥;王宗才;胡周;毛春森;張潔;趙鍵;俞祥基;胡勇;王煒 | 申請(專利權)人: | 成都安思科技有限公司 |
| 主分類號: | H04L29/08 | 分類號: | H04L29/08;G06F9/54 |
| 代理公司: | 北京天奇智新知識產權代理有限公司 11340 | 代理人: | 葉明博 |
| 地址: | 610041 四川省成都市高新區天*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 內存 共享 虛擬機 內外 通信 方法 | ||
本發明涉及一種基于內存共享的虛擬機內外通信方法,包括主機程序由用戶層業務程序+注入虛機進程的Dll組成,客戶機系統需一個驅動和與驅動通信的用戶層程序,客戶機里面的用戶程序是可選的,在一些特殊場景中可以用驅動獨立通信,而不必將數據轉發至上層。首先Guest內部程序加載驅動,驅動申請一段連續物理內存并寫入約定標識;主機端用戶程序分析虛擬機進程的內存布局并獲取虛擬機進程映射VM的虛擬內存地址并以頁為最小單位搜索約定標識內存區,找到后便可直接讀寫內存使得主機實現與虛機驅動通信。本發明可作為網絡通信之外的主機與客戶機之間數據通信的備用手段。
技術領域
本發明涉及一種虛擬機內外通信方法,尤其涉及一種基于內存共享的虛擬機內外通信方法。
背景技術
目前運行于虛擬機內部的程序與主機上的進程主要是通過網絡進行通信。這種通信方式在網絡暢通及虛擬化平臺(Hypervisor)或軟件運行虛擬機數量較少的情況下表現良好。不過,一旦出現網絡故障或虛擬機啟動數量較多時,內外之間的通信將可能不可用,比如VM內部惡意程序阻斷網絡的行為、VM之間的網絡沖突、網絡故障、內外通信大量發包阻塞等導致VM失控。
發明內容
本發明的目的在于克服現有技術的缺點,提供了一種基于內存共享的虛擬機內外通信方法,解決了現有技術中存在的問題。
本發明的目的通過以下技術方案來實現:一種基于內存共享的虛擬機內外通信方法,所述內外通信方法包括:
客戶機啟動內的主程序A啟動讀寫接口與驅動通信,主機程序B啟動注入動態庫C到客戶機進程得到客戶機內存地址;
動態庫C搜索客戶機內驅動申請的內存區,并創建內存共享區與主機程序B共享客戶機的數據;
主機程序B寫入數據并設置寫入事件信號可讀后等待動態庫C讀取完畢,動態庫C收到該數據后將其添加至寫入客戶機的寫緩存隊列,動態庫C中的寫操作線程取出待寫數據并將數據寫入與客戶機共享的內存區;
客戶機確定數據讀入區域可讀并讀入數據和確定數據寫入區域可寫并寫入數據;
動態庫C中的讀操作線程讀入附加了附加信息的數據至讀緩存隊列,并從讀緩存隊列中取出可用數據寫入主機內存共享區將其傳遞給主機程序B;
主機程序B等待寫操作事件結束,通過主機內存共享區讀入數據并設置讀取完畢事件信號通知動態庫C。
所述客戶機啟動內的主程序A啟動讀寫接口與驅動通信,主機程序B啟動注入動態庫C到客戶機進程得到客戶機內存地址包括:
客戶機啟動,驅動加載申請連續物理內存,寫入約定標識;
客戶機內的程序A啟動,通過模擬設備控制接口或者文件讀寫接口與驅動通信,驅動與主機通過內存交換數據;
主機程序B啟動,傳入客戶機進程的PID;
主機程序B注入動態庫C到客戶機進程,D11查詢進程虛擬內存,餓到客戶機內存地址。
所述動態庫C搜索客戶機內驅動申請的內存區,并創建內存共享區與主機程序B共享客戶機的數據包括:
動態庫C從客戶機內存地址起始處并偏移內存一般大小后以頁為單位搜索客戶機內驅動申請的內存區;
創建內存共享區與主機程序B共享客戶機的數據,通過命名飾件句柄來保證在主機上操作共享資源不會發生多進程、多線程之間的競爭。
所述主機程序B寫入數據并設置寫入時間信號可讀后等待動態庫C讀取完畢,添加至寫入客戶機的待寫隊列,動態庫C中的寫操作線程取出待寫數據并將數據寫入與客戶機共享的內存區包括:
主機程序B與客戶機內的操作通過自定義原子鎖來保證操作的互斥性;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于成都安思科技有限公司,未經成都安思科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110007550.6/2.html,轉載請聲明來源鉆瓜專利網。





