專利名稱:跨進(jìn)程數(shù)據(jù)傳輸方法、裝置及網(wǎng)絡(luò)設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤指一種跨進(jìn)程數(shù)據(jù)傳輸方法、裝置及網(wǎng)絡(luò)設(shè)備。
背景技術(shù):
現(xiàn)有的嵌入式系統(tǒng)越來越多地使用基于進(jìn)程管理的操作系統(tǒng)技術(shù),不同的進(jìn)程運(yùn) 行在不同的地址空間中,每個(gè)進(jìn)程都無法直接訪問其他進(jìn)程中的數(shù)據(jù),為了實(shí)現(xiàn)運(yùn)行在不 同地址空間的不同進(jìn)程之間的數(shù)據(jù)傳遞,通常有下面的幾種處理方式一是采用數(shù)據(jù)拷貝的方式。通過數(shù)據(jù)拷貝的方式,將一個(gè)進(jìn)程中的數(shù)據(jù)復(fù)制到另外一個(gè)進(jìn)程中供其訪問。例 如將報(bào)文數(shù)據(jù)直接從進(jìn)程A (源進(jìn)程)的地址空間復(fù)制到進(jìn)程B(目的進(jìn)程)的地址空間 中,供進(jìn)程B訪問。頻繁的數(shù)據(jù)拷貝顯然非常耗時(shí),使得這種共享數(shù)據(jù)的方式效率極其低 下,而且十分浪費(fèi)內(nèi)存空間。由于在網(wǎng)絡(luò)協(xié)議棧中各種應(yīng)用協(xié)議的報(bào)文數(shù)據(jù)往往非常龐大, 具有大量報(bào)文傳輸需求,更是嚴(yán)重影響了網(wǎng)絡(luò)嵌入式系統(tǒng)的實(shí)時(shí)性。特別是使用IPv6協(xié)議 的網(wǎng)絡(luò)系統(tǒng)中,報(bào)文允許的有效載荷要比使用IPv4網(wǎng)絡(luò)系統(tǒng)大得多,進(jìn)程間的數(shù)據(jù)拷貝對(duì) 系統(tǒng)性能的影響也尤為突出。二是共享內(nèi)存(Shared Memory, SHM)傳遞的方式。該方式是通過創(chuàng)建的共享內(nèi)存區(qū),將需要在進(jìn)程間傳遞的數(shù)據(jù)內(nèi)容保存到所有進(jìn) 程都可以訪問的共享物理內(nèi)存中,實(shí)現(xiàn)進(jìn)程間“零拷貝,,的傳遞數(shù)據(jù)。即將需要傳遞的數(shù)據(jù) 保存到其他進(jìn)程也可以訪問的共享內(nèi)存區(qū)中,然后將本進(jìn)程地址空間使用的數(shù)據(jù)內(nèi)存地址 (Data Memory Address, DMA)轉(zhuǎn)換為基于其他進(jìn)程地址空間的內(nèi)存地址,以供其他進(jìn)程使 用,其他進(jìn)程直接通過該內(nèi)存地址去訪問共享內(nèi)存區(qū),獲取所需的數(shù)據(jù)。現(xiàn)有共享內(nèi)存實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)傳遞的方式,在每次傳遞數(shù)據(jù)時(shí)臨時(shí)創(chuàng)建共享內(nèi)存 區(qū),傳遞完后就刪除的話,頻繁地創(chuàng)建和銷毀共享內(nèi)存區(qū)所導(dǎo)致的頻繁的內(nèi)存操作,降低了 數(shù)據(jù)傳遞的效率,同時(shí)造成內(nèi)存資源的浪費(fèi),影響系統(tǒng)性能。如果創(chuàng)建包含多個(gè)內(nèi)存塊的若 干共享內(nèi)存區(qū),每次傳輸數(shù)據(jù)使用其中的一個(gè)內(nèi)存塊,雖然可以在一定程度上減少創(chuàng)建和 刪除操作,但是只要有一個(gè)內(nèi)存塊在使用,則共享內(nèi)存區(qū)就不能釋放,從而導(dǎo)致內(nèi)存資源的 浪費(fèi)。且每次選擇合適大小的內(nèi)存塊時(shí)都需要遍歷所有的內(nèi)存塊來實(shí)現(xiàn)查找選擇,導(dǎo)致數(shù) 據(jù)跨進(jìn)程傳輸?shù)难訒r(shí)很長(zhǎng),且遍歷內(nèi)存塊也導(dǎo)致系統(tǒng)資源浪費(fèi),影響了系統(tǒng)的性能。由于嵌入式系統(tǒng)的內(nèi)存容量通常比較小,內(nèi)存使用的不合理將大大降低網(wǎng)絡(luò)設(shè)備 對(duì)報(bào)文的處理能力,從而降低設(shè)備處理性能。因此,在使用共享內(nèi)存機(jī)制進(jìn)行進(jìn)程間數(shù)據(jù) 傳輸時(shí),如何有效地利用內(nèi)存空間,提高數(shù)據(jù)傳遞效率和提高內(nèi)存利用率,已成為嵌入式系 統(tǒng),尤其是網(wǎng)絡(luò)嵌入式系統(tǒng)中迫切需要解決的一個(gè)問題。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種跨進(jìn)程數(shù)據(jù)傳輸方法、裝置及網(wǎng)絡(luò)設(shè)備,用以解決現(xiàn)有技 術(shù)中通過共享內(nèi)存方式實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)傳輸時(shí)存在數(shù)據(jù)傳輸延時(shí)長(zhǎng),系統(tǒng)資源浪費(fèi)、影響系統(tǒng)性能的問題。一種跨進(jìn)程數(shù)據(jù)傳輸方法,包括根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi)存池中共享內(nèi)存區(qū)所 包含的共享內(nèi)存對(duì)象的大小,選擇適于存放所述待傳遞數(shù)據(jù)的共享內(nèi)存池;每個(gè)所述共享 內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同;從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū),將所述待傳遞數(shù)據(jù)存 放至所選擇的共享內(nèi)存區(qū)中空閑的共享內(nèi)存對(duì)象中并將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記 為占用狀態(tài);根據(jù)所述待傳遞數(shù)據(jù)在所述第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū) 中獲取所述待傳遞數(shù)據(jù)的指針地址。一種跨進(jìn)程數(shù)據(jù)傳輸裝置,包括內(nèi)存池選擇模塊,用于根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi) 存池中共享內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放所述待傳遞數(shù)據(jù)的共享內(nèi) 存池;每個(gè)所述共享內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同;區(qū)域選擇模塊,用于從所述內(nèi)存池選擇模塊選擇的內(nèi)存池中選擇一個(gè)處于可使用 狀態(tài)的共享內(nèi)存區(qū);傳輸控制模塊,用于將所述待傳遞數(shù)據(jù)存放至所述區(qū)域選擇模塊選擇的共享內(nèi)存 區(qū)中空閑的共享內(nèi)存對(duì)象中并將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài);地址確定模塊,用于根據(jù)所述數(shù)據(jù)傳遞模塊存儲(chǔ)的待傳遞數(shù)據(jù)在所述第一進(jìn)程中 的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲取所述待傳遞數(shù)據(jù)的指針地址。一種網(wǎng)絡(luò)設(shè)備,包括上述的跨進(jìn)程數(shù)據(jù)傳輸裝置。本發(fā)明有益效果如下本發(fā)明實(shí)施例提供的跨進(jìn)程數(shù)據(jù)傳輸方法、裝置及網(wǎng)絡(luò)設(shè)備,通過將相同大小的 共享內(nèi)存對(duì)象設(shè)置在一個(gè)共享內(nèi)存池中,實(shí)現(xiàn)了在第一進(jìn)程需要傳遞數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)大 小選擇則共享內(nèi)存池,使用其中的共享內(nèi)存對(duì)象,從而使得在需要傳輸數(shù)據(jù)時(shí),能夠快速查 找到合適的共享內(nèi)存區(qū),不必再遍歷所有的共享內(nèi)存區(qū),方便了進(jìn)程間的數(shù)據(jù)傳遞,減少了 數(shù)據(jù)傳輸時(shí)查找的時(shí)延,提高了跨區(qū)域數(shù)據(jù)傳輸?shù)乃俣群托?;由于不用遍歷所有內(nèi)存區(qū), 節(jié)約了系統(tǒng)資源,大大提高了系統(tǒng)的處理性能。
圖1為本發(fā)明實(shí)施例一中跨進(jìn)程數(shù)據(jù)傳輸方法的流程圖;圖2為本發(fā)明實(shí)施例一中共享內(nèi)存區(qū)在進(jìn)程地址空間的關(guān)系的示意圖;圖3為本發(fā)明實(shí)施例一中確定數(shù)據(jù)傳輸時(shí)的指針地址的原理示意圖;圖4為本發(fā)明實(shí)施例二中跨進(jìn)程數(shù)據(jù)傳輸方法的流程圖;圖5為本發(fā)明實(shí)施例二中共享內(nèi)存池的結(jié)構(gòu)關(guān)系示意圖;圖6為本發(fā)明實(shí)施例二中共享內(nèi)存區(qū)的共享內(nèi)存對(duì)象結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例中跨進(jìn)程數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式針對(duì)現(xiàn)有技術(shù)中存在的共享內(nèi)存區(qū)實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)傳輸時(shí)存在的內(nèi)存利用率低、 內(nèi)存資源浪費(fèi),以及頻繁創(chuàng)建和刪除共享內(nèi)存區(qū)影響系統(tǒng)性能的等問題,本申請(qǐng)實(shí)施例提 供一種跨進(jìn)程數(shù)據(jù)傳輸方法,通過創(chuàng)建共享內(nèi)存池實(shí)現(xiàn)對(duì)相同大小的共享內(nèi)存對(duì)象的統(tǒng)一 管理和合理分配使用,實(shí)現(xiàn)節(jié)約內(nèi)存資源,提高內(nèi)存利用率的目的。下面通過具體的實(shí)施例 進(jìn)行說明。本申請(qǐng)實(shí)施例提供的跨進(jìn)程數(shù)據(jù)傳輸方法,需要?jiǎng)?chuàng)建若干包含相同大小的共享內(nèi) 存對(duì)象的共享內(nèi)存池用于數(shù)據(jù)的傳輸。其中一個(gè)共享內(nèi)存池(Shared Memory Pool,SMP)中可以包含零到多個(gè)共享內(nèi)存區(qū),用 于對(duì)同一類型的共享內(nèi)存區(qū)進(jìn)行管理和配置??梢耘渲霉蚕韮?nèi)存池的描述符來存儲(chǔ)共享內(nèi) 存區(qū)的描述信息。本申請(qǐng)中所說的共享內(nèi)存區(qū)(Shared Memory Area, SMA)不同于現(xiàn)有技術(shù)中的概 念,是指提供相同大小的共享內(nèi)存對(duì)象(即內(nèi)存塊)的共享內(nèi)存區(qū)。一個(gè)共享內(nèi)存區(qū)的共享 內(nèi)存對(duì)象的大小都相同,而包含的共享內(nèi)存對(duì)象的大小相同的所有共享內(nèi)存區(qū)歸為一類, 放入一個(gè)共享內(nèi)存池中。每個(gè)共享內(nèi)存區(qū)的頭部也設(shè)置有該共享內(nèi)存區(qū)的描述信息(即描 述符),包括分配和管理該共享內(nèi)存區(qū)的共享內(nèi)存對(duì)象時(shí)所需要的各種信息。可見,每個(gè)共享內(nèi)存池中,僅包含同一類型的共享內(nèi)存區(qū),這些共享內(nèi)存區(qū)中的共 享內(nèi)存對(duì)象(Shared Memory Object, SM0)大小都是相同的。也就是說,預(yù)先創(chuàng)建的每個(gè)共 享內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同。大小不同的共享內(nèi)存對(duì)象包 含在不同的共享內(nèi)存池中,當(dāng)需要傳遞數(shù)據(jù)時(shí),從共享內(nèi)存池中選擇一個(gè)共享內(nèi)存區(qū)中的 空閑的共享內(nèi)存對(duì)象。其中,上述每一類共享內(nèi)存區(qū)包含一個(gè)或多個(gè)物理頁,具體需要包含多少物理頁, 由共享內(nèi)存區(qū)內(nèi)所包含的共享內(nèi)存對(duì)象的大小來決定,以共享內(nèi)存區(qū)完成相同大小的共享 內(nèi)存對(duì)象劃分之后剩余的共享內(nèi)存碎片盡可能小為原則,以提高內(nèi)存的利用率。其中,共享 內(nèi)存碎片是指共享內(nèi)存區(qū)劃分成固定大小的共享內(nèi)存對(duì)象之后,剩余的不足以分配一個(gè)對(duì) 應(yīng)大小的共享內(nèi)存對(duì)象的內(nèi)存空間。優(yōu)選的,在計(jì)算每一類共享內(nèi)存區(qū)的大小時(shí),根據(jù)對(duì)應(yīng)的共享內(nèi)存對(duì)象的大小進(jìn) 行精確計(jì)算,以保證共享內(nèi)存碎片盡可能地小。優(yōu)選的,為了方便內(nèi)存分配,共享內(nèi)存池中的共享內(nèi)存對(duì)象大小,按照2的N次冪 進(jìn)行分類,每一類共享內(nèi)存對(duì)象的大小都是2的整數(shù)次冪倍(大小從32B到32MB)。每個(gè)共 享內(nèi)存池在初始化的時(shí)候,根據(jù)所包含共享內(nèi)存對(duì)象的大小,對(duì)自身要?jiǎng)?chuàng)建的共享內(nèi)存區(qū) 的大小進(jìn)行計(jì)算,以劃分出共享內(nèi)存對(duì)象后,剩余的碎片不超過所包含物理頁內(nèi)存空間的 設(shè)定比例(例如1/8)時(shí)認(rèn)為可以接受。這樣做的好處是,可以盡可能減少共享內(nèi)存碎片的 損耗,提高內(nèi)存的利用率。實(shí)施例一本發(fā)明實(shí)施例一提供的跨進(jìn)程數(shù)據(jù)傳輸方法,其流程如圖1所示,執(zhí)行步驟如下步驟Sll 根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi)存池中共享 內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放待傳遞數(shù)據(jù)的共享內(nèi)存池。較佳的,上述根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi)存池中共享內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放待傳遞數(shù)據(jù)的共享內(nèi)存池,具體包括首先,根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小,確定包含的共享內(nèi)存對(duì)象的大小大于 待傳遞數(shù)據(jù)的大小的共享內(nèi)存池;因?yàn)橹挥写笥诖齻鬟f數(shù)據(jù)的大小的共享內(nèi)存對(duì)象才能將 該待傳遞數(shù)據(jù)存儲(chǔ)起來。然后,從確定的共享內(nèi)存池中選擇一個(gè)共享內(nèi)存對(duì)象最小的共享內(nèi)存池作為存放 待傳遞數(shù)據(jù)的共享內(nèi)存池。在能夠存儲(chǔ)待傳遞數(shù)據(jù)的共享內(nèi)存對(duì)象中選擇一個(gè)最小的是為 了更充分的利用內(nèi)存空間。當(dāng)然直接選用任何一個(gè)大于待傳遞數(shù)據(jù)大小的共享內(nèi)存對(duì)象來 實(shí)現(xiàn)數(shù)據(jù)傳輸也是可以實(shí)現(xiàn)的。步驟S12 從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū)。根據(jù)共享內(nèi)存區(qū)中的共享內(nèi)存對(duì)象是否完全被占用,共享內(nèi)存池中的共享內(nèi)存區(qū) 的狀態(tài)包括完全占用狀態(tài)、部分占用狀態(tài)和空閑狀態(tài)。在從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū)時(shí),可以直接從處于 部分占用狀態(tài)或空閑狀態(tài)的共享內(nèi)存區(qū)中選擇。其中,共享內(nèi)存區(qū)中所有的共享內(nèi)存對(duì)象 都已經(jīng)分配出去,即都已被占用了(All objects allocated),則稱作完全占用狀態(tài)的共享 內(nèi)存區(qū)(Full Shared Memory Areas, Full SHM);共享內(nèi)存區(qū)中的共享內(nèi)存對(duì)象只有部分 已經(jīng)分配出去(Partial objectsallocated),另一部分尚未分配出去的,稱作部分占用狀 態(tài)的共享內(nèi)存區(qū)(PartialShared Memory Areas,Partial SHM);共享內(nèi)存區(qū)的所有共享內(nèi) 存對(duì)象都處于空閑狀態(tài)(All objects free),尚未分配出去的,稱作空閑狀態(tài)的共享內(nèi)存 區(qū)(FreeShared Memory Areas, Free SHM)。優(yōu)選的,在從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū)時(shí),優(yōu)先查 找選擇的內(nèi)存池中是否存在處于部分占用狀態(tài)的共享內(nèi)存區(qū),若是,從處于部分占用狀態(tài) 的共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi)存區(qū);否則,從空閑狀態(tài)的共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi) 存區(qū)。優(yōu)選的,可以通過建立的完全占用鏈表、部分占用鏈表和空閑狀態(tài)鏈表維護(hù)處于 完全占用狀態(tài)、部分占用狀態(tài)和空閑狀態(tài)的共享內(nèi)存區(qū)。步驟S13 將待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi)存區(qū)中空閑的共享內(nèi)存對(duì)象中。在選擇共享內(nèi)存區(qū)后,將待傳遞數(shù)據(jù)存儲(chǔ)在所選擇的共享內(nèi)存區(qū)中的任何一個(gè)空 閑的共享內(nèi)存對(duì)象中即可。步驟S14 將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài)。在存放數(shù)據(jù)后對(duì)共享內(nèi)存對(duì)象進(jìn)行標(biāo)記,使得下次再存儲(chǔ)數(shù)據(jù)時(shí),不會(huì)選擇該已 經(jīng)占用的共享內(nèi)存對(duì)象。其中,共享內(nèi)存區(qū)在進(jìn)程地址空間中的映射關(guān)系如圖2所示,其中共享內(nèi)存區(qū)的 起始地址a和終止地址b分別映射到進(jìn)程地址空間中的地址a’和b’。步驟S15 根據(jù)待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存 區(qū)中獲取所述待傳遞數(shù)據(jù)的指針地址。一般數(shù)據(jù)的指針在一個(gè)進(jìn)程的內(nèi)存地址空間中是一個(gè)絕對(duì)值,只能在該進(jìn)程中使 用,因此共享內(nèi)存區(qū)要想在進(jìn)程中使用就必須實(shí)現(xiàn)如圖2所示的地址的映射。使用共享內(nèi) 存區(qū)實(shí)現(xiàn)數(shù)據(jù)傳輸時(shí),由于共享內(nèi)存區(qū)在不同進(jìn)程的地址空間映射的范圍通常是不一樣 的,因此,如果直接將數(shù)據(jù)指針從一個(gè)進(jìn)程傳遞到另一個(gè)進(jìn)程,對(duì)數(shù)據(jù)的訪問將會(huì)出錯(cuò),因?yàn)檫@個(gè)指針在另一個(gè)進(jìn)程的地址空間中指向的可能是另外一個(gè)內(nèi)存區(qū)域。此時(shí),數(shù)據(jù)指針 不能直接在進(jìn)程間傳遞,否則勢(shì)必引起應(yīng)用程序錯(cuò)誤,同樣需要實(shí)現(xiàn)數(shù)據(jù)指針在不同進(jìn)程 的內(nèi)存地址空間之間的映射和傳遞。由于共享內(nèi)存區(qū)在不同進(jìn)程中的映射地址(稱為共享內(nèi)存區(qū)在進(jìn)程中的基址)是 不同的,但是共享內(nèi)存區(qū)中的同一個(gè)共享內(nèi)存對(duì)象在進(jìn)程中相對(duì)于基址的偏移地址確是一 致,因此,可以根據(jù)待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲 取待傳遞數(shù)據(jù)的指針地址,具體包括根據(jù)待傳遞數(shù)據(jù)第一進(jìn)程中的指針地址和第一進(jìn)程的基址,確定待傳遞數(shù)據(jù)在第 一進(jìn)程中的偏移地址;根據(jù)該偏移地址和第二進(jìn)程的基址,確定待傳遞數(shù)據(jù)在第二進(jìn)程中 的指針地址。也就是說,在進(jìn)程間進(jìn)行數(shù)據(jù)傳遞時(shí),第一進(jìn)程只需要將共享內(nèi)存對(duì)象的偏移地 址傳遞給第二進(jìn)程(即目標(biāo)進(jìn)程)即可,第二進(jìn)程將接收到的偏移地址加上共享內(nèi)存區(qū)在 本進(jìn)程中的基址,即可重新生成該共享內(nèi)存對(duì)象中的數(shù)據(jù)在本進(jìn)程中的指針地址,從而達(dá) 到進(jìn)程間數(shù)據(jù)指針傳遞的目的。例如確定數(shù)據(jù)傳輸時(shí)的指針地址的原理如圖3所示,圖3中的第一進(jìn)程(進(jìn)程A) 向第二進(jìn)程(進(jìn)程B)傳遞數(shù)據(jù),待傳遞的數(shù)據(jù)在共享內(nèi)存對(duì)象(object)中存儲(chǔ),該共享內(nèi) 存對(duì)象所屬共享內(nèi)存區(qū)在進(jìn)程A中的基址為m,在進(jìn)程B中的基址為η。存儲(chǔ)在該共享內(nèi)存 對(duì)象中的數(shù)據(jù)在進(jìn)程A中的指針地址為obj_ptr_a,因此,待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移 地址為obj_ptr_a-m,將這個(gè)偏移地址傳遞給進(jìn)程B,進(jìn)程B接收到偏移地址后,加上基址η 就是該共享內(nèi)存對(duì)象(或說待傳遞數(shù)據(jù))在進(jìn)程B的地址空間中的指針地址,該指針地址 為 obj_ptr_a-m+n(即圖 3 中的 obj_ptr_b)。實(shí)施例二本發(fā)明實(shí)施例二提供的跨進(jìn)程數(shù)據(jù)傳輸方法,可以通過一個(gè)共享內(nèi)存守護(hù)進(jìn)程 (Shared Memory Daemon Process, SMDP)實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建、刪除等調(diào)整共享內(nèi)存池中的共享 內(nèi)存區(qū)的操作;并負(fù)責(zé)共享內(nèi)存池中包含的共享內(nèi)存區(qū)的管理和配置,包括相關(guān)數(shù)據(jù)結(jié)構(gòu) 的初始化,以及共享內(nèi)存對(duì)象的分配和回收等等。本實(shí)施例提供的跨進(jìn)程數(shù)據(jù)傳輸方法的流程如圖4所示,執(zhí)行步驟如下步驟S21 確定第一進(jìn)程需要傳遞的待傳遞數(shù)據(jù)的大小。這里是指待傳遞數(shù)據(jù)存儲(chǔ)時(shí)所需要的內(nèi)存空間的大小,例如數(shù)據(jù)所占用的字節(jié)數(shù)。步驟S22 在預(yù)先創(chuàng)建的共享內(nèi)存池中查找適于存儲(chǔ)該待傳遞數(shù)據(jù)的共享內(nèi)存 池。具體參見步驟Sll。步驟S23 在選擇的共享內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)共享內(nèi)存區(qū)。具體參見步驟S12。優(yōu)選的,為了能夠使共享內(nèi)存池中的空閑內(nèi)存對(duì)象維持在一個(gè)比較合理的數(shù)量, 可以監(jiān)控共享內(nèi)存池中處于空閑的共享內(nèi)存對(duì)象的數(shù)量或比例,以便及時(shí)的對(duì)共享內(nèi)存區(qū) 進(jìn)行調(diào)整。具體包括當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量低于設(shè)定的第一數(shù)量閾值時(shí),在共享內(nèi)存池中添加新的共享內(nèi)存區(qū);當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量高于設(shè)定的第二數(shù)量閾值時(shí),刪除共享內(nèi) 存池中處于空閑狀態(tài)的共享內(nèi)存區(qū)。或當(dāng)空閑的共享內(nèi)存對(duì)象的比例低于設(shè)置的第一比例 閾值時(shí),在共享內(nèi)存池中添加新的共享內(nèi)存區(qū);當(dāng)空閑的共享內(nèi)存對(duì)象的比例高于設(shè)置的 第二比例閾值時(shí),刪除共享內(nèi)存池中處于空閑狀態(tài)的共享內(nèi)存區(qū)。以監(jiān)控共享內(nèi)存區(qū)中共享內(nèi)存對(duì)象的數(shù)量為例,在共享內(nèi)存池中維護(hù)監(jiān)聽共享內(nèi) 存分配情況的兩條水線低(low)水線和高(high)水線,當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量 低于low水線時(shí),共享內(nèi)存守護(hù)進(jìn)程就會(huì)觸發(fā)一次共享內(nèi)存區(qū)的添加請(qǐng)求,新創(chuàng)建一個(gè)共 享內(nèi)存區(qū)補(bǔ)充到該共享內(nèi)存池中,以優(yōu)化內(nèi)存的使用。當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量高 于high水線時(shí),共享內(nèi)存守護(hù)進(jìn)程就會(huì)觸發(fā)一次共享內(nèi)存區(qū)的回收請(qǐng)求,此時(shí)若有處于空 閑狀態(tài)的共享內(nèi)存區(qū)則將其回收,每次從共享內(nèi)存池的空閑狀態(tài)鏈表中銷毀一個(gè)共享內(nèi)存 區(qū),釋放其中占據(jù)的物理頁回到系統(tǒng)內(nèi)存中,以防止共享內(nèi)存區(qū)的空閑內(nèi)存太多而其他應(yīng) 用程序的內(nèi)存申請(qǐng)將出現(xiàn)申請(qǐng)不到的現(xiàn)象。步驟S24:將待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi)存區(qū)中空閑的共享內(nèi)存對(duì)象中。步驟S12中描述了共享內(nèi)存區(qū)的三種可能的狀態(tài),在選擇時(shí)優(yōu)先選擇的是處于部 分占用狀態(tài)的共享內(nèi)存區(qū)。而為了方便地管理共享內(nèi)存池中的共享內(nèi)存區(qū),快速實(shí)現(xiàn)共享 內(nèi)存對(duì)象的分配與釋放,在共享內(nèi)存池中針對(duì)每一類共享內(nèi)存區(qū)維護(hù)一條雙向鏈表。每個(gè) 共享內(nèi)存池包含三條鏈表完全占用鏈表、部分占用鏈表和空閑狀態(tài)鏈表。上述共享內(nèi)存池(SHM Pool)、共享內(nèi)存區(qū)(SHM)、共享內(nèi)存對(duì)象(SHMObject)三者 之間的關(guān)系如圖5所示。其中部分占用狀態(tài)的共享內(nèi)存區(qū)中的共享內(nèi)存對(duì)象有一部分已經(jīng) 占用另一部分尚未占用,完全占用狀態(tài)的共享內(nèi)存區(qū)中的都是占用的共享內(nèi)存對(duì)象(圖5 中點(diǎn)狀填充的共享內(nèi)存對(duì)象),而空閑的共享內(nèi)存中都是空閑的共享內(nèi)存對(duì)象(圖5中未填 充的共享內(nèi)存對(duì)象)。當(dāng)應(yīng)用程序向共享內(nèi)存池申請(qǐng)一個(gè)空閑內(nèi)存對(duì)象時(shí),就可以根據(jù)部分占用鏈表優(yōu) 先選擇部分占用狀態(tài)的共享內(nèi)存區(qū),如果不存在,在根據(jù)空閑狀態(tài)鏈表選擇空閑狀態(tài)的共 享內(nèi)存區(qū)。選擇了共享內(nèi)存區(qū)之后,根據(jù)所選擇的共享內(nèi)存區(qū)頭部包括的共享內(nèi)存對(duì)象起始 地址和第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo),查找到第一個(gè)空閑的共享內(nèi)存對(duì)象,存儲(chǔ)待傳 遞數(shù)據(jù)。具體在共享內(nèi)存區(qū)的頭部設(shè)置描述符,用于描述共享內(nèi)存區(qū)的共享內(nèi)存對(duì)象的起 始地址以及第一個(gè)空閑的共享內(nèi)存對(duì)象,如圖6所示。頭部描述符中包含的First obj即 為共享內(nèi)存對(duì)象的起始地址,free = 2即為第一個(gè)空閑的內(nèi)存對(duì)象的下標(biāo)。從圖6中的對(duì) 象描述符數(shù)組,可以看出,該共享內(nèi)存區(qū)包含的多個(gè)共享內(nèi)存對(duì)象中下標(biāo)為0、1、3、6、9的 共享內(nèi)存對(duì)象是已經(jīng)占用的,下標(biāo)為2、4、5、7、8的共享內(nèi)存對(duì)象是沒有占用的。其中空閑的共享內(nèi)存對(duì)象通過下標(biāo)數(shù)組管理以便分配,下標(biāo)數(shù)組中每個(gè)空閑共享 內(nèi)存對(duì)象的位置處存儲(chǔ)下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)。即在頭部指定了第一個(gè)空閑的 共享內(nèi)存對(duì)象的下標(biāo)后,通過一個(gè)下標(biāo)數(shù)組來維護(hù)和關(guān)聯(lián)后續(xù)的空閑共享內(nèi)存對(duì)象。即每 個(gè)空閑的共享內(nèi)存對(duì)象通過下標(biāo)的方式關(guān)聯(lián)下一個(gè)空閑的共享內(nèi)存對(duì)象,實(shí)現(xiàn)了 SHM內(nèi)部 空閑對(duì)象的簡(jiǎn)單關(guān)聯(lián),這種利用下標(biāo)數(shù)組來進(jìn)行空閑內(nèi)存對(duì)象維護(hù)的方法簡(jiǎn)單、有效,既提 高了內(nèi)存分配效率,又節(jié)約了內(nèi)存空間。
例如圖6中,在共享內(nèi)存區(qū)頭部描述符有一個(gè)指針指向第一個(gè)空閑的共享內(nèi)存對(duì) 象,還有一個(gè)第一空閑的共享內(nèi)存對(duì)象的下標(biāo)(free字段)指明了第一個(gè)空閑內(nèi)存對(duì)象的 下標(biāo)為2。以這個(gè)下標(biāo)為索引,在下標(biāo)為2的空閑的共享內(nèi)存對(duì)象的位置處又可以找到下一 個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)4,依此類推,一直到下標(biāo)為END為止,表明下面沒有空閑的 共享內(nèi)存對(duì)象了。如此,就構(gòu)成了一個(gè)簡(jiǎn)單的空閑共享內(nèi)存對(duì)象鏈表。步驟S25 將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài)。優(yōu)選的,將待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi)存區(qū)中空閑的共享內(nèi)存對(duì)象中并將 所選擇的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài),具體包括將將存儲(chǔ)了待傳遞數(shù)據(jù)的第一個(gè)空閑的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài),并根據(jù)設(shè) 置的空閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組確定存儲(chǔ)了代傳遞數(shù)據(jù)的共享內(nèi)存對(duì)象的下一個(gè)空閑 的共享內(nèi)存對(duì)象的下標(biāo),將共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)更新 為確定出的下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)。當(dāng)存儲(chǔ)了待傳遞數(shù)據(jù)的第一個(gè)空閑的共享內(nèi)存對(duì)象的下一個(gè)下標(biāo)為END時(shí),將共 享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)更新為空或更新為END,以標(biāo)識(shí)該 共享內(nèi)存區(qū)的共享內(nèi)存對(duì)象已被完全占用,不存在空閑的共享內(nèi)存對(duì)象了。沿用如圖6所示的共享內(nèi)存區(qū)的共享內(nèi)存區(qū)描述結(jié)構(gòu)示意圖。每次分配出去一個(gè) 對(duì)象,只要把共享內(nèi)存區(qū)頭部描述符中的free字段更新為下一個(gè)空閑的共享內(nèi)存對(duì)象的 下標(biāo)即可。優(yōu)選的,將待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi)存對(duì)象中之后,還包括若所選擇的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且存放待傳遞數(shù)據(jù)后所選 擇的共享內(nèi)存對(duì)象所在的共享內(nèi)存區(qū)的所有共享內(nèi)存對(duì)象已被全部占用,則將該共享內(nèi)存 區(qū)更改為完全占用狀態(tài),并從部分占用鏈表中轉(zhuǎn)移到完全占用鏈表中;若所選擇的共享內(nèi) 存區(qū)為空閑狀態(tài)的共享內(nèi)存區(qū),則將該共享內(nèi)存區(qū)更改為部分占用狀態(tài),并從空閑狀態(tài)鏈 表中轉(zhuǎn)移到部分占用鏈表中。也就是說,每從空閑狀態(tài)鏈表申請(qǐng)到一個(gè)空閑共享內(nèi)存對(duì)象,就將該共享內(nèi)存區(qū) 轉(zhuǎn)移到部分占用鏈表中。當(dāng)某個(gè)共享內(nèi)存區(qū)中的空閑對(duì)象全部分配出去之后,該共享內(nèi)存 區(qū)就從部分占用鏈表中轉(zhuǎn)移到完全占用鏈表中。步驟S26 根據(jù)待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存 區(qū)中獲取待傳遞數(shù)據(jù)的指針地址。具體實(shí)現(xiàn)過程參見步驟S15。步驟S27 第二進(jìn)程根據(jù)確定的指針地址獲取共享內(nèi)存區(qū)中的待傳遞數(shù)據(jù)。較佳的,上述跨區(qū)域數(shù)據(jù)傳輸方法,在第二進(jìn)程獲取待傳遞數(shù)據(jù)釋放共享內(nèi)存對(duì) 象后,還包括步驟S28 更新所選擇的共享內(nèi)存區(qū)中的空閑的共享內(nèi)存對(duì)象的下標(biāo)數(shù)組。具體可以有兩種方式實(shí)現(xiàn)釋放的共享內(nèi)存對(duì)象與已有的空閑共享內(nèi)存對(duì)象的關(guān) 聯(lián)方式一將共享內(nèi)存區(qū)頭部的第一個(gè)空閑的的共享內(nèi)存對(duì)象的下標(biāo)更換為釋放的 共享內(nèi)存對(duì)象的下標(biāo),將更改前共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo) 添加到下標(biāo)數(shù)組中上述釋放的的共享內(nèi)存對(duì)象的位置處,實(shí)現(xiàn)上述釋放的共享內(nèi)存對(duì)象指向的下一個(gè)空閑狀態(tài)的內(nèi)存對(duì)象為更改前共享內(nèi)存區(qū)的第一個(gè)空閑的共享內(nèi)存對(duì)象。方式二 將釋放的共享內(nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù)組中最后一個(gè)空閑狀態(tài)的共 享內(nèi)存對(duì)象的位置處,實(shí)現(xiàn)共享內(nèi)存區(qū)中最后一個(gè)空閑狀態(tài)的對(duì)共享內(nèi)存象指向的下一個(gè) 空閑狀態(tài)的共享內(nèi)存對(duì)象為釋放的共享內(nèi)存對(duì)象。以方式一為例,釋放一個(gè)共享內(nèi)存對(duì)象的時(shí)候,只要將這個(gè)共享內(nèi)存對(duì)象的下標(biāo) 設(shè)置為第一個(gè)空閑共享內(nèi)存對(duì)象的下標(biāo),然后再將共享內(nèi)存區(qū)域中原來的第一個(gè)空閑共享 內(nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù)組剛釋放的共享內(nèi)存對(duì)象的對(duì)應(yīng)位置處,就完成了共享內(nèi)存 對(duì)象的釋放。這個(gè)過程相當(dāng)于將共享內(nèi)存對(duì)象釋放到空閑鏈表的頭部。這種表示方法,使 得共享內(nèi)存對(duì)象的分配和釋放都要比直接采用鏈表操作快得多。優(yōu)選的,在第二進(jìn)程獲取所述待傳遞數(shù)據(jù)釋放共享內(nèi)存對(duì)象后,還包括若釋放的 共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且釋放共享內(nèi)存區(qū)后所在的共享內(nèi)存區(qū)的所有 共享內(nèi)存對(duì)象已被全部釋放,則將該共享內(nèi)存區(qū)更改為空閑狀態(tài),并從部分占用鏈表中轉(zhuǎn) 移到空閑狀態(tài)鏈表中;若所選擇的共享內(nèi)存區(qū)為完全占用狀態(tài)的共享內(nèi)存區(qū),則將該共享 內(nèi)存區(qū)更改為部分占用狀態(tài),并從完全占用鏈表中轉(zhuǎn)移到部分占用鏈表中。也就是說,如果共享內(nèi)存對(duì)象釋放回的是完全占用的共享內(nèi)存區(qū),該共享內(nèi)存區(qū) 就從完全占用鏈表轉(zhuǎn)移到部分占用鏈表中;如果內(nèi)存對(duì)象釋放回一個(gè)部分占用的共享內(nèi)存 區(qū)之后,該共享內(nèi)存區(qū)中所有對(duì)象都是空閑的共享內(nèi)存對(duì)象了,則該共享內(nèi)存區(qū)就從部分 占用鏈表轉(zhuǎn)移到空閑狀態(tài)鏈表中。根據(jù)本發(fā)明實(shí)施例提供的上述跨進(jìn)程數(shù)據(jù)傳輸方法可以構(gòu)建一種跨進(jìn)程數(shù)據(jù)傳 輸裝置,該裝置可以設(shè)置在任何具有多個(gè)進(jìn)程處理數(shù)據(jù)的網(wǎng)絡(luò)設(shè)備中,實(shí)現(xiàn)多個(gè)進(jìn)程之間 的數(shù)據(jù)傳輸,該裝置的結(jié)構(gòu)如圖7所示,包括內(nèi)存池選擇模塊10、區(qū)域選擇模塊20、傳輸控 制模塊30和地址確定模塊40。內(nèi)存池選擇模塊10,用于根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享 內(nèi)存池中共享內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放所述待傳遞數(shù)據(jù)的共享 內(nèi)存池;每個(gè)共享內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同。優(yōu)選的,上述內(nèi)存池選擇模塊10,具體包括比較單元101和區(qū)域選擇單元102。比較單元101,用于根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小,確定包含的共享內(nèi)存對(duì)象 的大小大于待傳遞數(shù)據(jù)的大小的共享內(nèi)存池。區(qū)域選擇單元102,用于從確定的共享內(nèi)存池中選擇一個(gè)共享內(nèi)存對(duì)象最小的共 享內(nèi)存池作為存放所述待傳遞數(shù)據(jù)的共享內(nèi)存池。區(qū)域選擇模塊20,用于從內(nèi)存池選擇模塊10選擇的內(nèi)存池中選擇一個(gè)處于可使 用狀態(tài)的共享內(nèi)存區(qū)。優(yōu)選的,上述區(qū)域選擇模塊20,具體包括查找單元201和執(zhí)行單元202。查找單元201,用于查找內(nèi)存池選擇模塊10選擇的內(nèi)存池中是否存在處于部分占 用狀態(tài)的共享內(nèi)存區(qū)。執(zhí)行單元202,用于當(dāng)選擇單元201查找到處于部分占用狀態(tài)的共享內(nèi)存區(qū)時(shí),從 處于部分占用狀態(tài)的共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi)存區(qū);否則,從空閑狀態(tài)的共享內(nèi)存區(qū) 中選擇一個(gè)共享內(nèi)存區(qū)。傳輸控制模塊30,用于將待傳遞數(shù)據(jù)存放至區(qū)域選擇模塊20所選擇的共享內(nèi)存
13區(qū)中空閑的共享內(nèi)存對(duì)象中并將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài)。優(yōu)選的,上述傳輸控制模塊30,具體包括數(shù)據(jù)傳輸單元301和第一標(biāo)識(shí)單元302。數(shù)據(jù)傳輸單元301,用于根據(jù)區(qū)域選擇模塊20選擇共享內(nèi)存區(qū)頭部包括的共享 內(nèi)存對(duì)象起始地址和第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo),查找到第一個(gè)空閑的共享內(nèi)存對(duì) 象,存儲(chǔ)待傳遞數(shù)據(jù)。第一標(biāo)識(shí)單元302,用于將存儲(chǔ)了待傳遞數(shù)據(jù)的第一個(gè)空閑的共享內(nèi)存對(duì)象標(biāo)記 為占用狀態(tài),并根據(jù)設(shè)置的空閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組確定存儲(chǔ)了代傳遞數(shù)據(jù)的共享內(nèi) 存對(duì)象的下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo),將共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享 內(nèi)存對(duì)象的下標(biāo)更新為確定出的下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)。優(yōu)選的,上述傳輸控制模塊30,還包括第二標(biāo)識(shí)單元303,用于若所選擇的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且 存放待傳遞數(shù)據(jù)后所選擇的共享內(nèi)存對(duì)象所在的共享內(nèi)存區(qū)的所有共享內(nèi)存對(duì)象已被全 部占用,則將該共享內(nèi)存區(qū)更改為完全占用狀態(tài),并從部分占用鏈表中轉(zhuǎn)移到完全占用鏈 表中;若所選擇的共享內(nèi)存區(qū)為空閑狀態(tài)的共享內(nèi)存區(qū),將待傳遞數(shù)據(jù)存放至所選擇的共 享內(nèi)存對(duì)象中之后,將該共享內(nèi)存區(qū)更改為部分占用狀態(tài),并從空閑狀態(tài)鏈表中轉(zhuǎn)移到部 分占用鏈表中。優(yōu)選的,上述傳輸控制模塊30,還包括第三標(biāo)識(shí)單元304,用于在第二進(jìn)程獲取待傳遞數(shù)據(jù)釋放共享內(nèi)存對(duì)象后,更新共 享內(nèi)存區(qū)中的空閑內(nèi)存對(duì)象的下標(biāo)數(shù)組。具體包括將共享內(nèi)存區(qū)頭部的第一個(gè)空閑的的 共享內(nèi)存對(duì)象的下標(biāo)更換為釋放的共享內(nèi)存對(duì)象的下標(biāo),將更改前共享內(nèi)存區(qū)頭部包括的 第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)添加為下標(biāo)數(shù)組中上述釋放的的共享內(nèi)存對(duì)象的下標(biāo) 的后一位下標(biāo),實(shí)現(xiàn)上述釋放的共享內(nèi)存對(duì)象指向的下一個(gè)空閑狀態(tài)的內(nèi)存對(duì)象為更改前 共享內(nèi)存區(qū)的第一個(gè)空閑的共享內(nèi)存對(duì)象;或?qū)⑨尫诺墓蚕韮?nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù) 組的末尾,實(shí)現(xiàn)共享內(nèi)存區(qū)中最后一個(gè)空閑狀態(tài)的共享內(nèi)存對(duì)象指向的下一個(gè)空閑狀態(tài)的 共享內(nèi)存對(duì)象為釋放的共享內(nèi)存對(duì)象。優(yōu)選的,上述傳輸控制模塊30,還包括第四標(biāo)識(shí)單元305,用于在第二進(jìn)程獲取待傳遞數(shù)據(jù)釋放所述共享內(nèi)存對(duì)象后,若 釋放的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且釋放共享內(nèi)存區(qū)后所在的共享內(nèi)存區(qū) 的所有共享內(nèi)存對(duì)象已被全部釋放,則將該共享內(nèi)存區(qū)更改為空閑狀態(tài),并從部分占用鏈 表中轉(zhuǎn)移到空閑狀態(tài)鏈表中;若所選擇的共享內(nèi)存區(qū)為完全占用狀態(tài)的共享內(nèi)存區(qū),則將 該共享內(nèi)存區(qū)更改為部分占用狀態(tài),并從完全占用鏈表中轉(zhuǎn)移到部分占用鏈表中。地址確定模塊40,用于根據(jù)數(shù)據(jù)傳遞模塊存儲(chǔ)的待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移 地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲取所述待傳遞數(shù)據(jù)的指針地址。優(yōu)選的,上述地址確定模塊40,具體用于根據(jù)待傳遞數(shù)據(jù)第一進(jìn)程中的指針地 址和第一進(jìn)程的基址,確定待傳遞數(shù)據(jù)在所述第一進(jìn)程中的偏移地址;根據(jù)該偏移地址和 第二進(jìn)程的基址,確定待傳遞數(shù)據(jù)在第二進(jìn)程中的指針地址。優(yōu)選的,上述跨進(jìn)程數(shù)據(jù)傳輸裝置,還包括狀態(tài)監(jiān)控模塊50和區(qū)域調(diào)整模塊60。狀態(tài)監(jiān)控模塊50,用于監(jiān)控共享內(nèi)存池中處于空閑的共享內(nèi)存對(duì)象的數(shù)量或比 例。
區(qū)域調(diào)整模塊60,用于當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量低于設(shè)定的第一數(shù)量閾值或 空閑的共享內(nèi)存對(duì)象的比例低于設(shè)置的第一比例閾值時(shí),在共享內(nèi)存池中添加新的共享內(nèi) 存區(qū);當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量高于設(shè)定的第二數(shù)量閾值或空閑的共享內(nèi)存對(duì)象的比 例高于設(shè)置的第二比例閾值時(shí),刪除共享內(nèi)存池中處于空閑狀態(tài)的共享內(nèi)存區(qū)。本發(fā)明實(shí)施例提供的上述跨區(qū)域數(shù)據(jù)傳輸方法,是一個(gè)通用的、快速實(shí)現(xiàn)數(shù)據(jù)報(bào) 文跨進(jìn)程傳遞的方法。除了應(yīng)用于協(xié)議數(shù)據(jù)報(bào)文的跨進(jìn)程傳輸以外,還可以應(yīng)用于其他各 種系統(tǒng)數(shù)據(jù)的跨進(jìn)程傳輸,在需要大批量數(shù)據(jù)傳輸?shù)南到y(tǒng)中應(yīng)用時(shí)具有明顯的優(yōu)勢(shì)。本發(fā) 明實(shí)施例提供的上述方法中包含的多個(gè)共享內(nèi)存區(qū)的管理和配置策略,可應(yīng)用于系統(tǒng)中多 個(gè)共享內(nèi)存區(qū)的管理以外,還可應(yīng)用于進(jìn)程內(nèi)部的堆內(nèi)存管理。本發(fā)明實(shí)施例提供的上述跨區(qū)域數(shù)據(jù)傳輸方法及裝置,通過將相同大小的共享內(nèi) 存對(duì)象設(shè)置在一個(gè)共享內(nèi)存池中,實(shí)現(xiàn)了在第一進(jìn)程需要傳遞數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)大小選擇 共享內(nèi)存池,使用其中的共享內(nèi)存對(duì)象,從而使得在需要傳輸數(shù)據(jù)時(shí),能夠快速查找到合適 的共享內(nèi)存區(qū),不必再遍歷所有的共享內(nèi)存區(qū),方便了進(jìn)程間的數(shù)據(jù)傳遞,在實(shí)現(xiàn)數(shù)據(jù)傳輸 零拷貝的情況下,減少了數(shù)據(jù)傳輸時(shí)查找的時(shí)延,提高了報(bào)文處理效率。該方法實(shí)現(xiàn)數(shù)據(jù) 的跨進(jìn)程傳輸,既高效又可靠,很好的解決了進(jìn)程間數(shù)據(jù)共享的低效問題,在傳遞諸如使用 IPv6協(xié)議的報(bào)文數(shù)據(jù)量可能非常龐大的數(shù)據(jù)包時(shí),優(yōu)勢(shì)尤為明顯。將相同大小的共享內(nèi)存對(duì)象統(tǒng)一管理、分配,可以從很大程度上避免設(shè)置很多的 共享內(nèi)存區(qū),節(jié)約了內(nèi)存資源;優(yōu)先使用處于部分占用狀態(tài)的共享內(nèi)存區(qū),從而使得處于空 閑狀態(tài)的共享內(nèi)存區(qū)可以處于可刪除狀態(tài),便于創(chuàng)建和刪除操作的執(zhí)行,提高共享內(nèi)存區(qū) 中的共享內(nèi)存對(duì)象的利用率,且能夠快速實(shí)現(xiàn)內(nèi)存分配,提高了內(nèi)存分配和釋放效率,并有 效地節(jié)約系統(tǒng)內(nèi)存,從而大幅提高內(nèi)存利用率,大大提高了系統(tǒng)的處理性能,在對(duì)報(bào)文處理 性能和內(nèi)存使用要求較高的網(wǎng)絡(luò)嵌入式系統(tǒng)中尤為適用。上述方式將協(xié)議報(bào)文的傳輸時(shí)間和內(nèi)存空間利用率都有較高提升,因此可在網(wǎng)絡(luò) 嵌入式系統(tǒng)中大幅度提高應(yīng)用協(xié)議的報(bào)文處理能力。在空閑的共享內(nèi)存對(duì)象不夠用時(shí),可 以及時(shí)添加,在空閑的共享內(nèi)存對(duì)象比較多時(shí),可以及時(shí)的釋放,同時(shí)避免了頻繁的共享內(nèi) 存區(qū)的創(chuàng)建和刪除,也避免了過多的占用內(nèi)存空間導(dǎo)致占據(jù)的物理頁將一直得不到真正釋 放,無法供應(yīng)用程序申請(qǐng)的問題。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
1權(quán)利要求
1.一種跨進(jìn)程數(shù)據(jù)傳輸方法,其特征在于,包括根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi)存池中共享內(nèi)存區(qū)所包含 的共享內(nèi)存對(duì)象的大小,選擇適于存放所述待傳遞數(shù)據(jù)的共享內(nèi)存池;每個(gè)所述共享內(nèi)存 池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同;從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū),將所述待傳遞數(shù)據(jù)存放至 所選擇的共享內(nèi)存區(qū)中空閑的共享內(nèi)存對(duì)象中并將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占 用狀態(tài);根據(jù)所述待傳遞數(shù)據(jù)在所述第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲 取所述待傳遞數(shù)據(jù)的指針地址。
2.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和 預(yù)先創(chuàng)建的各共享內(nèi)存池中共享內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放所述 待傳遞數(shù)據(jù)的共享內(nèi)存池,包括根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小,確定包含的共享內(nèi)存對(duì)象的大小大于待傳遞數(shù)據(jù) 的大小的共享內(nèi)存池;從確定的共享內(nèi)存池中選擇一個(gè)共享內(nèi)存對(duì)象最小的共享內(nèi)存池作為存放所述待傳 遞數(shù)據(jù)的共享內(nèi)存池。
3.如權(quán)利要求1所述的方法,其特征在于,根據(jù)共享內(nèi)存區(qū)中的共享內(nèi)存對(duì)象是否完 全被占用,所述共享內(nèi)存池中的共享內(nèi)存區(qū)的狀態(tài)包括完全占用狀態(tài)、部分占用狀態(tài)和空 閑狀態(tài);通過設(shè)置的完全占用鏈表、部分占用鏈表和空閑狀態(tài)鏈表維護(hù)處于完全占用狀態(tài)、部 分占用狀態(tài)和空閑狀態(tài)的共享內(nèi)存區(qū)。
4.如權(quán)利要求3所述的方法,其特征在于,所述從選擇的內(nèi)存池中選擇一個(gè)處于可使 用狀態(tài)的共享內(nèi)存區(qū),具體包括查找選擇的內(nèi)存池中是否存在處于部分占用狀態(tài)的共享內(nèi)存區(qū);若是,從處于部分占用狀態(tài)的共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi)存區(qū);否則,從空閑狀態(tài)的 共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi)存區(qū)。
5.如權(quán)利要求3所述的方法,其特征在于,將所述待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi) 存區(qū)中空閑的共享內(nèi)存對(duì)象中并將所選擇的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài),具體包括根據(jù)所選擇的共享內(nèi)存區(qū)頭部包括的共享內(nèi)存對(duì)象起始地址和第一個(gè)空閑的共享內(nèi) 存對(duì)象的下標(biāo),查找到第一個(gè)空閑的共享內(nèi)存對(duì)象,存儲(chǔ)所述待傳遞數(shù)據(jù);將存儲(chǔ)了待傳遞數(shù)據(jù)的第一個(gè)空閑的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài),并根據(jù)設(shè)置的空 閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組確定存儲(chǔ)了代傳遞數(shù)據(jù)的共享內(nèi)存對(duì)象的下一個(gè)空閑的共享 內(nèi)存對(duì)象的下標(biāo),將共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)更新為確定 出的下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo);所述下標(biāo)數(shù)組中每個(gè)空閑共享內(nèi)存對(duì)象的位置處 存儲(chǔ)下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)。
6.如權(quán)利要求3所述的方法,其特征在于,將所述待傳遞數(shù)據(jù)存放至所選擇的共享內(nèi) 存對(duì)象中之后,還包括若所選擇的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且存放所述待傳遞數(shù)據(jù)后所選 擇的共享內(nèi)存對(duì)象所在的共享內(nèi)存區(qū)的所有共享內(nèi)存對(duì)象已被全部占用,則將該共享內(nèi)存區(qū)更改為完全占用狀態(tài),并從部分占用鏈表中轉(zhuǎn)移到完全占用鏈表中;若所選擇的共享內(nèi)存區(qū)為空閑狀態(tài)的共享內(nèi)存區(qū),則將該共享內(nèi)存區(qū)更改為部分占用 狀態(tài),并從空閑狀態(tài)鏈表中轉(zhuǎn)移到部分占用鏈表中。
7.如權(quán)利要求3所述的方法,其特征在于,還包括在第二進(jìn)程獲取所述待傳遞數(shù)據(jù)釋 放所述共享內(nèi)存對(duì)象后,更新共享內(nèi)存區(qū)域中空閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組,具體包括將共享內(nèi)存區(qū)頭部的第一個(gè)空閑的的共享內(nèi)存對(duì)象的下標(biāo)更換為釋放的共享內(nèi)存對(duì) 象的下標(biāo),將更改前共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象下標(biāo)添加到下標(biāo)數(shù) 組中上述釋放的的共享內(nèi)存對(duì)象的位置處;或?qū)⑨尫诺墓蚕韮?nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù)組中最后一個(gè)空閑狀態(tài)的共享內(nèi)存對(duì)象 的位置處。
8.如權(quán)利要求3所述的方法,其特征在于,在第二進(jìn)程獲取所述待傳遞數(shù)據(jù)釋放所述 共享內(nèi)存對(duì)象后,還包括若釋放的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且釋放共享內(nèi)存區(qū)后所在的共享 內(nèi)存區(qū)的所有共享內(nèi)存對(duì)象已被全部釋放,則將該共享內(nèi)存區(qū)更改為空閑狀態(tài),并從部分 占用鏈表中轉(zhuǎn)移到空閑狀態(tài)鏈表中;若所選擇的共享內(nèi)存區(qū)為完全占用狀態(tài)的共享內(nèi)存區(qū),則將該共享內(nèi)存區(qū)更改為部分 占用狀態(tài),并從完全占用鏈表中轉(zhuǎn)移到部分占用鏈表中。
9.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述待傳遞數(shù)據(jù)在所述第一進(jìn) 程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲取所述待傳遞數(shù)據(jù)的指針地址,具體包 括根據(jù)所述待傳遞數(shù)據(jù)第一進(jìn)程中的指針地址和第一進(jìn)程的基址,確定所述待傳遞數(shù)據(jù) 在所述第一進(jìn)程中的偏移地址;根據(jù)該偏移地址和第二進(jìn)程的基址,確定所述待傳遞數(shù)據(jù)在第二進(jìn)程中的指針地址。
10.如權(quán)利要求1-9任一所述的方法,其特征在于,還包括監(jiān)控所述共享內(nèi)存池中處 于空閑的共享內(nèi)存對(duì)象的數(shù)量或比例;當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量低于設(shè)定的第一數(shù)量閾值或空閑的共享內(nèi)存對(duì)象的比 例低于設(shè)置的第一比例閾值時(shí),在所述共享內(nèi)存池中添加新的共享內(nèi)存區(qū);當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量高于設(shè)定的第二數(shù)量閾值或空閑的共享內(nèi)存對(duì)象的比 例高于設(shè)置的第二比例閾值時(shí),刪除所述共享內(nèi)存池中處于空閑狀態(tài)的共享內(nèi)存區(qū)。
11.一種跨進(jìn)程數(shù)據(jù)傳輸裝置,其特征在于,包括內(nèi)存池選擇模塊,用于根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和預(yù)先創(chuàng)建的各共享內(nèi)存 池中共享內(nèi)存區(qū)所包含的共享內(nèi)存對(duì)象的大小,選擇適于存放所述待傳遞數(shù)據(jù)的共享內(nèi)存 池;每個(gè)所述共享內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同;區(qū)域選擇模塊,用于從所述內(nèi)存池選擇模塊選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài) 的共享內(nèi)存區(qū);傳輸控制模塊,用于將所述待傳遞數(shù)據(jù)存放至所述區(qū)域選擇模塊選擇的共享內(nèi)存區(qū)中 空閑的共享內(nèi)存對(duì)象中并將存放數(shù)據(jù)后的共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài);地址確定模塊,用于根據(jù)所述數(shù)據(jù)傳遞模塊存儲(chǔ)的待傳遞數(shù)據(jù)在所述第一進(jìn)程中的偏 移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲取所述待傳遞數(shù)據(jù)的指針地址。
12.如權(quán)利要求11所述的裝置,其特征在于,所述內(nèi)存池選擇模塊,具體包括比較單元,用于根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小,確定包含的共享內(nèi)存對(duì)象的大小 大于待傳遞數(shù)據(jù)的大小的共享內(nèi)存池;區(qū)域選擇單元,用于從確定的共享內(nèi)存池中選擇一個(gè)共享內(nèi)存對(duì)象最小的共享內(nèi)存池 作為存放所述待傳遞數(shù)據(jù)的共享內(nèi)存池。
13.如權(quán)利要求11所述的裝置,其特征在于,所述區(qū)域選擇模塊,具體包括查找單元,用于查找所述內(nèi)存池選擇模塊選擇的內(nèi)存池中是否存在處于部分占用狀態(tài) 的共享內(nèi)存區(qū);執(zhí)行單元,用于當(dāng)所述選擇單元查找到處于部分占用狀態(tài)的共享內(nèi)存區(qū)時(shí),從處于部 分占用狀態(tài)的共享內(nèi)存區(qū)中選擇一個(gè)共享內(nèi)存區(qū);否則,從空閑狀態(tài)的共享內(nèi)存區(qū)中選擇 一個(gè)共享內(nèi)存區(qū)。
14.如權(quán)利要求11所述的裝置,其特征在于,所述傳輸控制模塊,具體包括數(shù)據(jù)傳輸單元,用于根據(jù)所述區(qū)域選擇模塊選擇的共享內(nèi)存區(qū)頭部包括的共享內(nèi)存對(duì) 象起始地址和第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo),查找到第一個(gè)空閑的共享內(nèi)存對(duì)象,存 儲(chǔ)所述待傳遞數(shù)據(jù);第一標(biāo)識(shí)單元,用于將存儲(chǔ)了待傳遞數(shù)據(jù)的第一個(gè)空閑的共享內(nèi)存對(duì)象標(biāo)記為占用狀 態(tài),并根據(jù)設(shè)置的空閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組確定存儲(chǔ)了代傳遞數(shù)據(jù)的共享內(nèi)存對(duì)象的 下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo),將共享內(nèi)存區(qū)頭部包括的第一個(gè)空閑的共享內(nèi)存對(duì)象 的下標(biāo)更新為確定出的下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo);所述下標(biāo)數(shù)組中每個(gè)空閑共享 內(nèi)存對(duì)象的位置處存儲(chǔ)下一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)。
15.如權(quán)利要求14所述的裝置,其特征在于,所述傳輸控制模塊,還包括第二標(biāo)識(shí)單元,用于若所選擇的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且存放所 述待傳遞數(shù)據(jù)后所選擇的共享內(nèi)存對(duì)象所在的共享內(nèi)存區(qū)的所有共享內(nèi)存對(duì)象已被全部 占用,則將該共享內(nèi)存區(qū)更改為完全占用狀態(tài),并從部分占用鏈表中轉(zhuǎn)移到完全占用鏈表 中;若所選擇的共享內(nèi)存區(qū)為空閑狀態(tài)的共享內(nèi)存區(qū),將所述待傳遞數(shù)據(jù)存放至所選擇的 共享內(nèi)存對(duì)象中之后,將該共享內(nèi)存區(qū)更改為部分占用狀態(tài),并從空閑狀態(tài)鏈表中轉(zhuǎn)移到 部分占用鏈表中。
16.如權(quán)利要求14所述的裝置,其特征在于,所述傳輸控制模塊,還包括第三標(biāo)識(shí)單元,用于在第二進(jìn)程獲取所述待傳遞數(shù)據(jù)釋放所述共享內(nèi)存對(duì)象后,更新 共享內(nèi)存區(qū)域中空閑共享內(nèi)存對(duì)象的下標(biāo)數(shù)組;具體包括將共享內(nèi)存區(qū)頭部的第一個(gè)空 閑的的共享內(nèi)存對(duì)象的下標(biāo)更換為釋放的共享內(nèi)存對(duì)象的下標(biāo),將更改前共享內(nèi)存區(qū)頭部 包括的第一個(gè)空閑的共享內(nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù)組中上述釋放的的共享內(nèi)存對(duì)象 的位置處;或?qū)⑨尫诺墓蚕韮?nèi)存對(duì)象的下標(biāo)添加到下標(biāo)數(shù)組中最后一個(gè)空閑狀態(tài)的共享內(nèi) 存對(duì)象指向的下一個(gè)空閑狀態(tài)的共享內(nèi)存對(duì)象的位置處。
17.如權(quán)利要求14所述的裝置,其特征在于,所述數(shù)據(jù)傳輸模塊,還包括第四標(biāo)識(shí)單元,用于在第二進(jìn)程獲取所述待傳遞數(shù)據(jù)釋放所述共享內(nèi)存對(duì)象后,若釋 放的共享內(nèi)存區(qū)為部分占用狀態(tài)的共享內(nèi)存區(qū),且釋放共享內(nèi)存區(qū)后所在的共享內(nèi)存區(qū)的 所有共享內(nèi)存對(duì)象已被全部釋放,則將該共享內(nèi)存區(qū)更改為空閑狀態(tài),并從部分占用鏈表 中轉(zhuǎn)移到空閑狀態(tài)鏈表中;若所選擇的共享內(nèi)存區(qū)為完全占用狀態(tài)的共享內(nèi)存區(qū),則將該共享內(nèi)存區(qū)更改為部分占用狀態(tài),并從完全占用鏈表中轉(zhuǎn)移到部分占用鏈表中。
18.如權(quán)利要求11所述的裝置,其特征在于,所述地址確定模塊,具體用于根據(jù)所述待傳遞數(shù)據(jù)第一進(jìn)程中的指針地址和第一進(jìn)程的基址,確定所述待傳遞數(shù)據(jù) 在所述第一進(jìn)程中的偏移地址;根據(jù)該偏移地址和第二進(jìn)程的基址,確定所述待傳遞數(shù)據(jù)在第二進(jìn)程中的指針地址。
19.如權(quán)利要求11-18任一所述的裝置,其特征在于,還包括狀態(tài)監(jiān)控模塊,用于監(jiān)控所述共享內(nèi)存池中處于空閑的共享內(nèi)存對(duì)象的數(shù)量或比例; 區(qū)域調(diào)整模塊,用于當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量低于設(shè)定的第一數(shù)量閾值或空閑的 共享內(nèi)存對(duì)象的比例低于設(shè)置的第一比例閾值時(shí),在所述共享內(nèi)存池中添加新的共享內(nèi)存 區(qū);當(dāng)空閑的共享內(nèi)存對(duì)象的數(shù)量高于設(shè)定的第二數(shù)量閾值或空閑的共享內(nèi)存對(duì)象的比例 高于設(shè)置的第二比例閾值時(shí),刪除所述共享內(nèi)存池中處于空閑狀態(tài)的共享內(nèi)存區(qū)。
20.一種網(wǎng)絡(luò)設(shè)備,其特征在于,包括如權(quán)利要求11-19任一所述的跨進(jìn)程數(shù)據(jù)傳輸裝置。
全文摘要
本發(fā)明公開了一種跨進(jìn)程數(shù)據(jù)傳輸方法、裝置及網(wǎng)絡(luò)設(shè)備,該方法包括根據(jù)第一進(jìn)程中待傳遞數(shù)據(jù)的大小和各共享內(nèi)存池中共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小,選擇適于存放待傳遞數(shù)據(jù)的共享內(nèi)存池;每個(gè)共享內(nèi)存池中的各共享內(nèi)存區(qū)包含的共享內(nèi)存對(duì)象的大小相同;從選擇的內(nèi)存池中選擇一個(gè)處于可使用狀態(tài)的共享內(nèi)存區(qū),將待傳遞數(shù)據(jù)存放至其中空閑的共享內(nèi)存對(duì)象中并將該共享內(nèi)存對(duì)象標(biāo)記為占用狀態(tài);根據(jù)待傳遞數(shù)據(jù)在第一進(jìn)程中的偏移地址,確定第二進(jìn)程從共享內(nèi)存區(qū)中獲取待傳遞數(shù)據(jù)的指針地址。根據(jù)數(shù)據(jù)大小選擇合適的共享內(nèi)存池中的共享內(nèi)存對(duì)象,提高了內(nèi)存使用率,避免了頻繁的共享內(nèi)存的創(chuàng)建和刪除,提高了系統(tǒng)性能。
文檔編號(hào)G06F9/54GK102004675SQ201010540148
公開日2011年4月6日 申請(qǐng)日期2010年11月11日 優(yōu)先權(quán)日2010年11月11日
發(fā)明者劉忠東, 劉茗, 葉建興 申請(qǐng)人:福建星網(wǎng)銳捷網(wǎng)絡(luò)有限公司