两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于嵌入式虛擬化平臺(tái)的域間文件數(shù)據(jù)共享方法

文檔序號(hào):6439765閱讀:202來源:國(guó)知局
專利名稱:基于嵌入式虛擬化平臺(tái)的域間文件數(shù)據(jù)共享方法
基于嵌入式虛擬化平臺(tái)的域間文件數(shù)據(jù)共享方法技術(shù)領(lǐng)域
本發(fā)明屬于嵌入式系統(tǒng)虛擬化平臺(tái)上域間數(shù)據(jù)共享技術(shù)領(lǐng)域,具體來說就是提出了一種可靠的基于嵌入式虛擬化平臺(tái)的域間共享塊設(shè)備上文件數(shù)據(jù)的方法。
背景技術(shù)
嵌入式系統(tǒng)從虛擬化技術(shù)中獲得的最直接好處是針對(duì)客戶操作系統(tǒng)(如Linux、 Android等)以及其他運(yùn)行環(huán)境(自行設(shè)計(jì)的內(nèi)核、設(shè)備驅(qū)動(dòng)程序等)采取嚴(yán)格的硬件隔離,從而改善嵌入式系統(tǒng)的可靠性和安全性。這種隔離避免了在智能設(shè)備的獨(dú)立功能區(qū)中 (如移動(dòng)電話中的基帶和用戶界面代碼)代碼和數(shù)據(jù)的非故意破壞,而且也阻止了終端用戶通過下載的代碼進(jìn)行惡意訪問。
然而,虛擬化技術(shù)為嵌入式應(yīng)用所帶來的穩(wěn)健性與傳統(tǒng)的嵌入式設(shè)計(jì)經(jīng)驗(yàn)相悖。 傳統(tǒng)的設(shè)計(jì)經(jīng)驗(yàn)強(qiáng)調(diào)在多個(gè)嵌入式軟件組件之間有效地共享數(shù)據(jù),但是將代碼嚴(yán)格地分割到各個(gè)域時(shí),這種數(shù)據(jù)共享將被阻礙或被禁止。由于在各種不同的虛擬機(jī)上運(yùn)行的代碼中沒有高效的域間通信技術(shù),利用傳統(tǒng)的域間數(shù)據(jù)共享技術(shù)將會(huì)使嵌入式系統(tǒng)的性能降低到無法忍受的水平。
在系統(tǒng)虛擬化領(lǐng)域,域間文件數(shù)據(jù)共享都是基于網(wǎng)絡(luò)的方式,即基于TCP/IP協(xié)議來實(shí)現(xiàn)文件數(shù)據(jù)共享(例如SAMBA、NFS技術(shù)等)。對(duì)嵌入式系統(tǒng)來講,依靠網(wǎng)絡(luò)的方式來實(shí)現(xiàn)域間的文件數(shù)據(jù)的共享,不僅性能較低,占用資源多,可靠性也不高,這對(duì)嵌入式系統(tǒng)是不允許的。在一個(gè)系統(tǒng)虛擬機(jī)環(huán)境里,硬件資源被客戶操作系統(tǒng)Guest OS(也稱為Domain域)共享,硬件資源的分配和訪問由軟件層一虛擬監(jiān)控程序(Virtual Machine Monitor),如果不采用網(wǎng)絡(luò)的方式,單單依靠設(shè)備驅(qū)動(dòng)程序以及Domain域中的虛擬文件系統(tǒng)VFS (Virtual File System)來實(shí)現(xiàn)文件數(shù)據(jù)的共享,文件數(shù)據(jù)的一致性則得不到保證。 比如,當(dāng)一個(gè)文件被多個(gè)Domain域中的進(jìn)程同時(shí)訪問時(shí),就會(huì)出現(xiàn)同步異常。具體來說,如果兩個(gè)Domain域的進(jìn)程對(duì)文件的同一位置進(jìn)行寫,由于緩存的存在,結(jié)果會(huì)不可預(yù)知。另外,如果一個(gè)Domain中的進(jìn)程對(duì)文件進(jìn)行寫,另一個(gè)Domain中的進(jìn)程對(duì)同一文件進(jìn)行讀, 讀數(shù)據(jù)的結(jié)果也不可預(yù)知。發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種在嵌入式虛擬化平臺(tái)上可靠的域間數(shù)據(jù)共享方法,實(shí)現(xiàn)了 Domain域間對(duì)塊設(shè)備上文件數(shù)據(jù)安全可靠的共享,并且提高了共享塊設(shè)備文件數(shù)據(jù)的傳輸性能。
一種基于嵌入式虛擬化平臺(tái)的域間數(shù)據(jù)共享方法,VFS中的索引節(jié)點(diǎn)分為前端索引節(jié)點(diǎn)和后端索引節(jié)點(diǎn),前端索引節(jié)點(diǎn)位于客戶操作系統(tǒng)Domain域中,后端索引節(jié)點(diǎn)位于軟件層一虛擬監(jiān)控程序VMM中,該方法包括打開文件、讀寫文件和關(guān)閉文件三個(gè)步驟
所述打開文件步驟為
(A. DDomain域的進(jìn)程從待打開文件的路徑獲取待打開文件對(duì)應(yīng)的前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl信息,為本次打開操作分配文件號(hào),創(chuàng)建包含前端索引節(jié)點(diǎn)F1、塊設(shè)備BDl 和文件號(hào)信息的文件結(jié)構(gòu)對(duì)象01,將其加入文件描述符數(shù)組;
(A.2)若Domain域中已存在前端索引節(jié)點(diǎn)F1,則Fl的使用計(jì)數(shù)加一,否則,在 Domain域中建立前端索引節(jié)點(diǎn)F1,并在塊設(shè)備BDl中讀出待打開文件在塊設(shè)備BDl上的物理位置分布信息;
(A. 3)Domain域向VMM發(fā)送包含前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID信息的超級(jí)調(diào)用請(qǐng)求,VMM對(duì)前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID作哈希計(jì)算,依據(jù)計(jì)算得到的后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中找到其對(duì)應(yīng)的后端索引節(jié)點(diǎn)Bl ;
(A.4)若VMM中存在后端索引節(jié)點(diǎn)Bi,則Bl的使用計(jì)數(shù)加一,否則,在VMM中建立后端索引節(jié)點(diǎn)Bi,將其插入后端索引節(jié)點(diǎn)哈希鏈表中,插入和查找該哈希鏈表所使用的哈希值依據(jù)前端索引節(jié)Fl和塊設(shè)備BDl的ID計(jì)算;
所述讀寫文件步驟包括讀寫文件請(qǐng)求子步驟和讀寫文件執(zhí)行子步驟,所述讀寫文件請(qǐng)求子步驟將讀寫文件請(qǐng)求掛載到塊設(shè)備的讀寫請(qǐng)求隊(duì)列上,讀寫文件執(zhí)行子步驟執(zhí)行讀寫請(qǐng)求隊(duì)列中的讀寫請(qǐng)求;
所述讀寫文件請(qǐng)求子步驟具體為
(B. DDomain域的進(jìn)程發(fā)出讀寫操作請(qǐng)求,讀寫操作請(qǐng)求包含待讀寫文件的文件號(hào)、用戶空間數(shù)據(jù)緩沖區(qū)、待讀寫文件的邏輯偏移、讀寫數(shù)據(jù)長(zhǎng)度和讀寫類型;
(B. 2)依據(jù)待讀寫文件的文件號(hào)索引進(jìn)程的文件描述符數(shù)組找到文件結(jié)構(gòu)對(duì)象 02 ;
(B. 3)獲取文件結(jié)構(gòu)對(duì)象02中的前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2 ;
(B. 4)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存是否已經(jīng)在內(nèi)存中,若存在,進(jìn)入步驟(B. 5),否則,分配頁(yè)緩存,進(jìn)入步驟(B. 5);
(B. 5)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存標(biāo)志位以判斷所述頁(yè)緩存是否是最新,若是,則進(jìn)入步驟(B. 6),否則,進(jìn)入步驟(B. 7);
(B. 6)若為讀請(qǐng)求,則將所述頁(yè)緩存復(fù)制到用戶空間數(shù)據(jù)緩沖區(qū),讀寫操作結(jié)束, 否則,將用戶空間數(shù)據(jù)緩沖區(qū)復(fù)制到所述應(yīng)頁(yè)緩存中,讀寫操作結(jié)束;
(B. 7)根據(jù)前端索引節(jié)點(diǎn)F2找到待讀寫文件在塊設(shè)備BD2的物理位置分布信息, 并結(jié)合待讀寫文件的邏輯偏移得到待讀寫文件在塊設(shè)備上的物理位置,再根據(jù)該物理位置和讀寫數(shù)據(jù)長(zhǎng)度得到讀寫區(qū)間;
(B. 8)對(duì)前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2作哈希計(jì)算得到第一后端索引節(jié)點(diǎn)索引值,并分配讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2,所述讀寫請(qǐng)求對(duì)象R2包含待讀寫文件在塊設(shè)備上的物理位置、讀寫數(shù)據(jù)長(zhǎng)度、頁(yè)緩存位置和進(jìn)程號(hào),所述文件鎖對(duì)象L2包含讀寫區(qū)間和讀寫類型;
(B. 9)Domain域向VMM發(fā)送包含第一后端索引節(jié)點(diǎn)索引值、讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2的超級(jí)調(diào)用請(qǐng)求;
(B. 10) VMM依據(jù)第一后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B2;
(B. 11)依據(jù)文件鎖對(duì)象L2中的讀寫類型和讀寫區(qū)間,判定該文件鎖對(duì)象L2是否與后端索引節(jié)點(diǎn)B2的文件鎖列表某一文件鎖對(duì)象LO有沖突,若有沖突,則進(jìn)入步驟(B. 12),否則,進(jìn)入(B. 13);
(B. 12)將讀寫操作請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2掛載在沖突的文件鎖對(duì)象LO的沖突鏈表上,結(jié)束;
(B. 13)將讀寫操作請(qǐng)求R2掛載到塊設(shè)備BD2的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L2 掛載到后端索引節(jié)點(diǎn)B2的文件鎖鏈表上,結(jié)束;
所述讀寫文件執(zhí)行子步驟具體為
(C. 1)若塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列非空,則VMM執(zhí)行塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列中的當(dāng)前讀寫請(qǐng)求對(duì)象R3;
(C. 2)執(zhí)行完畢時(shí)釋放R3對(duì)應(yīng)的文件鎖對(duì)象L3,更新頁(yè)緩存的標(biāo)志位,向讀寫請(qǐng)求對(duì)象R3的來源Domain域發(fā)出軟中斷以喚醒R3中的進(jìn)程號(hào)指定的讀寫進(jìn)程;
(C. 3)若釋放的文件鎖對(duì)象L3的沖突鏈表非空,則激活當(dāng)前文件鎖對(duì)象L4,判定文件鎖對(duì)象L4是否與其對(duì)應(yīng)的后端索引節(jié)點(diǎn)B4的文件鎖隊(duì)列存在沖突,若有沖突,進(jìn)入步驟(C. 4),否則,進(jìn)入步驟(C. 5);
(C. 4)被激活的文件鎖對(duì)象L4及其對(duì)應(yīng)的讀寫請(qǐng)求對(duì)象R4掛載在沖突的文件鎖對(duì)象Γ0的沖突鏈表上,返回步驟(C. 1);
(C. 5)將讀寫請(qǐng)求對(duì)象R4掛載到塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L4掛載到后端索引節(jié)點(diǎn)B4的文件鎖鏈表上,返回步驟(C. 1);
所述關(guān)閉文件步驟具體為
(D. 1)將待關(guān)閉文件對(duì)應(yīng)的前端索引節(jié)點(diǎn)F4的使用計(jì)數(shù)減一,若F4的使用計(jì)數(shù)為 0,則釋放F4 ;
(D. 2) Domain域的進(jìn)程對(duì)待關(guān)閉文件的前端索引節(jié)點(diǎn)F3和塊設(shè)備BD4作哈希計(jì)算得到第二后端索引節(jié)點(diǎn)索引值;
(D. 3)Domain域向VMM發(fā)出包含第二后端索引節(jié)點(diǎn)索引值的超級(jí)調(diào)用請(qǐng)求;
(D. 4) VMM依據(jù)第二后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B5,對(duì)后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)減一,若后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)為 0,則釋放后端索引節(jié)點(diǎn)B5。
本發(fā)明能夠保證Domain域在共享文件數(shù)據(jù)時(shí)的一致性,具體做法是通過修改 Domain域中的VFS層,將VFS層的索引節(jié)點(diǎn)對(duì)象分為前端索引節(jié)點(diǎn)和后端索引節(jié)點(diǎn)。前端索引節(jié)點(diǎn)位于Domain中的VFS (Virtual File System)層,向Domain域中的進(jìn)程提供操作文件的接口。后端索引節(jié)點(diǎn)位于VMM (Virtual Machine Monitor)中,與塊設(shè)備上的文件一一對(duì)應(yīng),是控制VMM上不同的Domain域在讀寫塊設(shè)備同一個(gè)文件時(shí)在內(nèi)存中存在的唯一的控制節(jié)點(diǎn);同時(shí)在后端索引節(jié)點(diǎn)上引入了文件鎖,通過后端索引節(jié)點(diǎn)上的文件鎖保證同一個(gè)文件的同一區(qū)段被VMM上的Domain域進(jìn)行讀寫時(shí)的數(shù)據(jù)一致性,根據(jù)文件讀寫請(qǐng)求的種類
(1)當(dāng)發(fā)出讀文件請(qǐng)求時(shí),若后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段已經(jīng)有寫文件鎖存在,則發(fā)生鎖沖突,將讀文件請(qǐng)求的讀文件鎖掛載在沖突的寫文件鎖沖突隊(duì)列上。
(2)當(dāng)發(fā)出寫文件請(qǐng)求時(shí),若后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段已經(jīng)有讀文件鎖存在,則發(fā)生鎖沖突,將寫文件請(qǐng)求的寫文件鎖掛載在沖突的讀文件鎖沖突隊(duì)列上。
(3)當(dāng)發(fā)出寫文件請(qǐng)求時(shí),若后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段已經(jīng)有寫文件鎖存在,則發(fā)生鎖沖突,將寫文件請(qǐng)求的寫文件鎖掛載在沖突的寫文件鎖沖突隊(duì)列上。
當(dāng)某個(gè)文件請(qǐng)求被完成后,VMM將解除對(duì)應(yīng)區(qū)段的文件鎖,此時(shí),若該文件鎖上的鎖沖突隊(duì)列不為空,則將鎖沖突隊(duì)列上的鎖激活。
該方法還能夠提高數(shù)據(jù)的傳輸效率,減少Domain域和VMM上下文切換次數(shù)。具體做法是將塊設(shè)備驅(qū)動(dòng)從Domain域中完全去掉,而將塊設(shè)備驅(qū)動(dòng)放在VMM中。當(dāng)Domain域中的進(jìn)程發(fā)起文件數(shù)據(jù)訪問時(shí),在Domain域的內(nèi)核態(tài),將要讀寫數(shù)據(jù)的信息組成一個(gè)讀寫請(qǐng)求,然后向VMM發(fā)送超級(jí)調(diào)用將讀寫請(qǐng)求掛載在VMM中的塊設(shè)備讀寫請(qǐng)求隊(duì)列上。每次從VMM返回Domain前夕,VMM檢測(cè)共享塊設(shè)備上的讀寫請(qǐng)求隊(duì)列,VMM完成塊設(shè)備讀寫,并向發(fā)起文件讀寫的Domain發(fā)出軟中斷,以通知對(duì)應(yīng)的Domain讀寫請(qǐng)求已經(jīng)完成。
本發(fā)明有以下優(yōu)點(diǎn)或用途
(1)可以保證多個(gè)Domain對(duì)文件進(jìn)行讀寫時(shí)的數(shù)據(jù)一致性
當(dāng)Domain域中的用戶進(jìn)程發(fā)起讀寫訪問時(shí),檢測(cè)后端索引節(jié)點(diǎn)上掛載的文件鎖。 當(dāng)發(fā)出讀文件請(qǐng)求時(shí),若后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段已經(jīng)有寫文件鎖存在,則發(fā)生鎖沖突,將讀文件請(qǐng)求的讀文件鎖掛載在沖突的寫文件鎖沖突隊(duì)列上;若當(dāng)發(fā)出讀文件請(qǐng)求時(shí),后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段是讀文件鎖,則不發(fā)生沖突,進(jìn)行正常的讀寫操作。當(dāng)發(fā)出寫文件請(qǐng)求時(shí),若后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段已經(jīng)有讀文件鎖存在, 則發(fā)生鎖沖突,將寫文件請(qǐng)求的寫文件鎖掛載在沖突的讀文件鎖沖突隊(duì)列上;若當(dāng)發(fā)出寫文件請(qǐng)求時(shí),后端索引節(jié)點(diǎn)的鎖隊(duì)列上對(duì)應(yīng)的區(qū)段是寫文件鎖,則發(fā)生鎖沖突,將寫文件請(qǐng)求的寫文件鎖掛載在沖突的寫文件鎖沖突隊(duì)列上。
(2)提高了 Domain域間數(shù)據(jù)共享的數(shù)據(jù)傳輸性能
將1/0調(diào)度模塊和塊設(shè)備驅(qū)動(dòng)放在VMM中,VMM將決定調(diào)度的時(shí)機(jī)和向塊設(shè)備發(fā)起讀寫命令,而不由Domain域來做出讀寫決定,這樣做將會(huì)大大減少Domain域和VMM之間上下文切換的頻率,提高系統(tǒng)性能。


圖1為該發(fā)明主要對(duì)象之間的關(guān)系圖2為該發(fā)明打開文件時(shí)操作索引節(jié)點(diǎn)的流程圖3為該發(fā)明Domain域用戶進(jìn)程發(fā)起讀寫請(qǐng)求時(shí)的流程圖4為該發(fā)明VMM響應(yīng)塊設(shè)備讀寫請(qǐng)求的流程圖5為該發(fā)明關(guān)閉文件是操作索引節(jié)點(diǎn)的流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說明
系統(tǒng)主要對(duì)象關(guān)系圖如圖1所示。VFS中的前端索引節(jié)點(diǎn)位于Domain域中,后端索引節(jié)點(diǎn)位于VMM中。1/0調(diào)度模塊以及塊設(shè)備驅(qū)動(dòng)程序位于VMM中。前端索引節(jié)點(diǎn)與 Domain中用戶進(jìn)程以及VFS中的塊設(shè)備緩存和傳統(tǒng)的VFS對(duì)象(如超級(jí)塊,文件結(jié)構(gòu),掛載點(diǎn))聯(lián)系密切,后端索引節(jié)點(diǎn)與塊設(shè)備驅(qū)動(dòng)程序操作聯(lián)系密切。該方法包括打開文件、讀寫文件和關(guān)閉文件三個(gè)步驟
一、打開文件步驟
Domain域中的用戶進(jìn)程對(duì)共享塊設(shè)備上的文件讀寫之前,必須要讓進(jìn)程和文件建立一個(gè)連接,即一個(gè)獨(dú)立的上下文。這個(gè)獨(dú)立的上下文由打開文件號(hào)加以標(biāo)識(shí),這個(gè)打開的文件號(hào)由打開文件操作結(jié)束后提供。Domain域中的用戶進(jìn)程打開共享塊設(shè)備上的文件的主要操作步驟和傳統(tǒng)的VFS打開操作基本相同,不同的地方在操作索引節(jié)點(diǎn)。結(jié)合圖2,操作索引節(jié)點(diǎn)時(shí),進(jìn)程提供的主要參數(shù)為文件路徑、打開模式(如只讀,可讀寫等)。其主要操作步驟如下
(A. DDomain域的進(jìn)程從待打開文件的路徑獲取待打開文件對(duì)應(yīng)的前端索引節(jié)點(diǎn) Fl和塊設(shè)備BDl信息,為本次打開操作分配文件號(hào),建立包含前端索引節(jié)點(diǎn)F1、塊設(shè)備BDl 和文件號(hào)信息的文件結(jié)構(gòu)對(duì)象01,將其加入文件描述符數(shù)組;
(A.2)若Domain域中已存在前端索引節(jié)點(diǎn)F1,則Fl的使用計(jì)數(shù)加一,否則,在 Domain域中建立前端索引節(jié)點(diǎn)F1,并在塊設(shè)備BDl中讀出待打開文件在塊設(shè)備BDl上的物理位置分布信息;
(A. 3)Domain域向VMM發(fā)送包含前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID信息的超級(jí)調(diào)用請(qǐng)求,VMM對(duì)前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID作哈希計(jì)算,依據(jù)計(jì)算得到的哈希值找到其對(duì)應(yīng)的后端索引節(jié)點(diǎn)Bl ;
(A.4)若VMM中存在后端索引節(jié)點(diǎn)Bi,則Bl的使用計(jì)數(shù)加一,否則,在VMM中建立后端索引節(jié)點(diǎn)Bi,將其插入后端索引節(jié)點(diǎn)哈希鏈表中,插入和查找該哈希鏈表所使用的哈希值依據(jù)前端索引節(jié)Fl和塊設(shè)備BDl的ID計(jì)算;
二、讀寫文件步驟
讀寫文件步驟包括讀寫文件請(qǐng)求子步驟和讀寫文件執(zhí)行子步驟,所述讀寫文件請(qǐng)求子步驟將讀寫文件請(qǐng)求掛載到塊設(shè)備的讀寫請(qǐng)求隊(duì)列上,讀寫文件執(zhí)行子步驟執(zhí)行讀寫請(qǐng)求隊(duì)列中的讀寫請(qǐng)求
所述讀寫文件請(qǐng)求子步驟
打開文件操作完成后,會(huì)提供一個(gè)打開文件號(hào),用于讀寫文件時(shí),標(biāo)識(shí)進(jìn)程與要讀寫文件的上下文。下面結(jié)合圖3,Domain域中的用戶進(jìn)程對(duì)共享的塊設(shè)備上發(fā)出讀寫文件請(qǐng)求命令時(shí),除了提供打開文件號(hào)之外,還需要用戶空間數(shù)據(jù)緩沖區(qū)地址,以及要讀寫文件的偏移和數(shù)據(jù)的長(zhǎng)度。其主要操作步驟如下
(B. DDomain域的進(jìn)程發(fā)出讀寫操作請(qǐng)求,讀寫操作請(qǐng)求包含待讀寫文件的文件號(hào)、用戶空間數(shù)據(jù)緩沖區(qū)、待讀寫文件的邏輯偏移、讀寫數(shù)據(jù)長(zhǎng)度和讀寫類型;
(B. 2)依據(jù)待讀寫文件的文件號(hào)索引進(jìn)程的文件描述符數(shù)組找到文件結(jié)構(gòu)對(duì)象 02 ;
(B. 3)獲取文件結(jié)構(gòu)對(duì)象02中的前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2 ;
(B. 4)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存是否已經(jīng)在內(nèi)存中,若存在,進(jìn)入步驟(B. 5),否則,分配頁(yè)緩存,進(jìn)入步驟(B. 5);
(B. 5)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存標(biāo)志位以判斷該頁(yè)緩存是否是最新,若是,則進(jìn)入步驟(B. 6),否則,進(jìn)入步驟(B. 7);
(B. 6)若為讀請(qǐng)求,則將對(duì)應(yīng)頁(yè)緩存復(fù)制到用戶緩沖區(qū)間中,操作結(jié)束。否則,將用戶緩沖區(qū)的數(shù)據(jù)復(fù)制到對(duì)應(yīng)頁(yè)緩存中。
(B. 7)根據(jù)前端索引節(jié)點(diǎn)F2找到待讀寫文件在塊設(shè)備BD2的物理位置分布信息,并結(jié)合待讀寫文件的邏輯偏移得到待讀寫文件在塊設(shè)備上的物理位置,再根據(jù)該物理位置和讀寫數(shù)據(jù)長(zhǎng)度得到讀寫區(qū)間;
(B. 8)對(duì)前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2作哈希計(jì)算得到第一后端索引節(jié)點(diǎn)索引值,并分配讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2,所述讀寫請(qǐng)求對(duì)象R2包含待讀寫文件在塊設(shè)備上的物理位置、讀寫數(shù)據(jù)長(zhǎng)度、頁(yè)緩存位置和進(jìn)程號(hào),所述文件鎖對(duì)象L2包含讀寫區(qū)間和讀寫類型;
(B. 9)Domain域向VMM發(fā)送包含第一后端索引節(jié)點(diǎn)索引值、讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2的超級(jí)調(diào)用請(qǐng)求;
(B. 10) VMM依據(jù)第一后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B2;
(B. 11)依據(jù)文件鎖對(duì)象L2中的讀寫類型和讀寫區(qū)間,判定該文件鎖對(duì)象L2是否與后端索引節(jié)點(diǎn)B2的文件鎖列表某一文件鎖對(duì)象LO有沖突,若有沖突,則進(jìn)入步驟 (B. 12),否則,進(jìn)入(B. 13);
(B. 12)將讀寫操作請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2掛載在沖突的文件鎖對(duì)象LO的沖突鏈表上,結(jié)束;
(B. 13)將讀寫操作請(qǐng)求R2掛載到塊設(shè)備BD2的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L2 掛載到后端索引節(jié)點(diǎn)B2的文件鎖鏈表上,結(jié)束;
所述讀寫文件執(zhí)行子步驟
從用戶進(jìn)程發(fā)起讀寫操作,到讀寫操作被執(zhí)行是一個(gè)異步的過程。用戶進(jìn)程在將讀寫請(qǐng)求發(fā)給VMM,讀寫請(qǐng)求被掛載在塊設(shè)備讀寫請(qǐng)求隊(duì)列后,便返回。響應(yīng)塊設(shè)備上掛載的請(qǐng)求隊(duì)列發(fā)生在VMM切換回Domain空間時(shí),在CPU每次從VMM返回Domain之前,系統(tǒng)檢查共享塊設(shè)備的請(qǐng)求隊(duì)列,若隊(duì)列非空,則進(jìn)行塊設(shè)備讀寫操作。結(jié)合圖4,其操作步驟如下
(C. 1)若塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列非空,則VMM執(zhí)行塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列中的當(dāng)前讀寫請(qǐng)求對(duì)象R3;
(C. 2)執(zhí)行完畢時(shí)釋放R3對(duì)應(yīng)的文件鎖對(duì)象L3,更新頁(yè)緩存的標(biāo)志位,向讀寫請(qǐng)求對(duì)象R3的來源Domain域發(fā)出軟中斷以喚醒R3中的進(jìn)程號(hào)指定的讀寫進(jìn)程;
(C. 3)若釋放的文件鎖對(duì)象L3的沖突鏈表非空,則激活當(dāng)前文件鎖對(duì)象L4,判定文件鎖對(duì)象L4是否與其對(duì)應(yīng)的后端索引節(jié)點(diǎn)B4的文件鎖隊(duì)列存在沖突,若有沖突,進(jìn)入步驟(C. 4),否則,進(jìn)入步驟(C. 5);
(C. 4)被激活的文件鎖對(duì)象L4及其對(duì)應(yīng)的讀寫請(qǐng)求對(duì)象R4掛載在沖突的文件鎖對(duì)象Γ0的沖突鏈表上,返回步驟(C. 1);
(C. 5)將讀寫請(qǐng)求對(duì)象R4掛載到塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L4掛載到后端索引節(jié)點(diǎn)B4的文件鎖鏈表上,返回步驟(C. 1);
三、關(guān)閉文件步驟
Domain域中的用戶進(jìn)程對(duì)共享塊設(shè)備上的文件讀寫結(jié)束后,發(fā)出關(guān)閉文件請(qǐng)求釋放在內(nèi)存中的資源。關(guān)閉文件的主要操作步驟和傳統(tǒng)的VFS操作基本相同,不同的地方在于減少索引節(jié)點(diǎn)的使用計(jì)數(shù)同時(shí)也減少后端索引節(jié)點(diǎn)的使用計(jì)數(shù)。結(jié)合圖5,操作時(shí),需要的參數(shù)是打開文件號(hào),其具體操作過程是
(D. 1)將待關(guān)閉文件對(duì)應(yīng)的前端索引節(jié)點(diǎn)F4的使用計(jì)數(shù)減一,若F4的使用計(jì)數(shù)為 0,則釋放F4 ;
(D. 2) Domain域的進(jìn)程對(duì)待關(guān)閉文件的前端索引節(jié)點(diǎn)F3和塊設(shè)備BD4作哈希計(jì)算得到第二后端索引節(jié)點(diǎn)索引值;
(D. 3)Domain域向VMM發(fā)出包含第二后端索引節(jié)點(diǎn)索引值的超級(jí)調(diào)用請(qǐng)求;
(D. 4) VMM依據(jù)第二后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B5,對(duì)后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)減一,若后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)為 0,則釋放后端索引節(jié)點(diǎn)B5。
本發(fā)明通過修改VFS以及將Domain域中的塊讀寫請(qǐng)求隊(duì)列以及塊設(shè)備驅(qū)動(dòng)完全轉(zhuǎn)移到VMM中,不僅實(shí)現(xiàn)了塊設(shè)備文件數(shù)據(jù)的可靠共享,而且因?yàn)镈omain域和VMM切換頻率低而具有性能高效的優(yōu)點(diǎn)。
權(quán)利要求
1. 一種基于嵌入式虛擬化平臺(tái)的域間數(shù)據(jù)共享方法,其特征在于VFS中的索引節(jié)點(diǎn)分為前端索引節(jié)點(diǎn)和后端索引節(jié)點(diǎn),前端索引節(jié)點(diǎn)位于客戶操作系統(tǒng)Domain域中,后端索引節(jié)點(diǎn)位于軟件層一虛擬監(jiān)控程序VMM中,該方法包括打開文件、讀寫文件和關(guān)閉文件三個(gè)步驟所述打開文件步驟為(A. DDomain域的進(jìn)程從待打開文件的路徑獲取待打開文件對(duì)應(yīng)的前端索引節(jié)點(diǎn)Fl 和塊設(shè)備BDl信息,為本次打開操作分配文件號(hào),創(chuàng)建包含前端索引節(jié)點(diǎn)F1、塊設(shè)備BDl和文件號(hào)信息的文件結(jié)構(gòu)對(duì)象01,將其加入文件描述符數(shù)組;(A. 2)若Domain域中已存在前端索引節(jié)點(diǎn)Fl JUFl的使用計(jì)數(shù)加一,否則,在Domain 域中建立前端索引節(jié)點(diǎn)F1,并在塊設(shè)備BDl中讀出待打開文件在塊設(shè)備BDl上的物理位置分布信息;(A. 3)Domain域向VMM發(fā)送包含前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID信息的超級(jí)調(diào)用請(qǐng)求,VMM對(duì)前端索引節(jié)點(diǎn)Fl和塊設(shè)備BDl的ID作哈希計(jì)算,依據(jù)計(jì)算得到的后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中找到其對(duì)應(yīng)的后端索引節(jié)點(diǎn)Bl ;(A. 4)若VMM中存在后端索引節(jié)點(diǎn)Bi,則Bl的使用計(jì)數(shù)加一,否則,在VMM中建立后端索引節(jié)點(diǎn)Bi,將其插入后端索引節(jié)點(diǎn)哈希鏈表中,插入和查找該哈希鏈表所使用的哈希值依據(jù)前端索引節(jié)Fl和塊設(shè)備BDl的ID計(jì)算;所述讀寫文件步驟包括讀寫文件請(qǐng)求子步驟和讀寫文件執(zhí)行子步驟,所述讀寫文件請(qǐng)求子步驟將讀寫文件請(qǐng)求掛載到塊設(shè)備的讀寫請(qǐng)求隊(duì)列上,讀寫文件執(zhí)行子步驟執(zhí)行讀寫請(qǐng)求隊(duì)列中的讀寫請(qǐng)求;所述讀寫文件請(qǐng)求子步驟具體為(B. DDomain域的進(jìn)程發(fā)出讀寫操作請(qǐng)求,讀寫操作請(qǐng)求包含待讀寫文件的文件號(hào)、用戶空間數(shù)據(jù)緩沖區(qū)、待讀寫文件的邏輯偏移、讀寫數(shù)據(jù)長(zhǎng)度和讀寫類型;(B. 2)依據(jù)待讀寫文件的文件號(hào)索引進(jìn)程的文件描述符數(shù)組找到文件結(jié)構(gòu)對(duì)象02 ; (B. 3)獲取文件結(jié)構(gòu)對(duì)象02中的前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2 ; (B. 4)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存是否已經(jīng)在內(nèi)存中,若存在,進(jìn)入步驟 (B. 5),否則,分配頁(yè)緩存,進(jìn)入步驟(B. 5);(B. 5)查詢待讀寫文件的邏輯偏移對(duì)應(yīng)的頁(yè)緩存標(biāo)志位以判斷所述頁(yè)緩存是否是最新,若是,則進(jìn)入步驟(B. 6),否則,進(jìn)入步驟(B. 7);(B. 6)若為讀請(qǐng)求,則將所述頁(yè)緩存復(fù)制到用戶空間數(shù)據(jù)緩沖區(qū),讀寫操作結(jié)束,否則, 將用戶空間數(shù)據(jù)緩沖區(qū)復(fù)制到所述應(yīng)頁(yè)緩存中,讀寫操作結(jié)束;(B. 7)根據(jù)前端索引節(jié)點(diǎn)F2找到待讀寫文件在塊設(shè)備BD2的物理位置分布信息,并結(jié)合待讀寫文件的邏輯偏移得到待讀寫文件在塊設(shè)備上的物理位置,再根據(jù)該物理位置和讀寫數(shù)據(jù)長(zhǎng)度得到讀寫區(qū)間;(B. 8)對(duì)前端索引節(jié)點(diǎn)F2和塊設(shè)備BD2作哈希計(jì)算得到第一后端索引節(jié)點(diǎn)索引值,并分配讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2,所述讀寫請(qǐng)求對(duì)象R2包含待讀寫文件在塊設(shè)備上的物理位置、讀寫數(shù)據(jù)長(zhǎng)度、頁(yè)緩存位置和進(jìn)程號(hào),所述文件鎖對(duì)象L2包含讀寫區(qū)間和讀寫類型;(B. 9)Domain域向VMM發(fā)送包含第一后端索引節(jié)點(diǎn)索引值、讀寫請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2的超級(jí)調(diào)用請(qǐng)求;(B. 10) VMM依據(jù)第一后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B2 ;(B. 11)依據(jù)文件鎖對(duì)象L2中的讀寫類型和讀寫區(qū)間,判定該文件鎖對(duì)象L2是否與后端索引節(jié)點(diǎn)B2的文件鎖列表某一文件鎖對(duì)象LO有沖突,若有沖突,則進(jìn)入步驟(B. 12),否則,進(jìn)入(B. 13);(B. 12)將讀寫操作請(qǐng)求對(duì)象R2和文件鎖對(duì)象L2掛載在沖突的文件鎖對(duì)象LO的沖突鏈表上,結(jié)束;(B. 13)將讀寫操作請(qǐng)求R2掛載到塊設(shè)備BD2的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L2掛載到后端索引節(jié)點(diǎn)B2的文件鎖鏈表上,結(jié)束; 所述讀寫文件執(zhí)行子步驟具體為(C. 1)若塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列非空,則VMM執(zhí)行塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列中的當(dāng)前讀寫請(qǐng)求對(duì)象R3 ;(C. 2)執(zhí)行完畢時(shí)釋放R3對(duì)應(yīng)的文件鎖對(duì)象L3,更新頁(yè)緩存的標(biāo)志位,向讀寫請(qǐng)求對(duì)象R3的來源Domain域發(fā)出軟中斷以喚醒R3中的進(jìn)程號(hào)指定的讀寫進(jìn)程;(C. 3)若釋放的文件鎖對(duì)象L3的沖突鏈表非空,則激活當(dāng)前文件鎖對(duì)象L4,判定文件鎖對(duì)象L4是否與其對(duì)應(yīng)的后端索引節(jié)點(diǎn)B4的文件鎖隊(duì)列存在沖突,若有沖突,進(jìn)入步驟 (C. 4),否則,進(jìn)入步驟(C. 5);(C. 4)被激活的文件鎖對(duì)象L4及其對(duì)應(yīng)的讀寫請(qǐng)求對(duì)象R4掛載在沖突的文件鎖對(duì)象 Γ0的沖突鏈表上,返回步驟(C. 1);(C. 5)將讀寫請(qǐng)求對(duì)象R4掛載到塊設(shè)備BD3的讀寫請(qǐng)求隊(duì)列,將文件鎖對(duì)象L4掛載到后端索引節(jié)點(diǎn)B4的文件鎖鏈表上,返回步驟(C. 1); 所述關(guān)閉文件步驟具體為(D. 1)將待關(guān)閉文件對(duì)應(yīng)的前端索引節(jié)點(diǎn)F4的使用計(jì)數(shù)減一,若F4的使用計(jì)數(shù)為0, 則釋放F4 ;(D. 2)Domain域的進(jìn)程對(duì)待關(guān)閉文件的前端索引節(jié)點(diǎn)F3和塊設(shè)備BD4作哈希計(jì)算得到第二后端索引節(jié)點(diǎn)索引值;(D. 3)Domain域向VMM發(fā)出包含第二后端索引節(jié)點(diǎn)索引值的超級(jí)調(diào)用請(qǐng)求; (D. 4) VMM依據(jù)第二后端索引節(jié)點(diǎn)索引值在后端索引節(jié)點(diǎn)哈希鏈表中查找對(duì)應(yīng)的后端索引節(jié)點(diǎn)B5,對(duì)后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)減一,若后端索引節(jié)點(diǎn)B5的使用計(jì)數(shù)為0,則釋放后端索引節(jié)點(diǎn)B5。
全文摘要
本發(fā)明提供了一種基于嵌入式虛擬化平臺(tái)的域間數(shù)據(jù)共享方法,該方法將VFS系統(tǒng)中的索引節(jié)點(diǎn)數(shù)據(jù)對(duì)象一分為二,將與用戶層進(jìn)程聯(lián)系密切的前端索引節(jié)點(diǎn)放在Domain域中,將與底層塊設(shè)備驅(qū)動(dòng)程序聯(lián)系緊密的后端索引節(jié)點(diǎn)放入VMM中;將塊設(shè)備驅(qū)動(dòng)從Domain域轉(zhuǎn)移到VMM中,同時(shí)在VMM的后端索引節(jié)點(diǎn)上引入了文件鎖機(jī)制保證多個(gè)Domain域讀寫同一文件對(duì)象時(shí)的文件數(shù)據(jù)的一致性。本發(fā)明實(shí)現(xiàn)了Domain域間對(duì)塊設(shè)備上文件數(shù)據(jù)安全可靠的共享,并且提高了共享塊設(shè)備文件數(shù)據(jù)的傳輸性能。
文檔編號(hào)G06F17/30GK102521300SQ201110391529
公開日2012年6月27日 申請(qǐng)日期2011年11月30日 優(yōu)先權(quán)日2011年11月30日
發(fā)明者伍箴水, 李海峰, 邵志遠(yuǎn), 金海 申請(qǐng)人:華中科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
静海县| 宁武县| 昔阳县| 泽普县| 丹东市| 兰溪市| 黄大仙区| 巴里| 银川市| 玉树县| 台北县| 调兵山市| 广州市| 木兰县| 开江县| 曲周县| 陇西县| 白朗县| 鲁山县| 满洲里市| 城口县| 正镶白旗| 潞西市| 新河县| 茶陵县| 阜平县| 普兰店市| 沁水县| 德清县| 沐川县| 游戏| 台安县| 仙居县| 宣汉县| 莲花县| 来宾市| 巴马| 博野县| 始兴县| 措美县| 嘉义县|