專利名稱:一種基于分布仿真的反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機分布仿真技術(shù)領(lǐng)域,特別是涉及一種應(yīng)用于工業(yè)分布 仿真中的反射內(nèi)存網(wǎng)的動態(tài)內(nèi)存管理方法。
背景技術(shù):
隨著現(xiàn)代工業(yè)系統(tǒng)的復(fù)雜程度和現(xiàn)代化程度的不斷提高,使得其設(shè)計、 研制和維護日益依賴于先進的試驗、測試與試驗手段。帶有半實物設(shè)備的分
布式實時分布仿真中為了保證通信的實時性,采用VMIC反射內(nèi)存網(wǎng)進行數(shù) 據(jù)和消息的傳輸。VMIC-5565反射內(nèi)存卡提供了共享內(nèi)存和中斷等實時通 信方式,但是這種方式允許各個節(jié)點直接讀寫板載內(nèi)存,帶來了數(shù)據(jù)安全性 難以保證的問題。由于傳統(tǒng)的板上內(nèi)存采用了順序分配的方式,導(dǎo)致釋;^文的 內(nèi)存無法再次分配和內(nèi)存碎片的增加,造成了系統(tǒng)性能的降低和不穩(wěn)定因素 的增加。由于VMIC提供的函數(shù)多而雜,對于開發(fā)人員而言比較難于掌握, 特別是對于從事虛擬試驗和仿真領(lǐng)域的技術(shù)人員。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,,提供一種基于分布仿真的反 射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法,該方法通過對VMIC反射內(nèi)存的驅(qū)動函數(shù)進行 封裝,實現(xiàn)對內(nèi)存的及時分配與釋放,使得板卡內(nèi)存可以充分循環(huán)利用,并 增強了系統(tǒng)的穩(wěn)定性和安全性。
本發(fā)明的上述目的是通過如下技術(shù)方案予以實現(xiàn)的
一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法,其特征在于在實時 操作系統(tǒng)下對反射內(nèi)存網(wǎng)的驅(qū)動函數(shù)進行封裝,所述封裝基于復(fù)雜map映 射,執(zhí)行下述任務(wù)
仿真開始時,為聯(lián)邦分配內(nèi)存空間供聯(lián)邦進行通信交互;仿真進行中,
6聯(lián)邦的邦員依次加入仿真,為每個邦員分配內(nèi)存空間,并根據(jù)仿真想定為有
通信需求的邦員之間分配對象實例/交互實例內(nèi)存空間;通信過程中的讀、 寫操作完成后,為所述對象實例/交互實例釋放內(nèi)存空間;任一邦員退出仿 真后,為所述邦員釋放內(nèi)存空間;仿真結(jié)束聯(lián)邦退出后,為所述聯(lián)邦釋放內(nèi) 存空間。
的方法如下
(1 )查找已分配的內(nèi)存空間,是否已經(jīng)分配了該聯(lián)邦地址空間,如果 已經(jīng)分配則退出;
(2) 檢查剩余內(nèi)存空間是否充足,如果空間為零,則退出;
(3) 如果有剩余內(nèi)存空間,首先查找是否存在剛好所述聯(lián)邦大小的內(nèi) 存塊,如果存在則將其分配給所述聯(lián)邦,并將所述內(nèi)存塊標(biāo)志為busy,進 入步驟(5);
(4) 如果沒有剛好大小的內(nèi)存塊,則遍歷空閑的內(nèi)存空間,找到能夠 分配所述聯(lián)邦的最小內(nèi)存空間,并將所述最小內(nèi)存空間標(biāo)志為busy,進入 步驟(5 );
(5) 退出并返回起始地址。
在上述基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法中,為聯(lián)邦邦員分配 內(nèi)存的方法:^下
(1) 查找已分配的內(nèi)存空間,是否已經(jīng)分配了所述邦員所屬聯(lián)邦地址 空間,如果已經(jīng)分配則退出;
(2) 查找所述聯(lián)邦地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述邦員地址空間,如果已經(jīng)分配則退出;
(3) 檢查所述聯(lián)邦內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則退出;
(4) 如果有剩余內(nèi)存空間,首先查找是否存在剛好所述邦員大小的內(nèi) 存塊,如果存在則將其分配給所述邦員,并將所述內(nèi)存塊標(biāo)志為busy,進入步驟(6);
(5) 如果沒有剛好大小的內(nèi)存塊,則遍歷所述聯(lián)邦的空閑內(nèi)存空間, 找到能夠分配所述邦員的最小內(nèi)存空間,并將所述最小內(nèi)存空間標(biāo)志為 busy,進入步驟(6)。
(6) 退出并返回起始地址。
在上述基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法中,為聯(lián)邦邦員中的 對象實例/交互實例分配內(nèi)存的方法如下
(1) 查找已分配的內(nèi)存空間,是否已經(jīng)分配了所述對象實例/交互實例 所屬聯(lián)邦地址空間,如果已經(jīng)分配則退出;
(2) 查找所述聯(lián)邦地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述對象實例/交互實例所屬的邦員地址空間,如果已經(jīng)分配則退出;
(3) 查找所述邦員地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述對象實例/交互實例地址空間,如果已經(jīng)分配則退出;
(4) 檢查所述邦員內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則進入步 驟(7);
(5) 如果有剩余內(nèi)存空間,首先查找是否存在剛好對象實例/交互實例 大小的內(nèi)存塊,如果存在則將其分配給該所迷對象實例/交互實例,并將所 述內(nèi)存塊標(biāo)志為busy,進入步驟(7);
(6) 如果沒有剛好大小的內(nèi)存塊,則遍歷所述邦員的空閑內(nèi)存空間, 找到能夠分配該對象實例/交互實例的最小內(nèi)存空間,并將所述最小內(nèi)存空 間進行標(biāo)志為busy,進入步驟(7);
(7) 退出并返回起始地址。
在上述基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法中,為聯(lián)邦釋》丈內(nèi)存 的方法3o下
(1 )在已分配的內(nèi)存區(qū)域中查找所述聯(lián)邦的內(nèi)存是否存在,如果不存 在則退出;(2) 如果所述聯(lián)邦的內(nèi)存存在,將所述聯(lián)邦的內(nèi)存空間標(biāo)志為空閑區(qū) 域,并釋放聯(lián)邦內(nèi)存;
(3) 檢查步驟(2 )中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū) 域,如果存在則合并空閑區(qū)域。
內(nèi)存的方法如下
(1 )在已分配的內(nèi)存區(qū)域中查找所述邦員所屬聯(lián)邦的內(nèi)存是否存在, 如果不存在則退出;
(2 )在所述聯(lián)邦內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述邦員的內(nèi)存 是否存在,如果不存在則退出;
(3) 如果所述邦員的內(nèi)存存在,將所述邦員的內(nèi)存空間標(biāo)志為空閑區(qū) 域,并釋放邦員內(nèi)存;
(4) 檢查步驟(3 )中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū) 域,如果存在則合并空閑區(qū)域。
在上述基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法中,為聯(lián)邦邦員中的 對象實例/交互實例釋放內(nèi)存的方法如下
(1 )在已分配的內(nèi)存區(qū)域中查找所述對象實例/交互實例所屬聯(lián)邦的內(nèi) 存是否存在,如果不存在則退出;
(2 )在所述聯(lián)邦內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述對象實例/交 互實例所屬邦員的內(nèi)存是否存在,如果不存在則退出;
(3) 在所述邦員內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述對象實例/交 互實例的內(nèi)存是否存在,如果不存在則退出;
(4) 如果所述對象實例/交互實例的內(nèi)存存在,將所述對象實例/交互實 例的內(nèi)存空間標(biāo)志為空閑區(qū)域,并釋放對象實例/交互實例的內(nèi)存;
(5) 檢查步驟(4)中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū)域, 如果存在則合并空閑區(qū)域?;A(chǔ)上進行第二次封裝,第二次封裝是將有通信需求的邦員之間分配對象實
例/交互實例內(nèi)存空間,通信過程中的讀、寫操作,釋;^丈內(nèi)存空間四個過程
封裝為一個類,當(dāng)邦員之間需要進行對象類/交互類實例通信時,對該類進 行實例化,該類中分配對象實例/交互實例內(nèi)存空間,通信過程中的讀、寫 操作,釋放內(nèi)存空間四個過程均由該實例進行管理。
本發(fā)明與現(xiàn)有技術(shù)相比有益效果為
(1) 通過對VMIC反射內(nèi)存函數(shù)進行封裝,可以使內(nèi)存空間得到及時 分配與釋放,將使用后釋放的內(nèi)存空間進行碎片合并整理后再次分配使用,
從而達到對板卡內(nèi)存的動態(tài)充分循環(huán)利用,與現(xiàn)有的按順序分配內(nèi)存相比, 解決了內(nèi)存空間有限和內(nèi)存碎片再分配的問題。
(2) 通過對VMIC反射內(nèi)存函數(shù)進行封裝,與現(xiàn)有技術(shù)直接對板上內(nèi) 存進行操作相比,解決了分布仿真數(shù)據(jù)的安全性問題,并使系統(tǒng)的穩(wěn)定性提高。
(3) 通過對VMIC反射內(nèi)存函數(shù)進行面向?qū)ο蟮姆庋b,與現(xiàn)有VMIC
紛繁復(fù)雜的函數(shù)操作相比,具有很強的開發(fā)上的便利性和可重用性,能夠提
高開發(fā)效率,并使安全性進一步提高。
圖1為本發(fā)明的系統(tǒng)體系示意圖2為本發(fā)明為驅(qū)動函數(shù)進行第一層封裝的工作流程圖3為本發(fā)明第 一 層封裝中為聯(lián)邦分配內(nèi)存的工作流程圖4為本發(fā)明第一層封裝中為聯(lián)邦中的邦員分配內(nèi)存的工作流程圖5為本發(fā)明第 一層封裝中為聯(lián)邦邦員中的對象實例/交互實例分配內(nèi)
存的工作流程圖6為本發(fā)明第 一層封裝中為聯(lián)邦釋放內(nèi)存的工作流程圖7為本發(fā)明第 一層封裝中為聯(lián)邦中的邦員釋放內(nèi)存的工作流程10圖8為本發(fā)明第 一層封裝中為聯(lián)邦邦員中的對象實例/交互實例釋放內(nèi)
存的工作流程圖9為本發(fā)明第二層封裝中為對象實例/交互實例申請內(nèi)存空間的工作 流程圖10為本發(fā)明第二層封裝中為對象實例/交互實例釋放內(nèi)存空間的工作 流程圖11為本發(fā)明第二層封裝中填寫對象實例/交互實例的工作流程圖; 圖12為本發(fā)明第二層封裝中讀取對象實例/交互實例的工作流程圖。
具體實施例方式
下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步詳細的描述
VMIC反射內(nèi)存網(wǎng)可以采用環(huán)形網(wǎng)絡(luò)結(jié)構(gòu),使用 一 臺計算機承擔(dān)調(diào)度服 務(wù)與通信服務(wù)功能,稱為管理節(jié)點機,網(wǎng)絡(luò)上的其他計算機可以稱為運行節(jié) 點機。本發(fā)明在管理節(jié)點機上對反射內(nèi)存進行動態(tài)管理。如圖1所示,對 VMIC5565板卡提供的函數(shù)驅(qū)動進行了兩層封裝,應(yīng)用程序通過實例化第二 層封裝的類,動態(tài)管理板卡內(nèi)存。
首先在實時操作系統(tǒng)下對反射內(nèi)存網(wǎng)的驅(qū)動函數(shù)進行第 一層封裝,所述 封裝基于復(fù)雜map映射,執(zhí)行下述任務(wù)
仿真開始時,為聯(lián)邦分配內(nèi)存空間以備聯(lián)邦通信交互;仿真進行中,聯(lián)
邦的邦員依次加入仿真,為每個邦員分配內(nèi)存空間,并根據(jù)仿真想定為有通 信需求的邦員之間分配對象實例/交互實例內(nèi)存空間;通信完成后,為所述 對象實例/交互實例釋放內(nèi)存空間,以方便為其他對象實例/交互實例分配內(nèi) 存空間;任一邦員退出仿真后,為所述邦員釋放內(nèi)存空間;仿真結(jié)束聯(lián)邦退 出時,為所述聯(lián)邦釋放內(nèi)存空間,以方便為其他聯(lián)邦分配內(nèi)存空間。如圖2 所示為對驅(qū)動函數(shù)進行第 一層封裝的工作流程圖。其中對象實例/交互實例 表示對象實例或者交互實例或者對象實例和交互實例。
第一層封裝了 VMIC反射內(nèi)存網(wǎng)底層驅(qū)動函數(shù),實現(xiàn)了動態(tài)分配和釋放內(nèi)存的內(nèi)存管理功能。下面進行詳細描述 (1 )為聯(lián)邦分配內(nèi)存空間的工作過程
federationNum表示聯(lián)邦編號,federationSize表示該聯(lián)邦的大小(單位 M), federation—busyArea表示聯(lián)邦繁忙區(qū)域,federation—freeArea表示聯(lián)
邦空閑區(qū)域,其流程圖如圖3所示。首先查找已分配的內(nèi)存空間,是否已經(jīng) 分配了該聯(lián)邦地址空間,如果已經(jīng)分配則函數(shù)退出,返回非法地址;然后檢 查剩余內(nèi)存空間是否充足,如果空間為零則函數(shù)退出,返回非法地址;如果 有剩余內(nèi)存空間,首先查找是否存在剛好federationSize大小的內(nèi)存塊,如 果存在則將其分配給該聯(lián)邦,并將此區(qū)域標(biāo)志為"busy",做好該聯(lián)邦的內(nèi) 存初始化,退出并返回起始地址;如果沒有剛好大小的內(nèi)存塊,則遍歷空閑 的內(nèi)存空間,找到能夠分配該聯(lián)邦的最小內(nèi)存空間,并將此區(qū)域標(biāo)志為 "busy",做好該聯(lián)邦的內(nèi)存初始化,退出并返回起始地址。
(2) 為聯(lián)邦中的邦員分配內(nèi)存空間的工作過程 federationNum表示聯(lián)邦編號,federateNum表示邦員編號,
federateSize表示邦員大小(K), federation—busyArea表示聯(lián)邦繁忙區(qū)域, federation—freeArea表示聯(lián)邦空閑區(qū)域。其流程圖如圖4所示。首先查找已 分配的內(nèi)存空間,是否已經(jīng)分配了該邦員所屬聯(lián)邦地址空間,如果已經(jīng)分配 則函數(shù)退出,返回非法地址;接著查找該聯(lián)邦地址空間中已分配的內(nèi)存空間, 是否已經(jīng)分配了該邦員地址空間,如果已經(jīng)分配則函數(shù)退出,返回非法地址; 然后檢查聯(lián)邦內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則函數(shù)退出,返回非 法地址;如果有剩余內(nèi)存空間,首先查找是否存在剛好federateSize大小的 內(nèi)存塊,如果存在則將其分配給該邦員,并將此區(qū)域標(biāo)志為"busy",做好 該邦員的內(nèi)存初始化,退出并返回起始地址;如果沒有剛好大小的內(nèi)存塊, 則遍歷聯(lián)邦的空閑內(nèi)存空間,找到能夠分配該邦員的最小內(nèi)存空間,并將此 區(qū)域標(biāo)志為"busy",做好該邦員的內(nèi)存初始化,退出并返回起始地址。
(3) 為聯(lián)邦邦員中的對象實例/交互實例分配內(nèi)存的工作過程federationNum表示聯(lián)邦編號,federateNum表示邦員編號,eventNum
表示對象類實例或是交互類的編號,eventSize表示對象實例或是交互實例 的大小,federation—busyArea表示聯(lián)邦繁忙區(qū)i或,federation—什eeArea表
示聯(lián)邦空閑區(qū)域。其流程圖如圖5所示。首先查找已分配的內(nèi)存空間,是否 已經(jīng)分配了該交互/對象類所屬聯(lián)邦地址空間,如果已經(jīng)分配則函數(shù)退出, 返回非法地址;接著查找該聯(lián)邦地址空間中已分配的內(nèi)存空間,是否已經(jīng)分 配了該交互/對象類所屬的邦員地址空間,如果已經(jīng)分配則函數(shù)退出,返回 非法地址;然后查找該邦員地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了 該交互/對象類地址空間,如果已經(jīng)分配則函數(shù)退出,返回非法地址;然后 檢查邦員內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則函數(shù)退出,返回非法地 址;如果有剩余內(nèi)存空間,首先查找是否存在剛好eventSize大小的內(nèi)存塊, 如果存在則將其分配給該交互/對象類,并將此區(qū)域標(biāo)志為"busy",做好 該交互/對象類的內(nèi)存初始化,退出并返回起始地址;如果沒有剛好大小的 內(nèi)存塊,則遍歷邦員的空閑內(nèi)存空間,找到能夠分配該交互/對象類的最小 內(nèi)存空間,并將此區(qū)域標(biāo)志為"busy",做好該交互/對象類的內(nèi)存初始化, 退出并返回起始地址。
(4) 為聯(lián)邦釋放空間的工作過程
federationNum表示聯(lián)邦編號,federationSize表示聯(lián)邦大小, federation—busyArea表示耳關(guān)邦繁忙區(qū)i或,federation—freeArea表示耳關(guān)邦空 閑區(qū)域。其流程圖如圖6所示。首先在已分配的反射內(nèi)存區(qū)域中查找該聯(lián)邦 的內(nèi)存是否存在,如果不存在則返回錯誤代碼;然后將該聯(lián)邦的內(nèi)存空間標(biāo) 志位空閑區(qū)域;檢查新增空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū)域,如果存 在則合并空閑區(qū)域,返回真。
(5) 為聯(lián)邦中的邦員釋放空間的工作過程 federationNum表示聯(lián)邦編號,federateNum表示邦員編號,
federateSize表示邦員大小,federation—busyArea表示聯(lián)邦繁忙區(qū)域,federation—freeArea表示聯(lián)邦空閑區(qū)域。其流程圖如圖7所示。首先在已分 配的反射內(nèi)存區(qū)域中查找該邦員所屬聯(lián)邦的內(nèi)存是否存在,如果不存在則返 回錯誤代碼;接著在聯(lián)邦內(nèi)存區(qū)域內(nèi)的已分配反射內(nèi)存區(qū)域中查找該邦員的 內(nèi)存是否存在,如果不存在則返回錯誤代碼;然后將該邦員的內(nèi)存空間標(biāo)志 位空閑區(qū)域;檢查新增空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū)域,如果存在 則合并空閑區(qū)域,返回真。
(6)為聯(lián)邦邦員中的對象實例/交互實例釋放內(nèi)存的工作過程
federationNum表示聯(lián)邦編號,federateNum表示邦員編號,eventNum 表示對象實例或是交互實例的編號,eventSize表示對象實例或是交互實例 大小,federation—busyArea表示聯(lián)邦繁忙區(qū)域,federation—freeArea表示 聯(lián)邦空閑區(qū)域。其流程圖如圖8所示。首先在已分配的反射內(nèi)存區(qū)域中查找 該事件所屬聯(lián)邦的內(nèi)存是否存在,如果不存在則返回錯誤代碼;接著在聯(lián)邦 內(nèi)存區(qū)域內(nèi)的已分配反射內(nèi)存區(qū)域中查找該事件所屬邦員的內(nèi)存是否存在, 如果不存在則返回錯誤代碼;然后在邦員內(nèi)存區(qū)域內(nèi)的已分配反射內(nèi)存區(qū)域 中查找該事件內(nèi)存是否存在,如果不存在則返回錯誤代碼;最后將該事件的 內(nèi)存空間標(biāo)志位空閑區(qū)域;檢查新增空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū) 域,如果存在則合并空閑區(qū)域,返回真。
反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理中間件的第二層封裝是考慮到面向?qū)ο蟪绦?設(shè)計的需要,為了使本技術(shù)方案具有程序開發(fā)上的便利性和可重用性。第二 層封裝在第一層封裝的基礎(chǔ)上進行,第二次封裝是將有通信需求的邦員之間 的對象實例/交互實例分配內(nèi)存空間,通信過程中的讀、寫操作,為對象實 例/交互實例釋放內(nèi)存空間四個過程封裝為一個類,當(dāng)邦員之間需要進行對 象類/交互類實例通信時,對該類進行實例化,該類中為對象實例/交互實例 分配內(nèi)存空間,通信過程中的讀、寫操作,為對象實例/交互實例釋放內(nèi)存 空間這四個過程均由這個實例進行管理,由于采用上述面向?qū)ο蟮某绦?^殳計 方式使其具有內(nèi)存管理的安全性高和軟件開發(fā)的可重用性強的優(yōu)點。
14其中上述實例對通信進行管理的過程如下
一、 當(dāng)邦員之間需要進行對象類/交互類實例通信時,根據(jù)仿真想定查找 到該通信的信息量,調(diào)用第一層封裝為該對象類/交互類實例分配相應(yīng)大小
的內(nèi)存空間,將該空間的起止地址記錄下來,并發(fā)出"分配完成"消息;
二、 當(dāng)發(fā)送信息的邦員收到"分配完成"消息后,將該對象類/交互類實 例寫入步驟一中的內(nèi)存空間,并發(fā)出"寫完畢"消息;
三、 當(dāng)接收信息的邦員收到"寫完畢"消息后,將該對象類/交互類實例 接收下來,并發(fā)出"讀完畢"消息;
四、 收到"讀完畢,,消息后,根據(jù)該空間的起止地址,調(diào)用第一層封裝 將該對象類/交互類實例的內(nèi)存釋放。
其中步驟一 中為對象類/交互類實例分配內(nèi)存空間的具體流程如下 如圖9所示為分配內(nèi)存空間的流程圖,complexCode由索引碼(占16bit) 和申請內(nèi)存大小(占16bit〉組合而成。返回值如果為0x1111,表明申請操作 不成功,否則表示申請空間的起始地址。首先由運行節(jié)點想管理節(jié)點發(fā)出中 斷,附加數(shù)據(jù)為complexCode;管理節(jié)點收到運行節(jié)點的中斷后,解析附 加數(shù)據(jù),得到索引碼和申請空間大小S,根據(jù)索引碼判斷操作類型為分配空 間,同時獲得對象實例\交互實例編號enum,根據(jù)enum得到邦員編號fnmu, 和聯(lián)邦編號Fnum。之后執(zhí)行步驟(3)中為對象實例/交互實例分配內(nèi)存空 間的操作,得到返回值R。若R值不為0x1111,申請空間成功,附加數(shù)據(jù) 設(shè)為索引碼(高14bit)和R(低18bit)的組合,否則附加數(shù)據(jù)設(shè)為索引碼(高 14bit)和后18bit全為1的組合;管理節(jié)點完成上述操作后向運行節(jié)點發(fā)送 返回中斷;運行節(jié)點收到管理節(jié)點的中斷后,解析附加數(shù)據(jù),得到索引碼和 后18bit,如果后18bit全為1 ,則函數(shù)返回錯誤碼0x111,否則返回后18bit。 步驟二中進行寫操作的具體流程如下
如圖11所示為寫操作的工作流程圖,info指要填寫的對象實例/交互實 例,offset指填寫位置,size指對象實例/交互實例的大小。操作成功返回真,否則假。該函數(shù)直接封裝了 VMIC的驅(qū)動函數(shù),實現(xiàn)了對反射內(nèi)存的寫操作。 步驟3)中進行讀操作的具體流程如下
如圖12所示為讀#:作的工作流程圖,indexCode為索引碼(占16bit)。
如果函數(shù)操作成功返回真,否則返回假。首先由運行節(jié)點想管理節(jié)點發(fā)出中 斷,附加數(shù)據(jù)為complexCode;管理節(jié)點收到運行節(jié)點的中斷后,解析附 加數(shù)據(jù),得到索引碼和釋放空間大小S,根據(jù)索引碼判斷操作類型為釋放空 間,同時獲得對象實例/交互實例編號enum,根據(jù)enum得到邦員編號fnmu, 和聯(lián)邦編號fnum,同時根據(jù)enum判斷其是否為對象實例。如果為對象實 例,執(zhí)行步驟(4)中釋放聯(lián)邦空間的操作,否則執(zhí)行步驟(6)中釋放對象 實例/交互實例的空間的操作,執(zhí)行上述操作完成后,得到返回值R。 R為 true釋放空間成功,設(shè)附加數(shù)據(jù)為索引碼和1(用低16bit表示)的組合,否則 附加數(shù)據(jù)為索引碼和O(用低16bit表示)的組合;管理節(jié)點完成上述操作后向 運行節(jié)點發(fā)送返回中斷;運行節(jié)點收到管理節(jié)點的中斷后,解析附加數(shù)據(jù), 得到索引碼和低16bit。如果低16bit為0,函數(shù)返回false,否則返回true。 步驟4)中為對象類/交互類實例釋放內(nèi)存空間的具體流程如下 如圖10所示為為對象類/交互類實例分配內(nèi)存空間的工作流程圖, complexCode由索引碼(占16bit)和所要釋放內(nèi)存的大小組成(占16bit)。如 果釋放的是對象實例,那么該內(nèi)存大小為對象實例所屬聯(lián)邦的大小,否則為 該對象實例的大小。操作成功返回真,否則返回假。首先由運行節(jié)點想管理 節(jié)點發(fā)出中斷,附加數(shù)據(jù)為complexCode;管理節(jié)點收到運行節(jié)點的中斷 后,解析附加數(shù)據(jù),得到索引碼和釋放空間大小S,根據(jù)索引碼判斷操作類 型為釋放空間,同時獲得對象實例/交互實例編號enum,根據(jù)enum得到邦 員編號fnmu,和聯(lián)邦編號fnum,同時根據(jù)enum判斷其是否為對象實例。 如果為對象實例,執(zhí)行步驟(4)中釋放聯(lián)邦空間的操作,否則執(zhí)行步驟(6) 中釋放對象實例/交互實例的空間的操作,執(zhí)行上述操作完成后,得到返回 值R。 R為true釋放空間成功,設(shè)附加數(shù)據(jù)為索引碼和1(用低16bit表示)
16的組合,否則附加數(shù)據(jù)為索引碼和O(用低16bit表示)的組合;管理節(jié)點完成 上述操作后向運行節(jié)點發(fā)送返回中斷;運行節(jié)點收到管理節(jié)點的中斷后,解 析附加數(shù)據(jù),得到索引碼和低16bit。如果低16bit為0,函數(shù)返回false, 否則返回true。
以上所述,僅為本發(fā)明最佳的具體實施方式
,但本發(fā)明的保護范圍并不 局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可 輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。
本發(fā)明說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員的公知 技術(shù)。
權(quán)利要求
1、一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法,其特征在于在實時操作系統(tǒng)下對反射內(nèi)存網(wǎng)的驅(qū)動函數(shù)進行封裝,所述封裝執(zhí)行下述任務(wù)仿真開始時,為聯(lián)邦分配內(nèi)存空間供聯(lián)邦進行通信交互;仿真進行中,聯(lián)邦的邦員依次加入仿真,為每個邦員分配內(nèi)存空間,并根據(jù)仿真想定為有通信需求的邦員之間分配對象實例/交互實例內(nèi)存空間;通信過程中的讀操作、寫操作完成后,為所述對象實例/交互實例釋放內(nèi)存空間;任一邦員退出仿真后,為所述邦員釋放內(nèi)存空間;仿真結(jié)束聯(lián)邦退出后,為所述聯(lián)邦釋放內(nèi)存空間。
2、 根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦分配內(nèi)存的方法如下(1) 查找已分配的內(nèi)存空間,是否已經(jīng)分配了所述聯(lián)邦地址空間,如 果已經(jīng)分配則退出;(2) 檢查剩余內(nèi)存空間是否充足,如果空間為零,則退出;(3) 如果有剩余內(nèi)存空間,首先查找是否存在剛好所述聯(lián)邦大小的內(nèi) 存塊,如果存在則將其分配給所述聯(lián)邦,并將所述內(nèi)存塊標(biāo)志為busy,進 入步驟(5 );(4) 如果沒有剛好大小的內(nèi)存塊,則遍歷空閑的內(nèi)存空間,找到能夠 分配所述聯(lián)邦的最小內(nèi)存空間,并將所述最小內(nèi)存空間標(biāo)志為busy,進入 步驟(5);(5) 退出并返回起始地址。
3、 根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦邦員分配內(nèi)存的方法如下(1)查找已分配的內(nèi)存空間,是否已經(jīng)分配了所述邦員所屬聯(lián)邦地址 空間,如果已經(jīng)分配則退出;(2) 查找所述聯(lián)邦地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述邦員地址空間,如果已經(jīng)分配則退出;(3) 檢查所述聯(lián)邦內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則退出;(4) 如果有剩余內(nèi)存空間,首先查找是否存在剛好所述邦員大小的內(nèi) 存塊,如果存在則將其分配給所述邦員,并將所述內(nèi)存塊標(biāo)志為busy,進 入步驟(6 );(5) 如果沒有剛好大小的內(nèi)存塊,則遍歷所述聯(lián)邦的空閑內(nèi)存空間, 找到能夠分配所述邦員的最小內(nèi)存空間,并將所述最小內(nèi)存空間標(biāo)志為 busy,進入步驟(6)。(6) 退出并返回起始地址。
4、根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦邦員中的對象實例/交互實例分配內(nèi)存的方法如 下(1) 查找已分配的內(nèi)存空間,是否已經(jīng)分配了所述對象實例/交互實例 所屬聯(lián)邦地址空間,如果已經(jīng)分配則退出;(2) 查找所述聯(lián)邦地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述對象實例/交互實例所屬的邦員地址空間,如果已經(jīng)分配則退出;(3) 查找所述邦員地址空間中已分配的內(nèi)存空間,是否已經(jīng)分配了所 述對象實例/交互實例地址空間,如果已經(jīng)分配則退出;(4) 檢查所述邦員內(nèi)剩余內(nèi)存空間是否充足,如果空間為零則進入步 驟(7 );(5) 如果有剩余內(nèi)存空間,首先查找是否存在剛好對象實例/交互實例 大小的內(nèi)存塊,如果存在則將其分配給該所述對象實例/交互實例,并將所 述內(nèi)存塊標(biāo)志為busy,進入步驟(7);(6) 如果沒有剛好大小的內(nèi)存塊,則遍歷所述邦員的空閑內(nèi)存空間, 找到能夠分配所述對象實例/交互實例的最小內(nèi)存空間,并將所述最小內(nèi)存空間標(biāo)志為busy,進入步驟(7); (7)退出并返回起始地址。
5、 根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦釋放內(nèi)存的方法如下(1) 在已分配的內(nèi)存區(qū)域中查找所述聯(lián)邦的內(nèi)存是否存在,如果不存 在則退出;(2) 如果所述聯(lián)邦的內(nèi)存存在,將所述聯(lián)邦的內(nèi)存空間標(biāo)志為空閑區(qū) 域,并釋放聯(lián)邦內(nèi)存;(3) 檢查步驟(2 )中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū) 域,如果存在則合并空閑區(qū)域。
6、 根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦邦員釋放內(nèi)存的方法如下(1 )在已分配的內(nèi)存區(qū)域中查找所述邦員所屬聯(lián)邦的內(nèi)存是否存在, 如果不存在則退出;(2 )在所述聯(lián)邦內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述邦員的內(nèi)存 是否存在,如果不存在則退出;(3) 如果所述邦員的內(nèi)存存在,將所述邦員的內(nèi)存空間標(biāo)志為空閑區(qū) 域,并釋放邦員內(nèi)存;(4) 檢查步驟(3 )中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū) 域,如果存在則合并空閑區(qū)域。
7、 根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于為聯(lián)邦邦員中的對象實例/交互實例釋放內(nèi)存的方法如 下(1 )在已分配的內(nèi)存區(qū)域中查找所述對象實例/交互實例所屬聯(lián)邦的內(nèi) 存是否存在,如果不存在則退出;(2 )在所述聯(lián)邦內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述對象實例/交互實例所屬邦員的內(nèi)存是否存在,如果不存在則退出;(3)在所述邦員內(nèi)存區(qū)域內(nèi)的已分配內(nèi)存區(qū)域中查找所述對象實例/交 互實例的內(nèi)存是否存在,如果不存在則退出;(4 )如果所述對象實例/交互實例的內(nèi)存存在,將所述對象實例/交互實 例的內(nèi)存空間標(biāo)志為空閑區(qū)域,并釋》文對象實例/交互實例的內(nèi)存;(5 )檢查步驟(4 )中新增的空閑區(qū)域是否存在左側(cè)或右側(cè)的空閑區(qū)域, 如果存在則合并空閑區(qū)域。
8、根據(jù)權(quán)利要求1所述的一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理 方法,其特征在于在所述封裝的基礎(chǔ)上進行第二次封裝,所述第二次封裝 是將有通信需求的邦員之間分配對象實例/交互實例內(nèi)存空間,通信過程中 的讀操作,通信過程中的寫操作,釋放對象實例/交互實例內(nèi)存空間四個過 程封裝為一個類,當(dāng)所述邦員之間需要進行對象類/交互類實例通信時,對 所述類進行實例化,所述類中分配對象實例/交互實例內(nèi)存空間,通信過程 中的讀操作、通信過程中的寫操作,釋力丈對象實例/交互實例內(nèi)存空間四個 過程均由所述實例進行管理。
全文摘要
本發(fā)明涉及一種基于分布仿真反射內(nèi)存網(wǎng)動態(tài)內(nèi)存管理方法,該方法采用面向?qū)ο蟮氖侄?,對VMIC反射內(nèi)存的底層驅(qū)動函數(shù)進行了兩次封裝,實現(xiàn)了面向用戶的內(nèi)存動態(tài)分配和讀寫,解決了通信軟總線開發(fā)過程中的安全性、可重用性和便利性問題,該封裝執(zhí)行下述任務(wù)仿真開始時,為聯(lián)邦分配內(nèi)存空間供聯(lián)邦進行通信交互;仿真進行中,聯(lián)邦的邦員依次加入仿真,為每個邦員分配內(nèi)存空間,并根據(jù)仿真想定為有通信需求的邦員之間分配對象實例/交互實例內(nèi)存空間;通信過程中的讀、寫操作完成后,為所述對象實例/交互實例釋放內(nèi)存空間;任一邦員退出仿真后,為所述邦員釋放內(nèi)存空間;仿真結(jié)束聯(lián)邦退出后,為所述聯(lián)邦釋放內(nèi)存空間。
文檔編號G06F9/455GK101493784SQ20091007826
公開日2009年7月29日 申請日期2009年2月24日 優(yōu)先權(quán)日2009年2月24日
發(fā)明者坤 代, 冷傳航, 張灝龍, 爍 李, 雯 趙 申請人:中國運載火箭技術(shù)研究院