專利名稱:共享內(nèi)存管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,尤其屬于一種共享內(nèi)存管理方法及裝置。
背景技術(shù):
在軟件編程領(lǐng)域中,指針和動(dòng)態(tài)內(nèi)存是一個(gè)非常重要的概念,利用指針 和動(dòng)態(tài)內(nèi)存的特性,進(jìn)行相關(guān)軟件編程,提供了其他軟件編程方式難以實(shí)現(xiàn) 的特性和高效,給開(kāi)發(fā)人員提供了極大的編程靈活性。指針和動(dòng)態(tài)內(nèi)存帶來(lái) 靈活性的好處的同時(shí),也帶來(lái)了一些使用不當(dāng)造成的泄漏及其他問(wèn)題,而且此 類問(wèn)題有時(shí)很隱蔽,排查非常困難。
特別是在創(chuàng)建內(nèi)存空間和刪除內(nèi)存空間時(shí),通過(guò)創(chuàng)建命令(new)直接創(chuàng) 建、或者通過(guò)刪除命令(delete)直接刪除,缺乏必要的保護(hù)機(jī)制,從而使 得應(yīng)用程序不能有效地管理內(nèi)存空間,并經(jīng)常會(huì)出現(xiàn)內(nèi)存泄漏、過(guò)刪或過(guò)寫(xiě) 等問(wèn)題,導(dǎo)致系統(tǒng)錯(cuò)誤。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種共享內(nèi)存管理方法及裝置,克服了現(xiàn)有技術(shù)缺少 內(nèi)存保護(hù)機(jī)制的缺陷,從而實(shí)現(xiàn)了對(duì)共享內(nèi)存有效進(jìn)行管理。
本發(fā)明實(shí)施例提供了一種共享內(nèi)存管理方法,包括創(chuàng)建內(nèi)存雙向鏈表, 所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣 邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述 邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、 用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;讀取相應(yīng)的節(jié)點(diǎn)信息;根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理方法,包括啟動(dòng)主進(jìn)程;判 斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要生成子進(jìn)程;若是需要 生成子進(jìn)程,生成一空棧,所述子進(jìn)程對(duì)應(yīng)一個(gè)內(nèi)存雙向鏈表,所述內(nèi)存雙 向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信 息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo) 記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示 數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址; 將所述內(nèi)存雙向鏈表推入所述空棧,再次判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn) 程指令值是否為需要生成子進(jìn)程,并根據(jù)判斷結(jié)果循環(huán)。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理方法,包括子進(jìn)程執(zhí)行完畢, 與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表中包含有
與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信 息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記 區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù) 據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;檢查所述內(nèi)存 雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū);若存在未釋放的數(shù)據(jù)區(qū),執(zhí)行回收內(nèi)存 塊,若不存在未釋放的數(shù)據(jù)區(qū),將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理方法,包括主進(jìn)程執(zhí)行完畢; 所述主進(jìn)程對(duì)應(yīng)至少一個(gè)子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一 棧內(nèi),所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息 和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、 所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的 大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后 向內(nèi)存塊的地址;檢查一棧是否為空;若不為空,檢查所述棧內(nèi)的內(nèi)存雙向 鏈表是否存在未釋放的數(shù)據(jù)區(qū);若存在未釋放的數(shù)據(jù)區(qū),執(zhí)行回收內(nèi)存塊,
ii若不存在未釋放的數(shù)據(jù)區(qū),將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出;結(jié)束與所 述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程,繼續(xù)檢查下一棧是否為空。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理裝置,包括創(chuàng)建單元,用于 創(chuàng)建鏈表,所述鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊 緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所 述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大 小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向 內(nèi)存塊的地址;讀取單元,用于讀取相應(yīng)的節(jié)點(diǎn)信息;刪除單元,用于根據(jù) 所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理裝置,包括啟動(dòng)模塊,用于 啟動(dòng)主進(jìn)程;判斷模塊,用于判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是 否為需要生成子進(jìn)程;若是需要生成子進(jìn)程,生成一空棧,所述子進(jìn)程對(duì)應(yīng) 一個(gè)內(nèi)存雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信 息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信 息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含 有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi) 存塊的地址和后向內(nèi)存塊的地址;入棧模塊,用于將所述內(nèi)存雙向鏈表推入 所述空棧,再次判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要生成 子進(jìn)程;并根據(jù)判斷結(jié)果循環(huán)。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理裝置,包括檢查模塊,當(dāng)子 進(jìn)程執(zhí)行完畢時(shí),檢查所述內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū),與所述 子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表中包含有與每個(gè) 內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于 節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所 述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息 的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;內(nèi)存塊回收模塊,當(dāng)檢查模塊的檢查出存在未釋放的數(shù)據(jù)區(qū)時(shí),用于執(zhí)行回收內(nèi)存塊;出棧模塊, 當(dāng)檢查模塊的檢查出不存在未釋放的數(shù)據(jù)區(qū)時(shí),將所述內(nèi)存雙向鏈表從所述 棧內(nèi)推出。
本發(fā)明實(shí)施例還提供了一種共享內(nèi)存管理裝置,包括第一檢查模塊, 當(dāng)子進(jìn)程執(zhí)行完畢時(shí),用于檢查一棧是否為空,所述主進(jìn)程對(duì)應(yīng)至少一個(gè)子 進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表中 包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述
節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位 于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是 否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;第二檢 查模塊,當(dāng)?shù)谝粰z查模塊的檢查結(jié)果不為空時(shí),用于檢查所述棧內(nèi)的內(nèi)存雙 向鏈表是否存在未釋放的數(shù)據(jù)區(qū);第三檢查模塊,當(dāng)?shù)诙z查模塊檢查出存 在未釋放的數(shù)據(jù)區(qū)時(shí),用于執(zhí)行回收內(nèi)存塊,當(dāng)?shù)诙z查模塊檢查出不存在 未釋放的數(shù)據(jù)區(qū)時(shí),用于將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出;結(jié)束模塊, 用于結(jié)束與所述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程,繼續(xù)檢查下 一 棧是否為空。
上述方案中的一個(gè)技術(shù)方案,通過(guò)創(chuàng)建及刪除包含有與每個(gè)內(nèi)存塊對(duì)應(yīng) 的節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息的內(nèi)存雙向鏈表,實(shí)現(xiàn)了共享內(nèi)存管理,克 服了現(xiàn)有技術(shù)創(chuàng)建內(nèi)存鏈表后無(wú)法有效管理共享內(nèi)存管理缺陷,提供了 一種 有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間。
上述方案中的一個(gè)技術(shù)方案,通過(guò)將與子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表推入 棧內(nèi)方法,使得每一個(gè)生成的內(nèi)存雙向鏈表全部位于不同的棧內(nèi),以此實(shí)現(xiàn) 了共享內(nèi)存管理,從而有效克服了現(xiàn)有技術(shù)沒(méi)有共享內(nèi)存管理機(jī)制的缺陷,
使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)多個(gè)內(nèi) 存雙向鏈表無(wú)法與子進(jìn)程一^"對(duì)應(yīng)的問(wèn)題。
上述方案中的一個(gè)技術(shù)方案,在子進(jìn)程執(zhí)行完畢時(shí),通過(guò)檢查與所述子 進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表所在的棧,獲知所述棧里是否還殘留內(nèi)存雙向鏈表,
13并且對(duì)該內(nèi)存雙向鏈表進(jìn)行回收內(nèi)存塊處理步驟,使得與所述子進(jìn)程對(duì)應(yīng)的 內(nèi)存雙向鏈表完全被釋放,并刪除掉,從而實(shí)現(xiàn)了共享內(nèi)存管理,提供了一 種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而 杜絕了后續(xù)管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
上述方案中的一個(gè)技術(shù)方案,在主進(jìn)程執(zhí)行完畢時(shí),與所述主進(jìn)程對(duì)應(yīng) 的所有的子進(jìn)程進(jìn)行結(jié)束操作,即通過(guò)檢查與每一個(gè)子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向 鏈表是否還殘留有未釋放的數(shù)據(jù)區(qū)或者未刪除的內(nèi)存塊的步驟,檢查出所有 殘留的、不使用的數(shù)據(jù)區(qū)或內(nèi)存塊之后,對(duì)所述數(shù)據(jù)區(qū)或內(nèi)存塊進(jìn)行相應(yīng)的
從而實(shí)現(xiàn)了共享內(nèi)存管理,并提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng) 用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
圖1為本發(fā)明共享內(nèi)存管理方法第一實(shí)施例的流程圖; 圖2為本發(fā)明共享內(nèi)存管理方法第一實(shí)施例創(chuàng)建內(nèi)存塊的流程圖; 圖3為本發(fā)明共享內(nèi)存管理方法第一實(shí)施例刪除相應(yīng)內(nèi)存區(qū)域中的數(shù)據(jù) 的流程圖4為本發(fā)明共享內(nèi)存管理方法第二實(shí)施例的流程圖5為本發(fā)明共享內(nèi)存管理方法第二實(shí)施例的回收內(nèi)存塊流程的流程
圖6為本發(fā)明共享內(nèi)存管理方法第三實(shí)施例的流程圖7為本發(fā)明共享內(nèi)存管理方法第三實(shí)施例的過(guò)寫(xiě)保護(hù)流程的流程圖8為本發(fā)明共享內(nèi)存管理方法第四實(shí)施例的流程圖9為本發(fā)明共享內(nèi)存管理方法第五實(shí)施例的流程圖IO為本發(fā)明共享內(nèi)存管理方法第六實(shí)施例的流程圖11為本發(fā)明共享內(nèi)存管理方法第七實(shí)施例的流程圖;圖12為本發(fā)明共享內(nèi)存管理裝置第一實(shí)施例的結(jié)構(gòu)示意圖13為本發(fā)明實(shí)施例中內(nèi)存塊結(jié)構(gòu)示意圖14為本發(fā)明實(shí)施例中內(nèi)存雙向鏈表結(jié)構(gòu)示意圖15為本發(fā)明共享內(nèi)存管理裝置第一實(shí)施例中回收內(nèi)存塊流程單元的結(jié)構(gòu)示意圖16為本發(fā)明共享內(nèi)存管理裝置第二實(shí)施例的結(jié)構(gòu)示意圖;圖17為本發(fā)明共享內(nèi)存管理裝置第三實(shí)施例的結(jié)構(gòu)示意圖;圖18為本發(fā)明共享內(nèi)存管理裝置第四實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。本發(fā)明共享內(nèi)存管理方法第一實(shí)施例
如圖1所示,為本發(fā)明共享內(nèi)存管理方法第一實(shí)施例的流程圖,共享內(nèi)存管理方法具體如下
步驟IOI、創(chuàng)建鏈表,所述鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;
步驟102、讀取相應(yīng)的節(jié)點(diǎn)信息;
步驟103、根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。
本發(fā)明共享內(nèi)存管理方法第一實(shí)施例,通過(guò)創(chuàng)建及刪除包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息的內(nèi)存雙向鏈表,實(shí)現(xiàn)了共享內(nèi)存管理,克服了現(xiàn)有技術(shù)創(chuàng)建內(nèi)存鏈表后無(wú)法有效管理共享內(nèi)存管理缺陷,提供了 一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間。
在本發(fā)明共享內(nèi)存管理方法第一實(shí)施例中,在步驟101之后還可以包括創(chuàng)建內(nèi)存塊流程,如圖2所示,為本發(fā)明共享內(nèi)存管理方法第一實(shí)施例創(chuàng)建內(nèi)存塊的流程圖,創(chuàng)建內(nèi)存塊流程具體包括如下步驟201、根據(jù)創(chuàng)建指令,申請(qǐng)創(chuàng)建內(nèi)存塊;
步驟202、根據(jù)所述創(chuàng)建指令,設(shè)置節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息;
步驟203、判斷在所述內(nèi)存雙向鏈表中與當(dāng)前內(nèi)存塊對(duì)應(yīng)的前向內(nèi)存塊地址和后向內(nèi)存塊地址和當(dāng)前內(nèi)存塊地址,三個(gè)地址是否相同,若是相同執(zhí)行步驟204,若不是相同執(zhí)行步驟205;
步驟204、根據(jù)已設(shè)置的節(jié)點(diǎn)信息,將所述內(nèi)存塊設(shè)置為首內(nèi)存塊,即在所述內(nèi)存塊的節(jié)點(diǎn)信息中,將前向內(nèi)存塊的地址設(shè)置為"nil"、將后向內(nèi)存塊的地址設(shè)置為"nil",執(zhí)行步驟206;
步驟205、根據(jù)已設(shè)置的節(jié)點(diǎn)信息,將所述內(nèi)存設(shè)置為當(dāng)前內(nèi)存塊,并聯(lián)入所述內(nèi)存雙向鏈表,即在所述內(nèi)存塊的節(jié)點(diǎn)信息中,將前向內(nèi)存塊的地址設(shè)置為前向內(nèi)存塊的物理地址,同時(shí)將所述前向內(nèi)存塊的后向內(nèi)存塊地址設(shè)置為當(dāng)前內(nèi)存塊的物理地址,將后向內(nèi)存塊的地址設(shè)置為后向內(nèi)存塊的物理地址,同時(shí)將所述后向內(nèi)存塊的前向內(nèi)存塊地址設(shè)置為當(dāng)前內(nèi)存塊的物理地址,執(zhí)行步驟206;
步驟206、結(jié)束申請(qǐng)。
進(jìn)一步的,步驟202可以具體為根據(jù)所述創(chuàng)建指令,在節(jié)點(diǎn)區(qū)中,設(shè)置所述創(chuàng)建指令所在的文件名、所述創(chuàng)建指令所在的行號(hào)、狀態(tài)標(biāo)記、數(shù)據(jù)區(qū)大小、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址。這樣就可以得知?jiǎng)?chuàng)建指令出現(xiàn)錯(cuò)誤導(dǎo)致內(nèi)存塊出現(xiàn)異常時(shí),可以通過(guò)與出現(xiàn)異常的內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息找到所述創(chuàng)建指令的具體位置,從而通過(guò)創(chuàng)建內(nèi)存塊的時(shí)候,就將創(chuàng)建指令和內(nèi)存塊對(duì)應(yīng)起來(lái),使得在后續(xù)操作中可以方便地管理共享內(nèi)存。
另外,步驟202中所述的邊緣邊界標(biāo)記信息用于表示寫(xiě)入的數(shù)據(jù)信息是否超出數(shù)據(jù)區(qū)的大小。這樣可以通過(guò)所述邊緣邊界標(biāo)記信息可以得知,對(duì)該內(nèi)存塊進(jìn)行過(guò)的寫(xiě)入數(shù)據(jù)信息操作或者釋放內(nèi)存塊的操作是否出現(xiàn)異常,從而可以有效監(jiān)控內(nèi)存雙向鏈表出現(xiàn)異常,實(shí)現(xiàn)了共享內(nèi)存管理。
在本發(fā)明共享內(nèi)存管理方法第一實(shí)施例中,如圖3所示,為本發(fā)明共享內(nèi)存管理方法第 一 實(shí)施例刪除相應(yīng)內(nèi)存區(qū)域中的數(shù)據(jù)的流程圖,刪除相應(yīng)內(nèi)
存區(qū)域中的數(shù)據(jù)具體包括如下
步驟301、根據(jù)釋放指令,申請(qǐng)釋放內(nèi)存塊;
步驟302、根據(jù)釋放指令,讀取與所述內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息;
步驟303、判斷所述節(jié)點(diǎn)信息中的狀態(tài)標(biāo)記是否為已刪除,若是已刪除執(zhí)
行步驟305,若不是已刪除執(zhí)行步驟304;
步驟304、修改所述狀態(tài)標(biāo)記為已刪除,釋放相應(yīng)數(shù)據(jù)區(qū),刪除雙向鏈表
中所述內(nèi)存塊,執(zhí)行步驟305;步驟305、結(jié)束申請(qǐng)。本發(fā)明共享內(nèi)存管理方法第二實(shí)施例
如圖4所示,為本發(fā)明共享內(nèi)存管理方法第二實(shí)施例的流程圖,共享內(nèi)存管理方法具體如下
步驟401、創(chuàng)建鏈表,所述鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;
步驟402、讀取相應(yīng)的節(jié)點(diǎn)信息;
步驟403、根據(jù)所述節(jié)點(diǎn)信息,釋放相應(yīng)的數(shù)據(jù)區(qū),刪除相應(yīng)內(nèi)存塊;步驟404、回收內(nèi)存塊流程。
本發(fā)明共享內(nèi)存管理方法第二實(shí)施例,通過(guò)在刪除內(nèi)存之后增加回收內(nèi)存塊流程的方法,有效防止了刪除內(nèi)存塊操作出現(xiàn)異常,導(dǎo)致未被完全刪除掉的內(nèi)存塊殘留在內(nèi)存雙向鏈表里,導(dǎo)致內(nèi)存浪費(fèi)的缺陷,從而實(shí)現(xiàn)了共享內(nèi)存管理,,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間。
在本發(fā)明共享內(nèi)存管理方法第二實(shí)施例中,回收內(nèi)存塊流程,如圖5所示,為本發(fā)明共享內(nèi)存管理方法第二實(shí)施例的回收內(nèi)存塊流程的流程圖,具
體包^舌如下
步驟501、根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊;
步驟502、根據(jù)回收指令,指針移至所述內(nèi)存塊的位置;
步驟503、判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪除,若是已刪除執(zhí)行步驟504,若不是已刪除執(zhí)行步驟505;
步驟504、判斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息執(zhí)行步驟508,若沒(méi)有數(shù)據(jù)信息執(zhí)行步驟506;
505若不是已刪除,判斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息執(zhí)行步驟507,若沒(méi)有數(shù)據(jù)信息執(zhí)行步驟508;
步驟506、設(shè)置告警級(jí)別,并輸出所述告警級(jí)別,執(zhí)行步驟508;
步驟507、釋放與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,執(zhí)行步驟508;
步驟50S、結(jié)束申請(qǐng)。
這樣的話,通過(guò)將指針移至相應(yīng)內(nèi)存位置,并檢查該內(nèi)存的狀態(tài)是否與記錄一致的方法,克服了現(xiàn)有技術(shù)創(chuàng)建內(nèi)存鏈表后無(wú)法有效監(jiān)控?cái)?shù)據(jù)區(qū)的狀態(tài)和節(jié)點(diǎn)區(qū)的狀態(tài)標(biāo)記是否一致的缺陷,從而實(shí)現(xiàn)了共享內(nèi)存管理,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)內(nèi)存泄露或過(guò)刪等問(wèn)題。
其中,步驟507之后還可以包括設(shè)置告警信息,并輸出所述告警信息。
本發(fā)明共享內(nèi)存管理方法第三實(shí)施例
如圖6所示,為本發(fā)明共享內(nèi)存管理方法第三實(shí)施例的流程圖,共享內(nèi)存管理方法具體如下
步驟601、創(chuàng)建鏈表,所述鏈表中包含有與每個(gè)內(nèi)存節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息;
步驟602、讀取相應(yīng)的節(jié)點(diǎn)信息;
步驟603、根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存區(qū)域中的數(shù)據(jù);步驟604、過(guò)寫(xiě)保護(hù)流程。
在本發(fā)明共享內(nèi)存管理方法第三實(shí)施例中,過(guò)寫(xiě)保護(hù)流程,如圖7所示,為本發(fā)明共享內(nèi)存管理方法第三實(shí)施例的過(guò)寫(xiě)保護(hù)流程的流程圖,具體包括如下
步驟701、根據(jù)過(guò)寫(xiě)保護(hù)指令,申請(qǐng)對(duì)內(nèi)存塊的過(guò)寫(xiě)保護(hù)。步驟702、根據(jù)過(guò)寫(xiě)保護(hù)指令,指針移至所述內(nèi)存塊的位置。步驟703、判斷與所述內(nèi)存塊對(duì)應(yīng)的的邊緣邊界標(biāo)記信息是否為正常,若是正常執(zhí)行步驟705,若不是正常步驟704。在實(shí)現(xiàn)過(guò)程中,若把邊緣邊界標(biāo)記信息為"0"的時(shí)候假設(shè)為正常的話,則邊緣邊界標(biāo)記信息為'T,的時(shí)候?yàn)榉钦?,即邊緣邊界?biāo)記信息為"0"的時(shí)候可執(zhí)行步驟705、則邊緣邊界標(biāo)記信息為'T,的時(shí)候可執(zhí)行步驟704。
步驟704、設(shè)置告警信息,輸出對(duì)所述內(nèi)存塊進(jìn)行內(nèi)存釋放搡作的釋放指令所在的文件名、行號(hào)和所述告警信息,并釋放與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)、在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,執(zhí)行步驟705。步驟705、完成操作。
本發(fā)明共享內(nèi)存管理方法第三實(shí)施例,通過(guò)對(duì)寫(xiě)入指令進(jìn)行監(jiān)測(cè)的方法,克服了現(xiàn)有技術(shù)創(chuàng)建內(nèi)存鏈表后無(wú)法有效管理共享內(nèi)存管理缺陷,提供了 一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)過(guò)寫(xiě)問(wèn)題。
本發(fā)明共享內(nèi)存管理方法第四實(shí)施例
如圖8所示,為本發(fā)明共享內(nèi)存管理方法第四實(shí)施例的流程圖,共享內(nèi)存管理方法具體如下
步驟801、啟動(dòng)主進(jìn)程。步驟802、判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要生成子進(jìn)程;若是需要生成子進(jìn)程執(zhí)行步驟803。在實(shí)現(xiàn)過(guò)程中,若把創(chuàng)建子進(jìn)程指令值為"0"的時(shí)候設(shè)置為需要生成子進(jìn)程、把創(chuàng)建子進(jìn)程指令值為'T'的時(shí)候設(shè)置為不需要生成子進(jìn)程,即創(chuàng)建子進(jìn)程指令值為"0"的時(shí)候執(zhí)行步驟803。
步驟803、生成一空棧,所述子進(jìn)程對(duì)應(yīng)一個(gè)內(nèi)存雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址,執(zhí)行步驟804。
步驟804、將所述內(nèi)存雙向鏈表推入所述空棧,執(zhí)行步驟802。
本發(fā)明實(shí)施例,通過(guò)將與子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表推入棧內(nèi)方法,使得每一個(gè)生成的內(nèi)存雙向鏈表全部位于不同的棧內(nèi),以此實(shí)現(xiàn)了共享內(nèi)存管理,從而有效克服了現(xiàn)有技術(shù)沒(méi)有共享內(nèi)存管理機(jī)制的缺陷,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)多個(gè)內(nèi)存雙向鏈表無(wú)法與子進(jìn)程——對(duì)應(yīng)的問(wèn)題。
本發(fā)明共享內(nèi)存管理方法第五實(shí)施例
如圖9所示,為本發(fā)明共享內(nèi)存管理方法第五實(shí)施例的流程圖,共享內(nèi)存管理方法具體包括如下
步驟901、子進(jìn)程執(zhí)行完畢,執(zhí)行步驟902,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙
息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述^:據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;
20步驟902、檢查所述內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū),其中具體檢查方法可以為根據(jù)所述內(nèi)存雙向鏈表檢查與每個(gè)內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)是否有數(shù)據(jù),若有數(shù)據(jù)則認(rèn)為存在未釋放的數(shù)據(jù)區(qū);根據(jù)檢查結(jié)果,若存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟903,若不存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟904;
步驟903、若存在未釋;^丈的數(shù)據(jù)區(qū),執(zhí)行回收內(nèi)存塊,執(zhí)行步驟904;
步驟904、若不存在未釋放的數(shù)據(jù)區(qū),將所述內(nèi)存雙向鏈表從所述棧內(nèi)推
出;
步驟905、結(jié)束所述子進(jìn)程。
本發(fā)明實(shí)施例,在子進(jìn)程執(zhí)行完畢時(shí),通過(guò)檢查與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表所在的棧,獲知所述棧里是否還殘留內(nèi)存雙向鏈表,并且對(duì)該內(nèi)存雙向鏈表進(jìn)行回收內(nèi)存塊處理步驟,使得與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表完全被釋放,并刪除掉,從而實(shí)現(xiàn)了共享內(nèi)存管理,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
進(jìn)一步地,在本發(fā)明實(shí)施例中所述的回收內(nèi)存塊的處理步驟如圖5所示的處理步驟,即本發(fā)明共享內(nèi)存管理方法第二實(shí)施例中所述的回收內(nèi)存流程,因此在這里不再贅述。
本發(fā)明共享內(nèi)存管理方法第六實(shí)施例
如圖10所示,為本發(fā)明共享內(nèi)存管理方法第六實(shí)施例的流程圖,共享內(nèi)存管理方法具體包括如下
步驟IOOI、主進(jìn)程執(zhí)行完畢,執(zhí)行步驟1002;所述主進(jìn)程對(duì)應(yīng)至少一個(gè)子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;步驟1002、檢查一棧是否為空,其中具體檢查方法可以具體為讀取所 述一棧中某一個(gè)內(nèi)存塊的節(jié)點(diǎn)信息,若所述內(nèi)存塊的前向內(nèi)存塊地址和后向 內(nèi)存塊地址和所述內(nèi)存塊地址相同,則認(rèn)為所述一棧為空,否則認(rèn)為所述一 棧不為空;根據(jù)檢查結(jié)果,若不為空?qǐng)?zhí)行步驟1003;
步驟1003、若不為空,檢查所述棧內(nèi)的內(nèi)存雙向鏈表是否存在未釋放的 數(shù)據(jù)區(qū),其中具體檢查方法可以為根據(jù)所述內(nèi)存雙向鏈表檢查與每個(gè)內(nèi)存 塊對(duì)應(yīng)的數(shù)據(jù)區(qū)是否有數(shù)據(jù),若有數(shù)據(jù)則認(rèn)為存在未釋放的數(shù)據(jù)區(qū);根據(jù)檢 查結(jié)果,若存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟1004,若不存在未釋放的數(shù)據(jù)區(qū)執(zhí) 行步驟1005;
步驟1004、執(zhí)行回收內(nèi)存塊,執(zhí)行步驟1002;
步驟1005、將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出,并結(jié)束與所述棧內(nèi)雙 向鏈表對(duì)應(yīng)的子進(jìn)程,執(zhí)行步驟1002。
本發(fā)明實(shí)施例,在主進(jìn)程執(zhí)行完畢時(shí),與所述主進(jìn)程對(duì)應(yīng)的所有的子進(jìn) 程進(jìn)行結(jié)束操作,即通過(guò)檢查與每一個(gè)子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表是否還殘 留有未釋放的數(shù)據(jù)區(qū)或者未刪除的內(nèi)存塊的步驟,檢查出所有殘留的、不使
用的數(shù)據(jù)區(qū)或內(nèi)存塊之后,對(duì)所述數(shù)據(jù)區(qū)或內(nèi)存塊進(jìn)行相應(yīng)的釋放或刪除操
共享內(nèi)存管理,并提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效 地管理共享內(nèi)存空間,進(jìn)而杜絕了管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
進(jìn)一步地,在本發(fā)明實(shí)施例中所述的回收內(nèi)存塊的處理步驟如圖5所示 的處理步驟,即本發(fā)明共享內(nèi)存管理方法第二實(shí)施例中所述的回收內(nèi)存流程, 因此在這里不再贅述。
本發(fā)明共享內(nèi)存管理方法第七實(shí)施例
如圖11所示,為本發(fā)明共享內(nèi)存管理方法第七實(shí)施例的流程圖,共享內(nèi) 存管理方法具體包括如下
步驟IIOI、主進(jìn)程執(zhí)行完畢,執(zhí)行步驟1102,所述主進(jìn)程對(duì)應(yīng)至少一個(gè)
22子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表 中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所 述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息 位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū) 是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址。
步驟1102、檢查所述棧是否為空,若不為空?qǐng)?zhí)行步驟1103。
步驟1103、判斷所述棧是否為最后一棧,若是最后一棧執(zhí)行步驟1107, 若不是最后一棧執(zhí)行步驟1104。在實(shí)現(xiàn)的時(shí)候,首先根據(jù)主進(jìn)程生成一空棧, 然后根據(jù)生成的每一個(gè)子進(jìn)程,將與每一個(gè)子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表的首 內(nèi)存塊物理地址作為數(shù)據(jù)信息存放在由所述主進(jìn)程管理的內(nèi)存雙向鏈表的相 應(yīng)內(nèi)存塊的數(shù)據(jù)區(qū)中。這樣的話,在主進(jìn)程管理的內(nèi)存雙向鏈表中,通過(guò)讀 取與需要判斷的子進(jìn)程對(duì)應(yīng)的內(nèi)存塊的節(jié)點(diǎn)信息,并判斷主進(jìn)程管理的內(nèi)存 雙向鏈表中所述內(nèi)存塊的后向內(nèi)存塊地址為"nil",則認(rèn)為所述一棧為最后 一棧,否則不是最后一棧。
步驟1104、檢查所述棧內(nèi)的內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū),若 存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟1105,若不存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟1106。
步驟1105、執(zhí)行回收內(nèi)存塊,執(zhí)行步驟1102。
步驟1106、將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出,結(jié)束與所述棧內(nèi)雙向 鏈表對(duì)應(yīng)的子進(jìn)程,執(zhí)行步驟1102。
步驟1107、檢查所述棧內(nèi)的內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū),若 存在未釋放的數(shù)據(jù)區(qū)執(zhí)行1108,若不存在未釋放的數(shù)據(jù)區(qū)執(zhí)行步驟1109。
步驟1108、執(zhí)行回收內(nèi)存塊,執(zhí)行步驟1109。
步驟1109、將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出,結(jié)束與所述棧內(nèi)雙向 鏈表對(duì)應(yīng)的子進(jìn)程,執(zhí)行步驟1110。 步驟lllO、結(jié)束所述主進(jìn)程。
本發(fā)明實(shí)施例,當(dāng)主進(jìn)程完畢之時(shí),檢查棧是否為空,同時(shí)還檢查被檢
23查的棧是否為最后一棧的方法,防止了本發(fā)明實(shí)施例管理共享內(nèi)存的時(shí)候, 進(jìn)入死循環(huán),浪費(fèi)系統(tǒng)的資源的缺陷,從而實(shí)現(xiàn)了共享內(nèi)存管理,并提供了 一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn) 而杜絕了管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。 本發(fā)明共享內(nèi)存管理裝置第一實(shí)施例
如圖12所示,為本發(fā)明共享內(nèi)存管理裝置第一實(shí)施例的結(jié)構(gòu)示意圖,共 享內(nèi)存管理裝置具體包括如下
創(chuàng)建單元1201,用于創(chuàng)建鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存 塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn) 區(qū)、所述邀:據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié) 點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀 態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;
讀取單元1202,用于讀取相應(yīng)的節(jié)點(diǎn)信息;
刪除單元1203,用于根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存區(qū)域中的數(shù)據(jù)。 在本實(shí)施例中,創(chuàng)建單元之后還包括創(chuàng)建內(nèi)存塊單元,所述創(chuàng)建內(nèi)存塊 單元具體包括申請(qǐng)創(chuàng)建模塊,用于根據(jù)創(chuàng)建指令,申請(qǐng)創(chuàng)建內(nèi)存塊;設(shè)置 模塊,用于根據(jù)所述創(chuàng)建指令,設(shè)置節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息;判斷模 塊,用于判斷在所述內(nèi)存雙向《連表中與當(dāng)前內(nèi)存塊對(duì)應(yīng)的前向內(nèi)存塊地址和 后向內(nèi)存塊地址和當(dāng)前內(nèi)存塊地址是否相同,若是相同,根據(jù)已設(shè)置的節(jié)點(diǎn) 信息,將所述內(nèi)存塊設(shè)置為首內(nèi)存塊,結(jié)束申請(qǐng);若不是相同,根據(jù)已設(shè)置 的節(jié)點(diǎn)信息,將所述內(nèi)存設(shè)置為當(dāng)前內(nèi)存塊,并聯(lián)入所述內(nèi)存雙向鏈表,結(jié) 束申請(qǐng)。
進(jìn)一步的,在本實(shí)施例中,刪除單元具體包括申請(qǐng)釋放模塊,用于根 據(jù)釋放指令,申請(qǐng)釋放內(nèi)存塊;讀取模塊,用于根據(jù)釋放指令,讀取與所述 內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息;判斷模塊,用于判斷所述節(jié)點(diǎn)信息中的狀態(tài)標(biāo)記是 否為已刪除,若是,結(jié)束申請(qǐng);否則,修改所述狀態(tài)標(biāo)記為已刪除,釋放相應(yīng)數(shù)據(jù)區(qū),刪除雙向鏈表中所述內(nèi)存塊。
這樣通過(guò)創(chuàng)建單元?jiǎng)?chuàng)建一個(gè)具有節(jié)點(diǎn)區(qū)、數(shù)據(jù)區(qū)和標(biāo)記區(qū)的內(nèi)存塊,使 得通過(guò)位于節(jié)點(diǎn)區(qū)的信息管理所述數(shù)據(jù)區(qū)的大小、前向內(nèi)存塊的地址和后向 內(nèi)存塊的地址及其它相關(guān)內(nèi)容,通過(guò)位于標(biāo)記區(qū)的邊緣邊界標(biāo)記信息判斷內(nèi) 存塊是否存在過(guò)寫(xiě)操作,使得生成的所有內(nèi)存塊相互之間形成連接,并形成 內(nèi)存雙向鏈表,實(shí)現(xiàn)了共享內(nèi)存管理,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制, 使得應(yīng)用程序有效地管理共享內(nèi)存空間。
如圖13所示,為本發(fā)明實(shí)施例中內(nèi)存塊結(jié)構(gòu)示意圖,內(nèi)存塊包括節(jié)點(diǎn) 區(qū)、數(shù)據(jù)區(qū)和標(biāo)記區(qū)。其中,節(jié)點(diǎn)區(qū)(Node),用來(lái)存放節(jié)點(diǎn)信息,如數(shù)據(jù) 區(qū)大小、創(chuàng)建內(nèi)存塊的指令所在的文件名、創(chuàng)建內(nèi)存塊的指令所在行號(hào)、數(shù) 據(jù)區(qū)是否為已刪除、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;數(shù)據(jù)區(qū)(Data ), 用來(lái)存》丈申請(qǐng)內(nèi)存(new)對(duì)象;標(biāo)記區(qū)(SideFlag),用來(lái)存》文一些邊緣邊界 標(biāo)記信息,這些信息用來(lái)檢查,在后續(xù)過(guò)程中,對(duì)數(shù)據(jù)區(qū)操作時(shí),是否有越 界過(guò)寫(xiě)的動(dòng)作發(fā)生。
如圖14所示,為本發(fā)明實(shí)施例中內(nèi)存雙向鏈表結(jié)構(gòu)示意圖,內(nèi)存雙向鏈 表包括首內(nèi)存塊、中間內(nèi)存塊和尾內(nèi)存塊。其中首內(nèi)存塊包括了第二內(nèi)存塊 的地址信息,中間內(nèi)存塊包括了相鄰兩個(gè)內(nèi)存塊的地址信息,尾內(nèi)存塊包括 了倒數(shù)第二個(gè)內(nèi)存塊的地址信息。
進(jìn)一步的,在本發(fā)明實(shí)施例中,可以在刪除單元之后增加一個(gè)回收內(nèi)存 塊流程單元,如圖15所示,為本發(fā)明共享內(nèi)存管理裝置第一實(shí)施例中回收內(nèi) 存塊流程單元的結(jié)構(gòu)示意圖,所述的回收內(nèi)存塊流程單元具體包括 申請(qǐng)回收模塊1501,用于根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊; 移動(dòng)模塊1502,用于根據(jù)回收指令,指針移至所述內(nèi)存塊的位置; 第一判斷模塊1503,用于判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪
除;
第二判斷模塊1504,當(dāng)?shù)谝慌袛嗄K1503判斷結(jié)果是已刪除時(shí),用于判
25斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息則結(jié)束申請(qǐng), 若沒(méi)有數(shù)據(jù)信息,設(shè)置告警級(jí)別,并輸出所述告警級(jí)別;
第三判斷模塊1505,當(dāng)?shù)谝慌袛嗄K1503判斷結(jié)果不是已刪除時(shí),用于 判斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息,釋放與 所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,若沒(méi)有數(shù)據(jù) 信息,結(jié)束申請(qǐng)。
通過(guò)回收內(nèi)存塊單元現(xiàn)將指針移至相應(yīng)內(nèi)存塊的狀態(tài)標(biāo)記,并檢查狀態(tài) 標(biāo)和數(shù)據(jù)區(qū)的實(shí)際情況是否 一致的方法,防止了在釋放數(shù)據(jù)區(qū)或這刪除內(nèi)存 塊的時(shí)候,出現(xiàn)異常,導(dǎo)致?tīng)顟B(tài)標(biāo)記和數(shù)據(jù)區(qū)的狀態(tài)不一致的問(wèn)題出現(xiàn),實(shí) 現(xiàn)了共享內(nèi)存管理,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有 效地管理共享內(nèi)存空間。
再進(jìn)一步的,在本發(fā)明實(shí)施例中,在刪除單元之后還可以增加過(guò)寫(xiě)保護(hù) 流程單元,所述的過(guò)寫(xiě)保護(hù)流程單元具體包括
申請(qǐng)過(guò)寫(xiě)保護(hù)模塊,用于根據(jù)過(guò)寫(xiě)保護(hù)指令,申請(qǐng)對(duì)內(nèi)存塊的過(guò)寫(xiě)保護(hù); 移動(dòng)模塊,用于根據(jù)過(guò)寫(xiě)保護(hù)指令,指針移至所述內(nèi)存塊的位置; 判斷模塊,指針移至所述內(nèi)存塊的位置之后,用于判斷與所述內(nèi)存塊對(duì) 應(yīng)的的邊緣邊界標(biāo)記信息是否為正常;若是正常,完成操作,若不是正常, 設(shè)置告警信息,輸出對(duì)所述內(nèi)存塊進(jìn)行內(nèi)存釋放操作的釋放指令所在的文件 名、行號(hào)和所述告警信息,并釋放與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)、在內(nèi)存雙向 鏈表中刪除所述內(nèi)存塊。
通過(guò)將指針移至標(biāo)記區(qū),并讀取位于標(biāo)記區(qū)的邊緣邊界標(biāo)記信息的方法, 判斷出對(duì)數(shù)據(jù)區(qū)的操作是否出現(xiàn)異常,如放入數(shù)據(jù)區(qū)的數(shù)據(jù)大于數(shù)據(jù)區(qū)的容 量等,并對(duì)出現(xiàn)異常的內(nèi)存塊進(jìn)行相應(yīng)處理,即根據(jù)異常程度輸出告警信息、 或者刪除相應(yīng)內(nèi)存塊,或者輸出異常指令所在的文件名和行號(hào)等,實(shí)現(xiàn)了共 享內(nèi)存管理,并且提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效 地管理共享內(nèi)存空間。本發(fā)明共享內(nèi)存管理裝置第二實(shí)施例
如圖16所示,為本發(fā)明共享內(nèi)存管理裝置第二實(shí)施例的結(jié)構(gòu)示意圖,該
裝置具體包括如下
啟動(dòng)模塊1601,用于啟動(dòng)主進(jìn)程;
判斷模塊1602,用于判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為 需要生成子進(jìn)程;若是需要生成子進(jìn)程,生成一空棧,所述子進(jìn)程對(duì)應(yīng)一個(gè) 內(nèi)存雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、 數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位 于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所 述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊 的i也址和后向內(nèi)存塊的地址;
入棧模塊1603,判斷模塊1602執(zhí)行完畢之后,用于將所述內(nèi)存雙向鏈表 推入所述空棧,并繼續(xù)判斷模塊1602。
本發(fā)明實(shí)施例,通過(guò)將與子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表推入棧內(nèi)方法,4吏 得每一個(gè)生成的內(nèi)存雙向鏈表全部位于不同的棧內(nèi),以此實(shí)現(xiàn)了共享內(nèi)存管 理,從而有效克服了現(xiàn)有技術(shù)沒(méi)有共享內(nèi)存管理機(jī)制的缺陷,使得應(yīng)用程序 有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù)管理中出現(xiàn)多個(gè)內(nèi)存雙向鏈表無(wú) 法與子進(jìn)程——對(duì)應(yīng)的問(wèn)題。
本發(fā)明共享內(nèi)存管理裝置第三實(shí)施例
如圖17所示,為本發(fā)明共享內(nèi)存管理裝置第三實(shí)施例的結(jié)構(gòu)示意圖,該 裝置具體包括如下
檢查模塊1701,當(dāng)子進(jìn)程執(zhí)行完畢時(shí),檢查所述內(nèi)存雙向鏈表是否存在 未釋放的數(shù)據(jù)區(qū),與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存 雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記 信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界 標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地
址。其中檢查所述內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū)可以為根據(jù)所述 內(nèi)存雙向鏈表檢查與每個(gè)內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)是否有數(shù)據(jù),若有數(shù)據(jù)則認(rèn)為 存在未釋放的數(shù)據(jù)區(qū)。
內(nèi)存塊回收模塊1702,當(dāng)檢查模塊1701的檢查出存在未釋放的數(shù)據(jù)區(qū)時(shí), 用于執(zhí)行回收內(nèi)存塊。
出棧模塊1703,當(dāng)檢查模塊1701的檢查出不存在未釋放的數(shù)據(jù)區(qū)時(shí),或 者內(nèi)存塊回收模塊1702執(zhí)行完畢之后,將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出, 并結(jié)束所述子進(jìn)程。
本發(fā)明實(shí)施例,在子進(jìn)程執(zhí)行完畢時(shí),通過(guò)檢查與所述子進(jìn)程對(duì)應(yīng)的內(nèi) 存雙向鏈表所在的棧,獲知所述棧里是否還殘留內(nèi)存雙向鏈表,并且對(duì)該內(nèi) 存雙向鏈表進(jìn)行回收內(nèi)存塊處理步驟,使得與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈 表完全被釋放,并刪除掉,從而實(shí)現(xiàn)了共享內(nèi)存管理,提供了一種有效的共 享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn)而杜絕了后續(xù) 管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
本發(fā)明共享內(nèi)存管理裝置第四實(shí)施例
如圖18所示,為本發(fā)明共享內(nèi)存管理裝置第四實(shí)施例的結(jié)構(gòu)示意圖,該 裝置具體包括如下
第一檢查模塊1801,當(dāng)子進(jìn)程執(zhí)行完畢時(shí),用于檢查一棧是否為空,所 述主進(jìn)程對(duì)應(yīng)至少 一個(gè)子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于 一棧 內(nèi),所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和 邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、 所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的 大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后 向內(nèi)存塊的地址。其中檢查一棧是否為空的方法可以為讀取所述一棧中某 一個(gè)內(nèi)存塊的節(jié)點(diǎn)信息,若所述內(nèi)存塊的前向內(nèi)存塊地址和后向內(nèi)存塊地址和所述內(nèi)存塊地址相同,則認(rèn)為所述一棧為空,否則認(rèn)為所述一棧不為空。
第二檢查模塊1802,當(dāng)?shù)谝粰z查模塊1801的檢查結(jié)果不為空時(shí),用于檢 查所述棧內(nèi)的內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū)。其中檢查所述棧內(nèi)的 內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū)方法可以為根據(jù)所述內(nèi)存雙向鏈表 檢查與每個(gè)內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)是否有數(shù)據(jù),若有數(shù)據(jù)則認(rèn)為存在未釋放的 數(shù)據(jù)區(qū)。
第三檢查模塊18 0 3 ,當(dāng)?shù)诙z查模塊18 02檢查出存在未釋放的數(shù)據(jù)區(qū)時(shí), 用于執(zhí)行回收內(nèi)存塊,當(dāng)?shù)诙z查模塊檢查出不存在未釋放的數(shù)據(jù)區(qū)時(shí),用 于將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出。
結(jié)束模塊1804,所述內(nèi)存雙向鏈表從所述棧內(nèi)推出之后,用于結(jié)束與所 述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程,繼續(xù)檢查下一棧是否為空。
本發(fā)明實(shí)施例,在主進(jìn)程執(zhí)行完畢時(shí),與所述主進(jìn)程對(duì)應(yīng)的所有的子進(jìn) 程進(jìn)行結(jié)束操作,即通過(guò)檢查與每一個(gè)子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表是否還殘 留有未釋放的數(shù)據(jù)區(qū)或者未刪除的內(nèi)存塊的步驟,檢查出所有殘留的、不使
用的數(shù)據(jù)區(qū)或內(nèi)存塊之后,對(duì)所述數(shù)據(jù)區(qū)或內(nèi)存塊進(jìn)行相應(yīng)的釋放或刪除操 作,使得所述主進(jìn)程管理的所有內(nèi)存雙向鏈表得以釋放或刪除,從而實(shí)現(xiàn)了 共享內(nèi)存管理,并提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效 地管理共享內(nèi)存空間,進(jìn)而杜絕了管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
進(jìn)一步的,在第一判斷模塊1801之后還可以增加第一判斷模塊,用于判 斷所述一棧是否為最后一棧。當(dāng)?shù)谝慌袛嗄K判斷出所述一棧為最后一棧時(shí), 所述結(jié)束模塊,結(jié)束與所述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程之后,不再檢查下一 個(gè)棧,直接結(jié)束所述主進(jìn)程。在具體實(shí)現(xiàn)過(guò)程中,首先根據(jù)主進(jìn)程生成一空 棧,然后根據(jù)生成的每一個(gè)子進(jìn)程,將與每一個(gè)子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表 的首內(nèi)存塊物理地址作為數(shù)據(jù)信息存放在由所述主進(jìn)程管理的內(nèi)存雙向鏈表 的相應(yīng)內(nèi)存塊的數(shù)據(jù)區(qū)中。這樣的話,其中判斷所述一棧是否為最后一棧的 方法可以為在主進(jìn)程管理的內(nèi)存雙向鏈表中,通過(guò)讀取與需要判斷的子進(jìn)程對(duì)應(yīng)的內(nèi)存塊的節(jié)點(diǎn)信息,并判斷主進(jìn)程管理的內(nèi)存雙向鏈表中所述內(nèi)存
塊的后向內(nèi)存塊地址為"nil",則認(rèn)為所述一棧為最后一棧,否則不是最后 一棧。這樣的話,當(dāng)主進(jìn)程完畢之時(shí),通過(guò)檢查棧是否為空,同時(shí)還檢查被 檢查的棧是否為最后 一棧的方法,防止了本發(fā)明實(shí)施例管理共享內(nèi)存的時(shí)候, 進(jìn)入死循環(huán),浪費(fèi)系統(tǒng)的資源的缺陷,從而實(shí)現(xiàn)了共享內(nèi)存管理,并提供了 一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間,進(jìn) 而杜絕了管理中出現(xiàn)殘留內(nèi)存塊的問(wèn)題。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟 可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀 取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述 的存儲(chǔ)介質(zhì)包括R0M、 RAM、;茲碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其 限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù) 人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或 者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技 術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
30
權(quán)利要求
1、一種共享內(nèi)存管理方法,其特征在于包括創(chuàng)建內(nèi)存雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;讀取相應(yīng)的節(jié)點(diǎn)信息;根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。
2、 根據(jù)權(quán)利要求1所述的共享內(nèi)存管理方法,其特征在于創(chuàng)建內(nèi)存雙向 鏈表之后還包括創(chuàng)建內(nèi)存塊流程,具體為根據(jù)創(chuàng)建指令,申請(qǐng)創(chuàng)建內(nèi)存塊;根據(jù)所述創(chuàng)建指令,設(shè)置節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息; 判斷在所述內(nèi)存雙向鏈表中與當(dāng)前內(nèi)存塊對(duì)應(yīng)的前向內(nèi)存塊地址和后向 內(nèi)存塊地址和當(dāng)前內(nèi)存塊地址是否相同,若是相同,根據(jù)已設(shè)置的節(jié)點(diǎn)信息, 將所述內(nèi)存塊設(shè)置為首內(nèi)存塊;若不是相同,根據(jù)已設(shè)置的節(jié)點(diǎn)信息,將所 述內(nèi)存設(shè)置為當(dāng)前內(nèi)存塊,并聯(lián)入所述內(nèi)存雙向鏈表。
3、 根據(jù)權(quán)利要求2所述的共享內(nèi)存管理方法,其特征在于根據(jù)所述創(chuàng)建 指令,設(shè)置節(jié)點(diǎn)信息具體為根據(jù)所述創(chuàng)建指令,在節(jié)點(diǎn)區(qū)中,設(shè)置所述創(chuàng) 建指令所在的文件名、所述創(chuàng)建指令所在的行號(hào)、狀態(tài)標(biāo)記、數(shù)據(jù)區(qū)大小、 前向內(nèi)存塊的地址和后向內(nèi)存塊的地址。
4、 根據(jù)權(quán)利要求2所述的共享內(nèi)存管理方法,其特征在于根據(jù)所述創(chuàng)建 指令,設(shè)置邊緣邊界標(biāo)記信息中所述邊緣邊界標(biāo)記信息用于表示寫(xiě)入的數(shù)據(jù) 信息是否超出數(shù)據(jù)區(qū)的大小。
5、 根據(jù)權(quán)利要求1所述的共享內(nèi)存管理方法,其特征在于根據(jù)所述節(jié)點(diǎn) 信息,刪除相應(yīng)內(nèi)存塊具體為根據(jù)釋放指令,申請(qǐng)釋放內(nèi)存塊;根據(jù)釋放指令,讀取與所述內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息;判斷所述節(jié)點(diǎn)信息中的狀態(tài)標(biāo)記是否為已刪除;若是已刪除,結(jié)束申請(qǐng), 若不是已刪除,修改所述狀態(tài)標(biāo)記為已刪除,釋放相應(yīng)數(shù)據(jù)區(qū),刪除雙向鏈 表中所述內(nèi)存塊。
6、 根據(jù)權(quán)利要求1所述的共享內(nèi)存管理方法,其特征在于還包括回收內(nèi) 存塊流程,具體為根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊; 根據(jù)回收指令,指針移至所述內(nèi)存塊的位置;判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪除;若是已刪除,判斷與 所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息則結(jié)束申請(qǐng),若 沒(méi)有數(shù)據(jù)信息,設(shè)置告警級(jí)別,并輸出所述告警級(jí)別;若不是已刪除,判斷 與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息,釋放與所述 內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,若沒(méi)有數(shù)據(jù)信息, 結(jié)束申請(qǐng)。
7、 根據(jù)權(quán)利要求6所述的共享內(nèi)存管理方法,其特征在于在內(nèi)存雙向鏈 表中刪除所述內(nèi)存塊之后還包括設(shè)置告警信息,并輸出所述告警信息。
8、 根據(jù)權(quán)利要求1所述的共享內(nèi)存管理方法,其特征在于還包括過(guò)寫(xiě)保 護(hù)流程,具體為根據(jù)過(guò)寫(xiě)保護(hù)指令,申請(qǐng)對(duì)內(nèi)存塊的過(guò)寫(xiě)保護(hù); 根據(jù)過(guò)寫(xiě)保護(hù)指令,指針移至所述內(nèi)存塊的位置;判斷與所述內(nèi)存塊對(duì)應(yīng)的邊緣邊界標(biāo)記信息是否為正常;若是正常,完 成搡作,若不是正常,設(shè)置告警信息,輸出對(duì)所述內(nèi)存塊進(jìn)行內(nèi)存釋放操作 的釋放指令所在的文件名、行號(hào)和所述告警信息,并釋放與所述內(nèi)存塊對(duì)應(yīng) 的數(shù)據(jù)區(qū)、在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊。
9、 一種共享內(nèi)存管理方法,其特征在于包括 3啟動(dòng)主進(jìn)程;判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要生成子進(jìn)程;若是需要生成子進(jìn)程,生成一空棧,所述子進(jìn)程對(duì)應(yīng)一個(gè)內(nèi)存雙向鏈表,所述 內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界 標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣 邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用 于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;將所述內(nèi)存雙向鏈表推入所述空棧,再次判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建 子進(jìn)程指令值是否為需要生成子進(jìn)程,并根據(jù)判斷結(jié)果循環(huán)。
10、 一種共享內(nèi)存管理方法,其特征在于包括子進(jìn)程執(zhí)行完畢,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述 內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界 標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣 邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用 于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊 的地址;檢查所述內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū);若存在未釋放的數(shù)據(jù) 區(qū),執(zhí)行回收內(nèi)存塊,若不存在未釋放的數(shù)據(jù)區(qū),將所述內(nèi)存雙向鏈表從所 述棧內(nèi)推出。
11、 根據(jù)權(quán)利要求IO所述的共享內(nèi)存管理方法,其特征在于執(zhí)行回收內(nèi) 存塊具體為根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊; 根據(jù)回收指令,指針移至所述內(nèi)存塊的位置;判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪除;若是已刪除,判斷與 所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息則結(jié)束申請(qǐng),若沒(méi)有數(shù)據(jù)信息,設(shè)置告警級(jí)別,并輸出所述告警級(jí)別;若不是已刪除,判斷 與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息,釋放與所述 內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,若沒(méi)有數(shù)據(jù)信息, 結(jié)束申請(qǐng)。
12、 一種共享內(nèi)存管理方法,其特征在于包括主進(jìn)程執(zhí)行完畢;所述主進(jìn)程對(duì)應(yīng)至少一個(gè)子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng) 的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng) 的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所 述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息 至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、 前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;檢查一棧是否為空;若不為空,檢查所述棧內(nèi)的內(nèi)存雙向鏈表是否存在 未釋放的數(shù)據(jù)區(qū);若存在未釋放的數(shù)據(jù)區(qū),執(zhí)行回收內(nèi)存塊,若不存在未釋 放的數(shù)據(jù)區(qū),將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出;結(jié)束與所述棧內(nèi)雙向鏈 表對(duì)應(yīng)的子進(jìn)程,繼續(xù)檢查下一棧是否為空。
13、 根據(jù)權(quán)利要求12所述的共享內(nèi)存管理方法,其特征在于,在檢查所 述一棧是否為空之后還包括判斷所述一棧是否為最后一棧;若是最后一棧, 結(jié)束與所述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程之后,結(jié)束所述主進(jìn)程。
14、 根據(jù)權(quán)利要求12所述的共享內(nèi)存管理方法,其特征在于若是執(zhí)行回 收內(nèi)存塊具體為根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊; 根據(jù)回收指令,指針移至所述內(nèi)存塊的位置;判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪除;若是已刪除,判斷與 所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息則結(jié)束申請(qǐng),若 沒(méi)有數(shù)據(jù)信息,設(shè)置告警級(jí)別,并輸出所述告警級(jí)別;若不是已刪除,判斷 與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息,若有數(shù)據(jù)信息,釋放與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,若沒(méi)有數(shù)據(jù)信息, 結(jié)束申請(qǐng)。
15、 一種共享內(nèi)存管理裝置,其特征在于包括創(chuàng)建單元,用于創(chuàng)建鏈表,所述鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn) 信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù) 信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包 含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向 內(nèi)存塊的地址和后向內(nèi)存塊的地址;讀取單元,用于讀取相應(yīng)的節(jié)點(diǎn)信息;刪除單元,用于根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。
16、 根據(jù)權(quán)利要求15所述的共享內(nèi)存管理裝置,其特征在于所述創(chuàng)建單 元之后還包括創(chuàng)建內(nèi)存快單元,所述創(chuàng)建內(nèi)存塊單元包括申請(qǐng)創(chuàng)建模塊,用于根據(jù)創(chuàng)建指令,申請(qǐng)創(chuàng)建內(nèi)存塊; 設(shè)置模塊,用于根據(jù)所述創(chuàng)建指令,設(shè)置節(jié)點(diǎn)信息和邊緣邊界標(biāo)記信息; 判斷模塊,用于判斷在所述內(nèi)存雙向鏈表中與當(dāng)前內(nèi)存塊對(duì)應(yīng)的前向內(nèi) 存塊地址和后向內(nèi)存塊地址和當(dāng)前內(nèi)存塊地址是否相同,若是相同,根據(jù)已 設(shè)置的節(jié)點(diǎn)信息,將所述內(nèi)存塊設(shè)置為首內(nèi)存塊;若不是相同,根據(jù)已設(shè)置 的節(jié)點(diǎn)信息,將所述內(nèi)存設(shè)置為當(dāng)前內(nèi)存塊,并聯(lián)入所述內(nèi)存雙向鏈表。
17、 根據(jù)權(quán)利要求15所述的共享內(nèi)存管理裝置,其特征在于所述刪除單 元包括申請(qǐng)釋放沖莫塊,用于根據(jù)釋放指令,申請(qǐng)釋放內(nèi)存塊;讀取模塊,用于根據(jù)釋放指令,讀取與所迷內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息;判斷模塊,用于判斷所述節(jié)點(diǎn)信息中的狀態(tài)標(biāo)記是否為已刪除;若是已刪除,結(jié)束申請(qǐng),若不是已刪除,修改所述狀態(tài)標(biāo)記為已刪除,釋放相應(yīng)數(shù)據(jù)區(qū),刪除雙向鏈表中所述內(nèi)存塊。
18、 根據(jù)權(quán)利要求15所述的共享內(nèi)存管理裝置,其特征在于還包括回收內(nèi)存塊流程單元,所述回收內(nèi)存塊流程單元包括申請(qǐng)回收模塊,用于根據(jù)回收指令,申請(qǐng)回收內(nèi)存塊;移動(dòng)才莫塊,用于根據(jù)回收指令,指針移至所述內(nèi)存塊的位置;第 一判斷模塊,用于判斷與所述內(nèi)存塊對(duì)應(yīng)的狀態(tài)標(biāo)記是否為已刪除;第二判斷模塊,當(dāng)?shù)谝慌袛嗄K判斷結(jié)果是已刪除時(shí),用于判斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息則結(jié)束申請(qǐng),若沒(méi)有數(shù)據(jù)信息,設(shè)置告警級(jí)別,并輸出所述告警級(jí)別;第三判斷模塊,當(dāng)?shù)谝慌袛嗄K判斷結(jié)果不是已刪除時(shí),用于判斷與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)域是否有數(shù)據(jù)信息;若有數(shù)據(jù)信息,釋放與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū),在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊,若沒(méi)有數(shù)據(jù)信息,結(jié)束申請(qǐng)。
19、 根據(jù)權(quán)利要求15所述的共享內(nèi)存管理裝置,其特征在于還包括過(guò)寫(xiě) 保護(hù)流程單元,所述過(guò)寫(xiě)保護(hù)流程單元包括申請(qǐng)過(guò)寫(xiě)保護(hù)模塊,用于根據(jù)過(guò)寫(xiě)保護(hù)指令,申請(qǐng)對(duì)內(nèi)存塊的過(guò)寫(xiě)保護(hù); 移動(dòng)模塊,用于根據(jù)過(guò)寫(xiě)保護(hù)指令,指針移至所述內(nèi)存塊的位置; 判斷模塊,用于判斷與所述內(nèi)存塊對(duì)應(yīng)的的邊緣邊界標(biāo)記信息是否為正 常;若是正常,完成操作,若不是正常,設(shè)置告警信息,輸出對(duì)所述內(nèi)存塊 進(jìn)行內(nèi)存釋放操作的釋放指令所在的文件名、行號(hào)和所述告警信息,并釋放 與所述內(nèi)存塊對(duì)應(yīng)的數(shù)據(jù)區(qū)、在內(nèi)存雙向鏈表中刪除所述內(nèi)存塊。
20、 一種共享內(nèi)存管理裝置,其特征在于包括 啟動(dòng)模塊,用于啟動(dòng)主進(jìn)程;判斷模塊,用于判斷與所述主進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要 生成子進(jìn)程;若是需要生成子進(jìn)程,生成一空棧,所述子進(jìn)程對(duì)應(yīng)一個(gè)內(nèi)存 雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù) 信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù) 據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的;也址;入棧模塊,用于將所述內(nèi)存雙向鏈表推入所述空棧,再次判斷與所述主 進(jìn)程相應(yīng)的創(chuàng)建子進(jìn)程指令值是否為需要生成子進(jìn)程;并根據(jù)判斷結(jié)果循環(huán)。
21、 一種共享內(nèi)存管理裝置,其特征在于包括檢查模塊,當(dāng)子進(jìn)程執(zhí)行完畢時(shí),檢查所述內(nèi)存雙向鏈表是否存在未釋 放的數(shù)據(jù)區(qū),與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi),所述內(nèi)存雙向 鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息, 所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信 息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù) 區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;內(nèi)存塊回收模塊,當(dāng)檢查模塊的檢查出存在未釋放的數(shù)據(jù)區(qū)時(shí),用于執(zhí) 行回收內(nèi)存塊;出棧模塊,當(dāng)檢查模塊的檢查出不存在未釋放的數(shù)據(jù)區(qū)時(shí),將所述內(nèi)存 雙向鏈表從所述棧內(nèi)推出。
22、 一種共享內(nèi)存管理裝置,其特征在于包括第一檢查模塊,當(dāng)子進(jìn)程執(zhí)行完畢時(shí),用于檢查一棧是否為空,所述主 進(jìn)程對(duì)應(yīng)至少一個(gè)子進(jìn)程,與所述子進(jìn)程對(duì)應(yīng)的內(nèi)存雙向鏈表位于一棧內(nèi), 所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣 邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述 邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、 用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存 塊的地址;第二檢查模塊,當(dāng)?shù)谝粰z查模塊的檢查結(jié)果不為空時(shí),用于檢查所述棧 內(nèi)的內(nèi)存雙向鏈表是否存在未釋放的數(shù)據(jù)區(qū);第三檢查模塊,當(dāng)?shù)诙z查模塊檢查出存在未釋放的數(shù)據(jù)區(qū)時(shí),用于執(zhí)行回收內(nèi)存塊,當(dāng)?shù)诙z查模塊檢查出不存在未釋放的數(shù)據(jù)區(qū)時(shí),用于將所述內(nèi)存雙向鏈表從所述棧內(nèi)推出;結(jié)束模塊,用于結(jié)束與所述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程,繼續(xù)檢查下一 棧是否為空。
23、根據(jù)權(quán)利要求22所述的共享內(nèi)存管理裝置,其特征在于在第一檢查 模塊還包括第一判斷模塊,用于判斷所述一棧是否為最后一棧; 當(dāng)?shù)谝慌袛嗄K判斷出所述一棧為最后一棧時(shí),所述結(jié)束模塊,結(jié)束與所述棧內(nèi)雙向鏈表對(duì)應(yīng)的子進(jìn)程之后,結(jié)束所述主進(jìn)程。
全文摘要
本發(fā)明涉及一種共享內(nèi)存管理方法及裝置,其中該方法包括創(chuàng)建內(nèi)存雙向鏈表,所述內(nèi)存雙向鏈表中包含有與每個(gè)內(nèi)存塊對(duì)應(yīng)的節(jié)點(diǎn)信息、數(shù)據(jù)信息和邊緣邊界標(biāo)記信息,所述節(jié)點(diǎn)信息位于節(jié)點(diǎn)區(qū)、所述數(shù)據(jù)信息位于數(shù)據(jù)區(qū)、所述邊緣邊界標(biāo)記信息位于標(biāo)記區(qū),所述節(jié)點(diǎn)信息至少包含有所述數(shù)據(jù)區(qū)的大小、用于表示數(shù)據(jù)區(qū)是否有數(shù)據(jù)信息的狀態(tài)標(biāo)記、前向內(nèi)存塊的地址和后向內(nèi)存塊的地址;讀取相應(yīng)的節(jié)點(diǎn)信息;根據(jù)所述節(jié)點(diǎn)信息,刪除相應(yīng)內(nèi)存塊。本發(fā)明克服了現(xiàn)有技術(shù)創(chuàng)建內(nèi)存鏈表后無(wú)法有效管理共享內(nèi)存管理缺陷,提供了一種有效的共享內(nèi)存保護(hù)機(jī)制,使得應(yīng)用程序有效地管理共享內(nèi)存空間。
文檔編號(hào)G06F9/50GK101470632SQ200710304000
公開(kāi)日2009年7月1日 申請(qǐng)日期2007年12月24日 優(yōu)先權(quán)日2007年12月24日
發(fā)明者姜琰祥, 房厚波 申請(qǐng)人:華為軟件技術(shù)有限公司