一種將共享全局變量共享的方法和多處理裝置制造方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例公開(kāi)了一種將共享全局變量共享的方法和多處理裝置,用于提高多處理裝置執(zhí)行任務(wù)程序的效率,降低數(shù)據(jù)處理時(shí)延。本發(fā)明實(shí)施例方法包括:當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,該第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段,該第一虛擬地址為該第一數(shù)據(jù)段的虛擬地址,為該共享全局變量分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為第一物理地址,然后建立第一映射關(guān)系,該第一映射關(guān)系為第一物理地址與第一虛擬地址之間的映射關(guān)系,每當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向該進(jìn)程擴(kuò)展該第一地址映射。
【專(zhuān)利說(shuō)明】一種將共享全局變量共享的方法和多處理裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種在多個(gè)進(jìn)程間將共享全局變量共享的方 法和多處理裝置。
【背景技術(shù)】
[0002] 在嵌入式并行多處理系統(tǒng)中,為了提高數(shù)據(jù)吞吐率,降低數(shù)據(jù)處理時(shí)延,常常需要 幾個(gè)處理單元一起完成一項(xiàng)任務(wù),它們運(yùn)行相同的程序,分擔(dān)處理輸入數(shù)據(jù)。另一方面,由 于輸入數(shù)據(jù)之間,以及輸入數(shù)據(jù)的處理過(guò)程之間存在相關(guān)性,這些處理單元還需要在任務(wù) 的某些環(huán)節(jié)進(jìn)行協(xié)作。如圖1所示,處理單元之間可以在協(xié)作環(huán)節(jié)交換數(shù)據(jù)處理的中間結(jié) 果,也可以對(duì)數(shù)據(jù)處理過(guò)程進(jìn)行同步。
[0003] 為了在嵌入式并行多處理系統(tǒng)中實(shí)現(xiàn)處理單元之間的分擔(dān)與協(xié)作,完成任務(wù)的程 序通常使用私有全局變量來(lái)控制每個(gè)處理單元的本地處理過(guò)程,使用共享全局變量來(lái)控制 處理單元之間的協(xié)作處理過(guò)程。私有全局變量在每個(gè)處理單元上都有一個(gè)同名副本,每個(gè) 副本被對(duì)應(yīng)處理單元獨(dú)占訪問(wèn);共享全局變量在整個(gè)并行多處理系統(tǒng)中只有一個(gè)副本,被 所有處理單元共同訪問(wèn)。
[0004] 在嵌入式并行多處理系統(tǒng)中,為了保證多個(gè)處理單元對(duì)任務(wù)的并行處理,處理單 元需要與操作系統(tǒng)的調(diào)度單位一一對(duì)應(yīng),在將任務(wù)程序承載于多個(gè)進(jìn)程時(shí),該操作系統(tǒng)的 調(diào)度單位為進(jìn)程,即這種情況中,進(jìn)程與處理單元一一對(duì)應(yīng)。
[0005] 如果將任務(wù)程序承載于多個(gè)進(jìn)程,因?yàn)槟壳安恢С侄鄠€(gè)進(jìn)程之間共享全局變量, 因此需要用進(jìn)程間的共享內(nèi)存替代共享全局變量,將任務(wù)程序中對(duì)共享全局變量的訪問(wèn)改 為通過(guò)指針變量對(duì)共享內(nèi)存的訪問(wèn)。
[0006] 然而,任務(wù)程序通過(guò)每個(gè)進(jìn)程的指針變量,訪問(wèn)替代共享全局變量的共享內(nèi)存。這 種方式實(shí)際上采用了間接內(nèi)存訪問(wèn),即先讀取指針變量的值,然后將指針變量的值當(dāng)作地 址再訪問(wèn)共享全局變量。相對(duì)于直接訪問(wèn)共享全局變量,通過(guò)指針變量訪問(wèn)共享內(nèi)存增加 了任務(wù)程序訪問(wèn)內(nèi)存的開(kāi)銷(xiāo)。對(duì)于有著大量共享全局變量,且需要頻繁訪問(wèn)這些共享全局 變量的任務(wù)程序,用進(jìn)程間共享內(nèi)存替代共享全局變量會(huì)顯著降低程序執(zhí)行效率,進(jìn)而增 大數(shù)據(jù)處理時(shí)延。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明實(shí)施例提供了一種將共享全局變量共享的方法和多處理裝置,用于提高多 處理裝置執(zhí)行任務(wù)程序的效率,降低數(shù)據(jù)處理時(shí)延。
[0008] 本發(fā)明實(shí)施例第一方面提供了一種將共享全局變量共享的方法,包括:
[0009] 當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為所述第一數(shù)據(jù) 段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段;
[0010] 為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物理地址為第一物 理地址; toon] 拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址映射,所述第一 地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系;
[0012] 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
[0013] 結(jié)合本發(fā)明實(shí)施例的第一方面,本發(fā)明實(shí)施例第一方面的第一種實(shí)現(xiàn)方式中,所 述當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí)的步驟之前還包括:
[0014] 根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表示用于執(zhí)行所述 任務(wù)程序的所有進(jìn)程的集合;
[0015] 按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程。
[0016] 結(jié)合本發(fā)明實(shí)施例第一方面的第一種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例第一方面的第二種 實(shí)現(xiàn)方式中,所述按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程的步驟之前還包括:
[0017] 當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛擬地址為所述第二數(shù)據(jù) 段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的數(shù)據(jù)段;
[0018] 備份第二數(shù)據(jù)段的初始值;
[0019] 所述當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí)的步驟之后還包括:
[0020] 在所述進(jìn)程中為所述私有全局變量分配第二物理內(nèi)存,所述第二物理內(nèi)存的物理 地址為第二物理地址,所述第二物理地址與所述第一物理地址不同;
[0021] 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所述進(jìn)程中建立第二地 址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地址之間的映射關(guān)系。
[0022] 結(jié)合本發(fā)明實(shí)施例第一方面的第二種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例第一方面的第三種 實(shí)現(xiàn)方式中,所述方法還包括:
[0023] 當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程;
[0024] 當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述私有全局變量分配第 三物理內(nèi)存,所述第三物理內(nèi)存的物理地址為第三物理地址,所述第三物理地址與所述第 一物理地址和第二物理地址不同;
[0025] 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第三物理內(nèi)存中,在所述新增的進(jìn)程中建立 第三地址映射,所述第三地址映射表示所述第二虛擬地址與所述第三物理地址的映射關(guān) 系;
[0026] 向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
[0027] 結(jié)合本發(fā)明實(shí)施例第一方面的第二種實(shí)現(xiàn)方式或第三種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例 第一方面的第四種實(shí)現(xiàn)方式中,所述方法還包括:
[0028] 當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程;
[0029] 當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地址映射和第四地 址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān)系,所述第四物理 地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程中分配給私有全局 變量的物理內(nèi)存;
[0030] 釋放所述第四物理內(nèi)存。
[0031] 本發(fā)明實(shí)施例第二方面提供了一種多處理裝置,包括:
[0032] 第一獲取模塊,用于當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地 址為所述第一數(shù)據(jù)段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù) 段;
[0033] 第一分配模塊,用于為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存 的物理地址為第一物理地址;
[0034] 第一建立模塊,用于拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一 地址映射,所述第一地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān) 系;
[0035] 第一擴(kuò)展模塊,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
[0036] 結(jié)合本發(fā)明實(shí)施例的第二方面,本發(fā)明實(shí)施例第二方面的第一種實(shí)現(xiàn)方式中,所 述多處理裝置還包括:
[0037] 確定模塊,用于根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表 示用于執(zhí)行所述任務(wù)程序的所有進(jìn)程的集合;
[0038] 創(chuàng)建模塊,用于按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程。
[0039] 結(jié)合本發(fā)明實(shí)施例第二方面的第一種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例第二方面的第二種 實(shí)現(xiàn)方式中,所述多處理裝置還包括:
[0040] 第二獲取模塊,用于當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛擬地 址為所述第二數(shù)據(jù)段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的 數(shù)據(jù)段;
[0041] 備份模塊,用于備份第二數(shù)據(jù)段的初始值;
[0042] 第二分配模塊,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),在所述進(jìn)程中為所述私有全局變量分配 第二物理內(nèi)存,所述第二物理內(nèi)存的物理地址為第二物理地址,所述第二物理地址與所述 第一物理地址不同;
[0043] 第二建立模塊,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所 述進(jìn)程中建立第二地址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地 址之間的映射關(guān)系。
[0044] 結(jié)合本發(fā)明實(shí)施例第二方面的第二種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例第二方面的第三種 實(shí)現(xiàn)方式中,所述多處理裝置還包括:
[0045] 增加模塊,用于當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程;
[0046] 第三分配模塊,用于當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述 私有全局變量分配第三物理內(nèi)存,所述第三物理內(nèi)存的物理地址為第三物理地址,所述第 三物理地址與所述第一物理地址和第二物理地址不同;
[0047] 第三建立模塊,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第三物理內(nèi)存中,在所 述新增的進(jìn)程中建立第三地址映射,所述第三地址映射表示所述第二虛擬地址與所述第三 物理地址的映射關(guān)系;
[0048] 第二擴(kuò)展模塊,用于向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
[0049] 結(jié)合本發(fā)明實(shí)施例第二方面的第二種實(shí)現(xiàn)方式或第三種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例 第二方面的第四種實(shí)現(xiàn)方式中,所述多處理裝置還包括:
[0050] 刪除模塊,用于當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程;
[0051] 解除模塊,用于當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地 址映射和第四地址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān) 系,所述第四物理地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程 中分配給私有全局變量的物理內(nèi)存;
[0052] 釋放模塊,用于釋放所述第四物理內(nèi)存。
[0053] 從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):本發(fā)明實(shí)施例中當(dāng)識(shí)別 到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,該第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù) 據(jù)段,該第一虛擬地址為該第一數(shù)據(jù)段的虛擬地址,為該共享全局變量分配第一物理內(nèi)存, 該第一物理內(nèi)存的物理地址為第一物理地址,然后建立第一映射關(guān)系,該第一映射關(guān)系為 第一物理地址與第一虛擬地址之間的映射關(guān)系,每當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向該進(jìn)程擴(kuò)展該第 一地址映射,這樣當(dāng)創(chuàng)建有多個(gè)進(jìn)程時(shí),每個(gè)進(jìn)程中都被擴(kuò)展了該第一地址映射,在任一進(jìn) 程中,當(dāng)需要訪問(wèn)該共享全局變量時(shí),只需要訪問(wèn)該第一虛擬地址,即可根據(jù)該第一地址映 射訪問(wèn)到存放有該共享全局變量的第一物理內(nèi)存,解決了在將任務(wù)程序承載于多個(gè)進(jìn)程 時(shí),在操作系統(tǒng)環(huán)境中無(wú)法讓多個(gè)進(jìn)程同時(shí)使用共享全局變量的問(wèn)題,且不再需要定義指 針變量,不需要讀取指針變量的值作為中轉(zhuǎn),減少了多處理系統(tǒng)讀取共享全局變量的操作 步驟,提高多處理系統(tǒng)執(zhí)行任務(wù)程序的效率,降低數(shù)據(jù)處理時(shí)延。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0054] 圖1為本發(fā)明實(shí)施例中多處理裝置中多個(gè)處理單元相互協(xié)作的一個(gè)示意圖;
[0055] 圖2為本發(fā)明實(shí)施例中將共享全局變量共享的方法一個(gè)流程示意圖;
[0056] 圖3為本發(fā)明實(shí)施例中將共享全局變量共享的方法另一個(gè)流程示意圖;
[0057] 圖4為本發(fā)明實(shí)施例中多處理裝置一個(gè)結(jié)構(gòu)示意圖;
[0058] 圖5為本發(fā)明實(shí)施例中多處理裝置另一個(gè)結(jié)構(gòu)示意圖;
[0059] 圖6為本發(fā)明實(shí)施例中多處理裝置另一個(gè)結(jié)構(gòu)示意圖;
[0060] 圖7為本發(fā)明實(shí)施例中多處理裝置另一個(gè)結(jié)構(gòu)示意圖;
[0061] 圖8為本發(fā)明實(shí)施例中多處理裝置另一個(gè)結(jié)構(gòu)示意圖;
[0062] 圖9為本發(fā)明實(shí)施例中多處理裝置另一個(gè)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0063] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施 例,都屬于本發(fā)明保護(hù)的范圍。
[0064] 應(yīng)當(dāng)理解,盡管在本發(fā)明實(shí)施例中可能采用術(shù)語(yǔ)第一、第二等來(lái)描述各個(gè)數(shù)據(jù)段、 虛擬地址、物理內(nèi)存或物理地址,但數(shù)據(jù)段、虛擬地址、物理內(nèi)存或物理地址不應(yīng)限于這些 術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將數(shù)據(jù)段、虛擬地址、物理內(nèi)存或物理地址彼此區(qū)分開(kāi)。例如,在不 脫離本發(fā)明實(shí)施例范圍的情況下,第一數(shù)據(jù)段也可以被稱(chēng)為第二數(shù)據(jù)段,類(lèi)似地,第二數(shù)據(jù) 段也可以被稱(chēng)為第一數(shù)據(jù)段;同樣的,第二虛擬地址也可以被稱(chēng)為第三虛擬地址等等,本發(fā) 明實(shí)施例對(duì)此不做限制。
[0065] 請(qǐng)參閱圖2,本發(fā)明實(shí)施例中將共享全局變量共享的方法一個(gè)實(shí)施例包括:
[0066] 201、當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為所述第一 數(shù)據(jù)段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段;
[0067] 在任務(wù)程序中定義存放共享全局變量的數(shù)據(jù)段為第一數(shù)據(jù)段,執(zhí)行任務(wù)程序時(shí), 當(dāng)多處理裝置識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,該第一虛擬地址為該第一數(shù)據(jù)段 的虛擬地址。
[0068] 可以理解的是,通過(guò)該第一虛擬地址,可以讀取到該第一數(shù)據(jù)段中存放的共享全 局變量。
[0069] 202、為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物理地址為第 一物理地址;
[0070] 多處理裝置獲取到第一虛擬地址后,可以得到該第一數(shù)據(jù)段中存放的共享全局變 量,該多處理裝置為該共享全局變量分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為第 一物理地址。
[0071] 203、拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址映射,所述 第一地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系;
[0072] 多處理裝置為共享全局變量分配第一物理內(nèi)存后,拷貝第一數(shù)據(jù)段的初始值到該 第一物理內(nèi)存中,建立該第一虛擬地址與第一物理地址之間的映射關(guān)系,作為第一地址映 射。
[0073] 可以理解的是,建立映射關(guān)系后,通過(guò)該第一地址映射,讀取該第一虛擬地址時(shí), 即相當(dāng)于讀取該第一物理地址;該第一物理內(nèi)存,即為該第一虛擬地址對(duì)應(yīng)的內(nèi)存。
[0074] 204、當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
[0075] 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),該多處理裝置向該創(chuàng)建的進(jìn)程擴(kuò)展該第一地址映射。
[0076] 可以理解的是,這里創(chuàng)建的進(jìn)程數(shù)并不限定為一個(gè),步驟204可以重復(fù)執(zhí)行,每次 創(chuàng)建一個(gè)進(jìn)程時(shí),都向創(chuàng)建的進(jìn)程擴(kuò)展該第一地址映射。這樣,每個(gè)創(chuàng)建的進(jìn)程中都會(huì)存在 該第一地址映射,在各個(gè)進(jìn)程中讀取任務(wù)程序中的第一虛擬地址時(shí),都相當(dāng)于直接讀取該 第一物理地址,可以對(duì)第一物理內(nèi)存中的數(shù)據(jù)進(jìn)行處理。
[0077] 可以理解的是,在將任務(wù)程序承載于多個(gè)進(jìn)程的場(chǎng)景中,為了保證多個(gè)處理單元 對(duì)任務(wù)的并行處理,進(jìn)程與多處理裝置中的處理單元一一對(duì)應(yīng),即每當(dāng)創(chuàng)建一個(gè)進(jìn)程,則會(huì) 加入一個(gè)處理單元承載該進(jìn)程執(zhí)行任務(wù)程序。
[0078] 本發(fā)明實(shí)施例中當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,該第一數(shù)據(jù)段為任 務(wù)程序中存放共享全局變量的數(shù)據(jù)段,該第一虛擬地址為該第一數(shù)據(jù)段的虛擬地址,為該 共享全局變量分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為第一物理地址,然后建立 第一映射關(guān)系,該第一映射關(guān)系為第一物理地址與第一虛擬地址之間的映射關(guān)系,每當(dāng)創(chuàng) 建一個(gè)進(jìn)程時(shí),向該進(jìn)程擴(kuò)展該第一地址映射,這樣當(dāng)創(chuàng)建有多個(gè)進(jìn)程時(shí),每個(gè)進(jìn)程中都被 擴(kuò)展了該第一地址映射,在任一進(jìn)程中,當(dāng)需要訪問(wèn)該共享全局變量時(shí),只需要訪問(wèn)該第一 虛擬地址,即可根據(jù)該第一地址映射訪問(wèn)到存放有該共享全局變量的第一物理內(nèi)存,解決 了在將任務(wù)程序承載于多個(gè)進(jìn)程時(shí),在操作系統(tǒng)環(huán)境中無(wú)法讓多個(gè)進(jìn)程同時(shí)使用共享全局 變量的問(wèn)題,且不再需要定義指針變量,不需要讀取指針變量的值作為中轉(zhuǎn),減少了多處理 系統(tǒng)讀取共享全局變量的操作步驟,提高多處理系統(tǒng)執(zhí)行任務(wù)程序的效率,降低數(shù)據(jù)處理 時(shí)延。
[0079] 上面實(shí)施例中,實(shí)現(xiàn)了將任務(wù)程序中共享全局變量在多個(gè)進(jìn)程間共享,在實(shí)際應(yīng) 用中,執(zhí)行任務(wù)程序時(shí),還包括有其他的操作,下面對(duì)本發(fā)明實(shí)施例中將共享全局變量共享 的方法進(jìn)行具體描述:
[0080] 請(qǐng)參閱圖3,本發(fā)明實(shí)施例中將共享全局變量共享的方法另一個(gè)實(shí)施例包括:
[0081] 301、根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表示用于執(zhí)行 任務(wù)程序的所有進(jìn)程的集合;
[0082] 當(dāng)多處理裝置需要利用多個(gè)處理單元并行執(zhí)行一個(gè)任務(wù)程序時(shí),該多處理裝置根 據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),該進(jìn)程組表示用于執(zhí)行該任務(wù)程序的所有 進(jìn)程的集合。
[0083] 可以理解的是,在將任務(wù)程序承載于多個(gè)進(jìn)程的場(chǎng)景中,為了保證多個(gè)處理單元 對(duì)任務(wù)的并行處理,進(jìn)程與多處理裝置中的處理單元一一對(duì)應(yīng),即每當(dāng)創(chuàng)建一個(gè)進(jìn)程,則會(huì) 加入一個(gè)處理單元承載該進(jìn)程執(zhí)行任務(wù)程序。
[0084] 302、當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為所述第一 數(shù)據(jù)段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段;
[0085] 在任務(wù)程序中定義了存放共享全局變量的數(shù)據(jù)段為第一數(shù)據(jù)段,執(zhí)行任務(wù)程序 時(shí),當(dāng)多處理裝置識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,該第一虛擬地址為該第一數(shù)據(jù) 段的虛擬地址。
[0086] 可以理解的是,通過(guò)該第一虛擬地址,可以讀取到該第一數(shù)據(jù)段中存放的共享全 局變量。
[0087] 303、為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物理地址為第 一物理地址;
[0088] 多處理裝置獲取到第一虛擬地址后,可以得到該第一數(shù)據(jù)段中存放的共享全局變 量,該多處理裝置為該共享全局變量分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為第 一物理地址。
[0089] 304、拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址映射,所述 第一地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系;
[0090] 多處理裝置為共享全局變量分配第一物理內(nèi)存后,拷貝第一數(shù)據(jù)段的初始值到該 第一物理內(nèi)存中,建立該第一虛擬地址與第一物理地址之間的映射關(guān)系,作為第一地址映 射。
[0091] 可以理解的是,建立映射關(guān)系后,通過(guò)該第一地址映射,讀取該第一虛擬地址時(shí), 即相當(dāng)于讀取該第一物理地址;該第一物理內(nèi)存,即為該第一虛擬地址對(duì)應(yīng)的內(nèi)存。
[0092] 305、當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,該第二虛擬地址為所述第二數(shù) 據(jù)段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的數(shù)據(jù)段;
[0093] 在任務(wù)程序中定義了存放私有全局變量的數(shù)據(jù)段為第二數(shù)據(jù)段,執(zhí)行任務(wù)程序 時(shí),當(dāng)多處理裝置識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,該第二虛擬地址為該第二數(shù)據(jù) 段的虛擬地址。
[0094] 可以理解的是,通過(guò)該第二虛擬地址,可以讀取到該第二數(shù)據(jù)段中存放的私有全 局變量。
[0095] 可以理解的是,第一數(shù)據(jù)段與第二數(shù)據(jù)段的標(biāo)識(shí)可以在任務(wù)程序中自定義,例如 可以使用.shared_data作為標(biāo)識(shí)來(lái)定義第一數(shù)據(jù)段,使用.data作為標(biāo)識(shí)來(lái)定義第二數(shù)據(jù) 段,還可以使用其他各種標(biāo)識(shí)來(lái)定義第一數(shù)據(jù)段與第二數(shù)據(jù)段,此處不作限定。
[0096] 306、備份第二數(shù)據(jù)段的初始值;
[0097] 多處理裝置獲取到第二虛擬地址后,可以備份第二數(shù)據(jù)段的初始值,具體的,可以 備份第二數(shù)據(jù)段中存放的私有全局變量的初始值。
[0098] 可以理解的是,步驟305與步驟306可以在步驟307之前的任一個(gè)時(shí)機(jī)執(zhí)行,此處 不作限定。
[0099] 307、當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射,在所述進(jìn)程中為所 述私有全局變量分配第二物理內(nèi)存,所述第二物理內(nèi)存的物理地址為第二物理地址,所述 第二物理地址與所述第一物理地址不同;
[0100] 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),該多處理裝置不僅向該創(chuàng)建的進(jìn)程擴(kuò)展該第一地址映射,而 且在該創(chuàng)建的進(jìn)程中為私有全局變量分配第二物理內(nèi)存,該第二物理內(nèi)存的物理地址為第 二物理地址,該第二物理地址與第一物理地址不同。
[0101] 可以理解的是,這里創(chuàng)建的進(jìn)程數(shù)并不限定為一個(gè),步驟307可以重復(fù)執(zhí)行,每次 創(chuàng)建一個(gè)進(jìn)程時(shí),都向創(chuàng)建的進(jìn)程擴(kuò)展該第一地址映射,且為私有全局變量分配物理內(nèi)存, 這樣,每個(gè)創(chuàng)建的進(jìn)程中都會(huì)存在該第一地址映射,且有用于存放私有全局變量的物理內(nèi) 存,在各個(gè)進(jìn)程中讀取任務(wù)程序中的第一虛擬地址時(shí),都相當(dāng)于直接讀取該第一物理地址, 可以對(duì)第一物理內(nèi)存中的數(shù)據(jù)進(jìn)行處理,同時(shí)也可以讀取為私有全局變量分配的物理內(nèi)存 中的私有全局變量,對(duì)其中的數(shù)據(jù)進(jìn)行處理。
[0102] 可以理解的是,創(chuàng)建的每個(gè)進(jìn)程中都會(huì)為私有全局變量分配物理內(nèi)存,但是不會(huì) 為共享全局變量分配物理內(nèi)存,僅僅只需要將第一地址映射擴(kuò)展到該進(jìn)程中。
[0103] 308、復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所述進(jìn)程中建立第 二地址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地址之間的映射關(guān) 系。
[0104] 在創(chuàng)建進(jìn)程時(shí),多處理系統(tǒng)為該進(jìn)程中的私有全局變量分配第二物理內(nèi)存后,由 于存在第二數(shù)據(jù)段的初始值的備份,將該第二數(shù)據(jù)段的初始值復(fù)制到該第二物理內(nèi)存中, 在該進(jìn)程中建立第二地址映射,該第二地址映射表示所述第二虛擬地址與所述第二物理地 址之間的映射關(guān)系,則,在該進(jìn)程中,讀取第二虛擬地址,即可讀取到第二物理地址中存放 的私有全局變量副本的數(shù)據(jù),在該進(jìn)程中,對(duì)該數(shù)據(jù)進(jìn)行處理。
[0105] 309、按照該默認(rèn)進(jìn)程數(shù)創(chuàng)建該進(jìn)程組中的所有進(jìn)程;
[0106] 多處理裝置按照上述步驟302至308所描述的方法,根據(jù)步驟301中確定的進(jìn)程 組中的默認(rèn)進(jìn)程數(shù),創(chuàng)建該進(jìn)程組中的所有進(jìn)程。
[0107] 可以理解的是,最終進(jìn)程組中的所有進(jìn)程中都包含有第一地址映射,各進(jìn)程中都 有為私有全局變量分配的第二物理內(nèi)存,且存在第二地址映射。
[0108] 各進(jìn)程都通過(guò)第一虛擬地址和第一地址映射共享讀取該第一物理內(nèi)存,對(duì)共享全 局變量在各個(gè)進(jìn)程中進(jìn)行共享處理;通過(guò)第二虛擬地址和第二地址映射在各進(jìn)程內(nèi)對(duì)私有 全局變量進(jìn)程處理。
[0109] 可以理解的是,在實(shí)際的一些場(chǎng)景中,也可以不執(zhí)行步驟301與步驟309,采用其 他的方式實(shí)現(xiàn)進(jìn)程的創(chuàng)建,例如根據(jù)數(shù)據(jù)吞吐量,超出一定數(shù)目是則增加一個(gè)進(jìn)程等,此處 不作限定。
[oho] 可選的,在上述步驟的基礎(chǔ)上,當(dāng)數(shù)據(jù)吞吐量增加時(shí),可以進(jìn)行如下處理:
[0111] 當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程;
[0112] 當(dāng)在進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述私有全局變量分配第三物 理內(nèi)存,所述第三物理內(nèi)存的物理地址為第三物理地址,所述第三物理地址與所述第一物 理地址和第二物理地址不同;
[0113] 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第三物理內(nèi)存中,在所述新增的進(jìn)程中建立 第三地址映射,所述第三地址映射表示所述第二虛擬地址與所述第三物理地址的映射關(guān) 系;
[0114] 向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
[0115] 可選的,在上述步驟的基礎(chǔ)上,當(dāng)數(shù)據(jù)吞吐量減少時(shí),可以進(jìn)行如下處理:
[0116] 當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程;
[0117] 當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地址映射和第四地 址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān)系,所述第四物理 地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程中分配給私有全局 變量的物理內(nèi)存;
[0118] 釋放所述第四物理內(nèi)存。
[0119] 需要說(shuō)明的是,上述步驟的執(zhí)行主體為多處理裝置,在實(shí)際應(yīng)用中,其也可以為多 處理裝置中的一個(gè)進(jìn)程,可以稱(chēng)之為管理進(jìn)程,該進(jìn)程可以為與上述進(jìn)程不同的進(jìn)程,承載 在多處理裝置中另外的處理單元上,也可以直接承載在上述進(jìn)程組中其中一個(gè)進(jìn)程對(duì)應(yīng)的 處理單元上,此處不作限定。
[0120] 上面實(shí)施例中,在實(shí)現(xiàn)共享全局變量在多個(gè)進(jìn)程之間共享,保證了任務(wù)程序執(zhí)行 效率的同時(shí),支持根據(jù)數(shù)據(jù)吞吐率和任務(wù)負(fù)荷動(dòng)態(tài)的調(diào)整進(jìn)程組中進(jìn)程的數(shù)量,即可以動(dòng) 態(tài)的調(diào)整執(zhí)行任務(wù)程序的處理單元的數(shù)量,提高了多處理單元中資源的利用率。且在增加 進(jìn)程時(shí),每個(gè)進(jìn)程中都只需要讀取兩個(gè)虛擬地址,一個(gè)對(duì)應(yīng)共享全局變量,一個(gè)對(duì)應(yīng)私有全 局變量,不會(huì)因?yàn)檫M(jìn)程中虛擬地址資源不足而制約承載一個(gè)任務(wù)程序的處理單元的數(shù)量, 從而達(dá)到支撐更大數(shù)據(jù)吞吐率的目的。
[0121] 為便于理解,下面以一具體應(yīng)用場(chǎng)景對(duì)本發(fā)明實(shí)施例中將共享全局變量共享的方 法進(jìn)行具體描述:
[0122] 假設(shè)任務(wù)程序中采用.SharecLdata數(shù)據(jù)段作為第一數(shù)據(jù)段來(lái)存放共享全局變 量,例如· shared_data int X,y,z ;該.shared_data數(shù)據(jù)段對(duì)應(yīng)的第一虛擬地址設(shè)定為 VI,其中存放有X,y,z三個(gè)共享全局變量的值;
[0123] 假設(shè)任務(wù)程序中采用.data數(shù)據(jù)段作為第二數(shù)據(jù)段來(lái)存放私有全局變量,例 如.data int a, b,c ;該.data數(shù)據(jù)段對(duì)應(yīng)的第二虛擬地址設(shè)定為V2,其中存放有a, b,c 三個(gè)私有全局變量的值;
[0124] 當(dāng)任務(wù)程序開(kāi)始執(zhí)行,進(jìn)程組啟動(dòng)時(shí),管理進(jìn)程根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組 中的默認(rèn)進(jìn)程數(shù)N ;
[0125] 當(dāng)識(shí)別到任務(wù)程序中的.shared_data數(shù)據(jù)段時(shí),該管理進(jìn)程獲取該.shared_ data數(shù)據(jù)段對(duì)應(yīng)的第一虛擬地址VI,為該.shared_data數(shù)據(jù)段中存放的共享全局變量X, y,z分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為P1,將.shared_data數(shù)據(jù)段中x,y, Z的初始值拷貝到該第一物理內(nèi)存中,建立第一地址映射VlO PI;
[0126] 當(dāng)識(shí)別到任務(wù)程序中的.data數(shù)據(jù)段時(shí),該管理進(jìn)程獲取該.data數(shù)據(jù)段對(duì)應(yīng)的 第二虛擬地址V2,備份該.data數(shù)據(jù)段中存放的私有全局變量a,b,c的初始值;
[0127] 當(dāng)創(chuàng)建進(jìn)程1時(shí),向該進(jìn)程1擴(kuò)展該第一地址映射Vl分Pl,并且在該進(jìn)程1中 為.data數(shù)據(jù)段中存放的私有全局變量a,b,c分配第二物理內(nèi)存,該第二物理內(nèi)存的物理 地址為P2,復(fù)制備份的私有全局變量a,b,c的初始值到該第二物理內(nèi)存中,建立第二地址 映射V2〇 P2;
[0128] 管理進(jìn)程按照上述方式在進(jìn)程組中建立N個(gè)進(jìn)程;
[0129] 當(dāng)數(shù)據(jù)吞吐量增加時(shí),管理進(jìn)程向該進(jìn)程組中增加進(jìn)程,例如增加進(jìn)程3 ;
[0130] 具體為:在進(jìn)程3中為私有全局變量a,b,c分配第三物理內(nèi)存,該第三物理內(nèi)存 的物理地址為P3,復(fù)制備份的私有全局變量a,b,c的初始值到該第三物理內(nèi)存中,建立第 三地址映射V2〇 P3,向進(jìn)程3擴(kuò)展第一地址映射Vl公Pl;
[0131] 當(dāng)數(shù)據(jù)吞吐量減少時(shí),管理進(jìn)程從進(jìn)程組中刪除進(jìn)程,例如刪除進(jìn)程1 ;
[0132] 具體為:解除進(jìn)程1中的第一地址映射νι<--ρι和第二地址映射ν2<φ P2,釋放 該第二物理內(nèi)存。
[0133] 下面對(duì)本發(fā)明實(shí)施例中的多處理裝置進(jìn)行描述,請(qǐng)參閱圖4,本發(fā)明實(shí)施例中多處 理裝置一個(gè)實(shí)施例包括:
[0134] 第一獲取模塊401,用于當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛 擬地址為所述第一數(shù)據(jù)段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的 數(shù)據(jù)段;
[0135] 第一分配模塊402,用于為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi) 存的物理地址為第一物理地址;
[0136] 第一建立模塊403,用于拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第 一地址映射,所述第一地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān) 系;
[0137] 第一擴(kuò)展模塊404,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
[0138] 本發(fā)明實(shí)施例中當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),第一獲取模塊401獲取第一虛擬地址, 該第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段,該第一虛擬地址為該第一數(shù)據(jù)段 的虛擬地址,第一分配模塊402為該共享全局變量分配第一物理內(nèi)存,該第一物理內(nèi)存的 物理地址為第一物理地址,然后第一建立模塊403建立第一映射關(guān)系,該第一映射關(guān)系為 第一物理地址與第一虛擬地址之間的映射關(guān)系,每當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),第一擴(kuò)展模塊404 向該進(jìn)程擴(kuò)展該第一地址映射,這樣當(dāng)創(chuàng)建有多個(gè)進(jìn)程時(shí),每個(gè)進(jìn)程中都被擴(kuò)展了該第一 地址映射,在任一進(jìn)程中,當(dāng)需要訪問(wèn)該共享全局變量時(shí),只需要訪問(wèn)該第一虛擬地址,即 可根據(jù)該第一地址映射訪問(wèn)到存放有該共享全局變量的第一物理內(nèi)存,解決了在將任務(wù)程 序承載于多個(gè)進(jìn)程時(shí),在操作系統(tǒng)環(huán)境中無(wú)法讓多個(gè)進(jìn)程同時(shí)使用共享全局變量的問(wèn)題, 且不再需要定義指針變量,不需要讀取指針變量的值作為中轉(zhuǎn),減少了多處理系統(tǒng)讀取共 享全局變量的操作步驟,提高多處理系統(tǒng)執(zhí)行任務(wù)程序的效率,降低數(shù)據(jù)處理時(shí)延。
[0139] 在實(shí)際應(yīng)用中,可以將執(zhí)行一個(gè)任務(wù)程序的所有進(jìn)程作為一個(gè)進(jìn)程組,可以先根 據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中默認(rèn)進(jìn)程數(shù),請(qǐng)參閱圖5,作為本發(fā)明實(shí)施例中多處理裝置 另一個(gè)實(shí)施例,上述實(shí)施例中多處理裝置還包括:
[0140] 確定模塊501,用于根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組 表示用于執(zhí)行所述任務(wù)程序的所有進(jìn)程的集合;
[0141] 創(chuàng)建模塊502,用于按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程。
[0142] 本實(shí)施例中,確定模塊501可以根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定默認(rèn)進(jìn)程數(shù),創(chuàng)建模塊 502再根據(jù)默認(rèn)進(jìn)程數(shù)在進(jìn)程組中創(chuàng)建進(jìn)程,提高了對(duì)任務(wù)程序初始執(zhí)行的速率。
[0143] 請(qǐng)參閱圖6,作為本發(fā)明實(shí)施例中多處理裝置另一個(gè)實(shí)施例,上述實(shí)施例中多處理 裝置還包括:
[0144] 第二獲取模塊601,用于當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛 擬地址為所述第二數(shù)據(jù)段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變 量的數(shù)據(jù)段;
[0145] 備份模塊602,用于備份第二數(shù)據(jù)段的初始值;
[0146] 第二分配模塊603,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),在所述進(jìn)程中為所述私有全局變量分 配第二物理內(nèi)存,所述第二物理內(nèi)存的物理地址為第二物理地址,所述第二物理地址與所 述第一物理地址不同;
[0147] 第二建立模塊604,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在 所述進(jìn)程中建立第二地址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理 地址之間的映射關(guān)系。
[0148] 本實(shí)施例中,在進(jìn)程中建立私有全局變量的映射關(guān)系,保證了任務(wù)程序的準(zhǔn)確執(zhí) 行。
[0149] 在實(shí)際應(yīng)用中,根據(jù)數(shù)據(jù)吞吐量的變化,該多處理裝置還可以增加或刪除進(jìn)程:
[0150] 請(qǐng)參閱圖7,作為本發(fā)明實(shí)施例中多處理裝置另一個(gè)實(shí)施例,上述實(shí)施例中多處理 裝置還包括:
[0151] 增加模塊701,用于當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程;
[0152] 第三分配模塊702,用于當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所 述私有全局變量分配第三物理內(nèi)存,所述第三物理內(nèi)存的物理地址為第三物理地址,所述 第三物理地址與所述第一物理地址和第二物理地址不同;
[0153] 第三建立模塊703,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第三物理內(nèi)存中,在 所述新增的進(jìn)程中建立第三地址映射,所述第三地址映射表示所述第二虛擬地址與所述第 三物理地址的映射關(guān)系;
[0154] 第二擴(kuò)展模塊704,用于向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
[0155] 本發(fā)明實(shí)施例中,當(dāng)數(shù)據(jù)吞吐量增加時(shí),增加模塊701相應(yīng)的增加進(jìn)程,提高了多 處理裝置執(zhí)行任務(wù)程序的效率。
[0156] 請(qǐng)參閱圖8,作為本發(fā)明實(shí)施例中多處理裝置另一個(gè)實(shí)施例,上述實(shí)施例中多處理 裝置還包括:
[0157] 刪除模塊801,用于當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程;
[0158] 解除模塊802,用于當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一 地址映射和第四地址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān) 系,所述第四物理地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程 中分配給私有全局變量的物理內(nèi)存;
[0159] 釋放模塊803,用于釋放所述第四物理內(nèi)存。
[0160] 發(fā)明實(shí)施例中,當(dāng)數(shù)據(jù)吞吐量減少時(shí),刪除模塊801從進(jìn)程組中刪除進(jìn)程,提高了 多處理裝置中資源的使用效率。
[0161] 為了便于理解上述實(shí)施例,下面以上述多處理裝置各個(gè)模塊在一個(gè)具體應(yīng)用場(chǎng)景 中的交互過(guò)程進(jìn)行說(shuō)明:
[0162] 假設(shè)任務(wù)程序中采用.SharecLdata數(shù)據(jù)段作為第一數(shù)據(jù)段來(lái)存放共享全局變 量,例如· shared_data int X,y,z ;該.shared_data數(shù)據(jù)段對(duì)應(yīng)的第一虛擬地址設(shè)定為 VI,其中存放有X,y,z三個(gè)共享全局變量的值;
[0163] 假設(shè)任務(wù)程序中采用.data數(shù)據(jù)段作為第二數(shù)據(jù)段來(lái)存放私有全局變量,例 如.data int a, b,c ;該.data數(shù)據(jù)段對(duì)應(yīng)的第二虛擬地址設(shè)定為V,2,其中存放有a, b, c三個(gè)私有全局變量的值;
[0164] 當(dāng)任務(wù)程序開(kāi)始執(zhí)行,進(jìn)程組啟動(dòng)時(shí),確定模塊501根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn) 程組中的默認(rèn)進(jìn)程數(shù)N ;
[0165] 當(dāng)識(shí)別到任務(wù)程序中的.SharecLdata數(shù)據(jù)段時(shí),第一獲取模塊401獲取 該.shared_data數(shù)據(jù)段對(duì)應(yīng)的第一虛擬地址VI,第一分配模塊402為該.shared_data數(shù) 據(jù)段中存放的共享全局變量X,y,z分配第一物理內(nèi)存,該第一物理內(nèi)存的物理地址為P1, 第一建立模塊403將.shared_data數(shù)據(jù)段中X,y,z的初始值拷貝到該第一物理內(nèi)存中,建 立第一地址映射VlO Pl;
[0166] 當(dāng)識(shí)別到任務(wù)程序中的.data數(shù)據(jù)段時(shí),第二獲取模塊601獲取該.data數(shù)據(jù)段 對(duì)應(yīng)的第二虛擬地址V2,備份模塊602備份該.data數(shù)據(jù)段中存放的私有全局變量a,b,c 的初始值;
[0167] 當(dāng)創(chuàng)建進(jìn)程1時(shí),第一擴(kuò)展模塊404向該進(jìn)程1擴(kuò)展該第一地址映射Vl公Pl, 并且第二分配模塊603在該進(jìn)程1中為.data數(shù)據(jù)段中存放的私有全局變量a,b,c分配第 二物理內(nèi)存,該第二物理內(nèi)存的物理地址為P2,第二建立模塊604復(fù)制備份的私有全局變 量a,b,c的初始值到該第二物理內(nèi)存中,建立第二地址映射V2公P2;
[0168] 創(chuàng)建模塊502按照上述方式在進(jìn)程組中建立N個(gè)進(jìn)程;
[0169] 當(dāng)數(shù)據(jù)吞吐量增加時(shí),增加模塊701向該進(jìn)程組中增加進(jìn)程,例如增加進(jìn)程3 ;
[0170] 具體為:第三分配模塊702在進(jìn)程3中為私有全局變量a,b,c分配第三物理內(nèi)存, 該第三物理內(nèi)存的物理地址為P3,第三建立模塊703復(fù)制備份的私有全局變量a,b,c的初 始值到該第三物理內(nèi)存中,建立第三地址映射V2?i> P3,第二擴(kuò)展模塊704向進(jìn)程3擴(kuò)展 第一地址映射Vl公Pl:
[0171] 當(dāng)數(shù)據(jù)吞吐量減少時(shí),刪除模塊801從進(jìn)程組中刪除進(jìn)程,例如刪除進(jìn)程1 ;
[0172] 具體為:解除模塊802解除進(jìn)程1中的第一地址映射VlOPl和第二地址映射 P2,釋放模塊803釋放該第二物理內(nèi)存。
[0173] 請(qǐng)參閱圖9,本發(fā)明實(shí)施例中的多處理裝置900另一實(shí)施例包括:
[0174] 輸入裝置901、輸出裝置902、處理器903和存儲(chǔ)器904 (其中多處理裝置900中的 處理器903的數(shù)量可以一個(gè)或多個(gè),圖9中以一個(gè)處理器903為例)。在本發(fā)明的一些實(shí)施 例中,輸入裝置901、輸出裝置902、處理器903和存儲(chǔ)器904可通過(guò)總線或其它方式連接, 其中,圖9中以通過(guò)總線連接為例。
[0175] 其中,通過(guò)調(diào)用存儲(chǔ)器904存儲(chǔ)的操作指令,處理器903,用于執(zhí)行如下步驟:
[0176] 當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為所述第一數(shù)據(jù) 段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段;
[0177] 為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物理地址為第一物 理地址;
[0178] 拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址映射,所述第一 地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系;
[0179] 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射;
[0180] 本發(fā)明的一些實(shí)施例中,該處理器903還用于執(zhí)行如下步驟:
[0181] 根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表示用于執(zhí)行所述 任務(wù)程序的所有進(jìn)程的集合;
[0182] 按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程;
[0183] 本發(fā)明的一些實(shí)施例中,該處理器903還用于執(zhí)行如下步驟:
[0184] 當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛擬地址為所述第二數(shù)據(jù) 段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的數(shù)據(jù)段;
[0185] 備份第二數(shù)據(jù)段的初始值;
[0186] 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),該處理器903還用于執(zhí)行如下步驟:
[0187] 在所述進(jìn)程中為所述私有全局變量分配第二物理內(nèi)存,所述第二物理內(nèi)存的物理 地址為第二物理地址,所述第二物理地址與所述第一物理地址不同;
[0188] 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所述進(jìn)程中建立第二地 址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地址之間的映射關(guān)系;
[0189] 發(fā)明的一些實(shí)施例中,該處理器903還用于執(zhí)行如下步驟:
[0190] 當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程;
[0191] 當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述私有全局變量分配第 三物理內(nèi)存,所述第三物理內(nèi)存的物理地址為第三物理地址,所述第三物理地址與所述第 一物理地址和第二物理地址不同;
[0192] 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第三物理內(nèi)存中,在所述新增的進(jìn)程中建立 第三地址映射,所述第三地址映射表示所述第二虛擬地址與所述第三物理地址的映射關(guān) 系;
[0193] 向所述新增的進(jìn)程擴(kuò)展所述第一地址映射;
[0194] 發(fā)明的一些實(shí)施例中,該處理器903還用于執(zhí)行如下步驟:
[0195] 當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程;
[0196] 當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地址映射和第四地 址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān)系,所述第四物理 地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程中分配給私有全局 變量的物理內(nèi)存;
[0197] 釋放所述第四物理內(nèi)存。
[0198] 所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng), 裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
[0199] 在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以 通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的 劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件 可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或 討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦 合或通信連接,可以是電性,機(jī)械或其它的形式。
[0200] 所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯 示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè) 網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目 的。
[0201] 另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以 是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單 元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0202] 所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用 時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì) 上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形 式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算 機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法 的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程 序代碼的介質(zhì)。
[0203] 以上所述,以上實(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ù)方案的精神和范圍。
【權(quán)利要求】
1. 一種將共享全局變量共享的方法,其特征在于,包括: 當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為所述第一數(shù)據(jù)段的 虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段; 為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物理地址為第一物理地 址; 拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址映射,所述第一地址 映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系; 當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí)的步驟之前還包 括: 根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表示用于執(zhí)行所述任務(wù) 程序的所有進(jìn)程的集合; 按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程 組中的所有進(jìn)程的步驟之前還包括: 當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛擬地址為所述第二數(shù)據(jù)段的 虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的數(shù)據(jù)段; 備份第二數(shù)據(jù)段的初始值; 所述當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí)的步驟之后還包括: 在所述進(jìn)程中為所述私有全局變量分配第二物理內(nèi)存,所述第二物理內(nèi)存的物理地址 為第二物理地址,所述第二物理地址與所述第一物理地址不同; 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所述進(jìn)程中建立第二地址映 射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地址之間的映射關(guān)系。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述方法還包括: 當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程; 當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述私有全局變量分配第H物 理內(nèi)存,所述第H物理內(nèi)存的物理地址為第H物理地址,所述第H物理地址與所述第一物 理地址和第二物理地址不同; 復(fù)制所述第二數(shù)據(jù)段的初始值到所述第立物理內(nèi)存中,在所述新增的進(jìn)程中建立第H 地址映射,所述第H地址映射表示所述第二虛擬地址與所述第H物理地址的映射關(guān)系; 向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
5. 根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述方法還包括: 當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程; 當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地址映射和第四地址映 射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān)系,所述第四物理地址 為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程中分配給私有全局變量 的物理內(nèi)存; 釋放所述第四物理內(nèi)存。
6. -種多處理裝置,其特征在于,包括: 第一獲取模塊,用于當(dāng)識(shí)別到第一數(shù)據(jù)段時(shí),獲取第一虛擬地址,所述第一虛擬地址為 所述第一數(shù)據(jù)段的虛擬地址,所述第一數(shù)據(jù)段為任務(wù)程序中存放共享全局變量的數(shù)據(jù)段; 第一分配模塊,用于為所述共享全局變量分配第一物理內(nèi)存,所述第一物理內(nèi)存的物 理地址為第一物理地址; 第一建立模塊,用于拷貝第一數(shù)據(jù)段的初始值到所述第一物理內(nèi)存中,建立第一地址 映射,所述第一地址映射表示所述第一虛擬地址與所述第一物理地址之間的映射關(guān)系; 第一擴(kuò)展模塊,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),向所述進(jìn)程擴(kuò)展所述第一地址映射。
7. 根據(jù)權(quán)利要求6所述的多處理裝置,其特征在于,所述多處理裝置還包括: 確定模塊,用于根據(jù)默認(rèn)數(shù)據(jù)吞吐量確定進(jìn)程組中的默認(rèn)進(jìn)程數(shù),所述進(jìn)程組表示用 于執(zhí)行所述任務(wù)程序的所有進(jìn)程的集合; 創(chuàng)建模塊,用于按照所述默認(rèn)進(jìn)程數(shù)創(chuàng)建所述進(jìn)程組中的所有進(jìn)程。
8. 根據(jù)權(quán)利要求7所述的多處理裝置,其特征在于,所述多處理裝置還包括: 第二獲取模塊,用于當(dāng)識(shí)別到第二數(shù)據(jù)段時(shí),獲取第二虛擬地址,所述第二虛擬地址為 所述第二數(shù)據(jù)段的虛擬地址,所述第二數(shù)據(jù)段為所述任務(wù)程序中存放私有全局變量的數(shù)據(jù) 段; 備份模塊,用于備份第二數(shù)據(jù)段的初始值; 第二分配模塊,用于當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),在所述進(jìn)程中為所述私有全局變量分配第二 物理內(nèi)存,所述第二物理內(nèi)存的物理地址為第二物理地址,所述第二物理地址與所述第一 物理地址不同; 第二建立模塊,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第二物理內(nèi)存中,在所述進(jìn) 程中建立第二地址映射,所述第二地址映射表示所述第二虛擬地址與所述第二物理地址之 間的映射關(guān)系。
9. 根據(jù)權(quán)利要求8所述的多處理裝置,其特征在于,所述多處理裝置還包括: 增加模塊,用于當(dāng)數(shù)據(jù)吞吐量增加時(shí),向所述進(jìn)程組中增加進(jìn)程; 第H分配模塊,用于當(dāng)在所述進(jìn)程組中新增一個(gè)進(jìn)程時(shí),在新增的進(jìn)程中為所述私有 全局變量分配第H物理內(nèi)存,所述第H物理內(nèi)存的物理地址為第H物理地址,所述第H物 理地址與所述第一物理地址和第二物理地址不同; 第H建立模塊,用于復(fù)制所述第二數(shù)據(jù)段的初始值到所述第H物理內(nèi)存中,在所述新 增的進(jìn)程中建立第H地址映射,所述第H地址映射表示所述第二虛擬地址與所述第H物理 地址的映射關(guān)系; 第二擴(kuò)展模塊,用于向所述新增的進(jìn)程擴(kuò)展所述第一地址映射。
10. 根據(jù)權(quán)利要求8或9所述的多處理裝置,其特征在于,所述多處理裝置還包括: 刪除模塊,用于當(dāng)數(shù)據(jù)吞吐量減少時(shí),從所述進(jìn)程組中刪除進(jìn)程; 解除模塊,用于當(dāng)在所述進(jìn)程組中刪除一個(gè)進(jìn)程時(shí),解除刪除的進(jìn)程中的第一地址映 射和第四地址映射,所述第四地址映射表示第二虛擬地址與第四物理地址的映射關(guān)系,所 述第四物理地址為第四物理內(nèi)存的物理地址,所述第四物理內(nèi)存為所述刪除的進(jìn)程中分配 給私有全局變量的物理內(nèi)存; 釋放模塊,用于釋放所述第四物理內(nèi)存。
【文檔編號(hào)】G06F9/46GK104461706SQ201410680722
【公開(kāi)日】2015年3月25日 申請(qǐng)日期:2014年11月24日 優(yōu)先權(quán)日:2014年11月24日
【發(fā)明者】曹興國(guó) 申請(qǐng)人:上海華為技術(shù)有限公司