本公開涉及計(jì)算機(jī)領(lǐng)域,特別是涉及一種數(shù)據(jù)處理方法、裝置、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備。
背景技術(shù):
1、計(jì)算機(jī)設(shè)備中一般可以同時(shí)運(yùn)行多個(gè)進(jìn)程,可以運(yùn)行不同應(yīng)用程序?qū)?yīng)的多個(gè)進(jìn)程,也可以運(yùn)行同一應(yīng)用程序的多個(gè)進(jìn)程(例如應(yīng)用雙開或多開)。每個(gè)進(jìn)程的運(yùn)行都需要相應(yīng)的進(jìn)程數(shù)據(jù)的支持,操作系統(tǒng)可以在內(nèi)存中為每一進(jìn)程分配一個(gè)存儲(chǔ)相應(yīng)進(jìn)程數(shù)據(jù)的內(nèi)存空間。
2、由于不同的進(jìn)程對(duì)應(yīng)的進(jìn)程數(shù)據(jù)之間存在一些相同的數(shù)據(jù),如果為每一進(jìn)程都單獨(dú)分配一個(gè)存儲(chǔ)空間存儲(chǔ)對(duì)應(yīng)的進(jìn)程數(shù)據(jù),會(huì)導(dǎo)致相同的進(jìn)程數(shù)據(jù)在內(nèi)存中占用多個(gè)不同的內(nèi)存空間,進(jìn)而導(dǎo)致內(nèi)存空間的浪費(fèi)。為了減少內(nèi)存空間的浪費(fèi),本領(lǐng)域技術(shù)人員在內(nèi)存中設(shè)置共享內(nèi)存,然后將進(jìn)程之間可以共用的數(shù)據(jù)存儲(chǔ)到共享內(nèi)存中,如此便可以避免相同的進(jìn)程數(shù)據(jù)占用多個(gè)內(nèi)存空間的問題,從而降低了內(nèi)存的消耗。
3、然而,目前進(jìn)程數(shù)據(jù)中還存在大量的數(shù)據(jù),在被創(chuàng)建進(jìn)程寫入共享內(nèi)存后,無法被其他進(jìn)程準(zhǔn)確訪問到,導(dǎo)致這些數(shù)據(jù)無法通過共享內(nèi)存進(jìn)行進(jìn)程間共享,進(jìn)而導(dǎo)致了內(nèi)存空間的大量浪費(fèi)。
技術(shù)實(shí)現(xiàn)思路
1、本公開實(shí)施例提供了一種數(shù)據(jù)處理方法與相關(guān)方法、裝置、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備,該方法使得訪問進(jìn)程能夠準(zhǔn)確訪問創(chuàng)建在共享內(nèi)存中的共享數(shù)據(jù),進(jìn)而可以降低多進(jìn)程運(yùn)行時(shí)的系統(tǒng)內(nèi)存消耗。
2、根據(jù)本公開的一方面,提供了一種數(shù)據(jù)處理方法,包括:
3、當(dāng)?shù)谝贿M(jìn)程對(duì)共享內(nèi)存中的目標(biāo)共享數(shù)據(jù)發(fā)起訪問時(shí),獲取所述目標(biāo)共享數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)體在所述共享內(nèi)存中的存儲(chǔ)位置;
4、基于所述存儲(chǔ)位置確定所述數(shù)據(jù)結(jié)構(gòu)體中目標(biāo)指針與所述第一進(jìn)程對(duì)應(yīng)的第一地址信息;
5、獲取所述目標(biāo)指針中存儲(chǔ)的地址偏移值,所述地址偏移值指示所述目標(biāo)指針與所述目標(biāo)指針指向的對(duì)象之間的地址偏移量;
6、根據(jù)所述第一地址信息和所述地址偏移值計(jì)算所述目標(biāo)共享數(shù)據(jù)與所述第一進(jìn)程對(duì)應(yīng)的第二地址信息;
7、將所述第二地址信息指示的存儲(chǔ)空間中保存的目標(biāo)共享數(shù)據(jù)加載到所述第一進(jìn)程中,實(shí)現(xiàn)所述第一進(jìn)程對(duì)所述目標(biāo)共享數(shù)據(jù)的訪問。
8、根據(jù)本公開的一方面,提供了一種數(shù)據(jù)處理裝置,包括:
9、第一獲取單元,用于當(dāng)?shù)谝贿M(jìn)程對(duì)共享內(nèi)存中的目標(biāo)共享數(shù)據(jù)發(fā)起訪問時(shí),獲取所述目標(biāo)共享數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)體在所述共享內(nèi)存中的存儲(chǔ)位置;
10、確定單元,用于基于所述存儲(chǔ)位置確定所述數(shù)據(jù)結(jié)構(gòu)體中目標(biāo)指針與所述第一進(jìn)程對(duì)應(yīng)的第一地址信息;
11、第二獲取單元,用于獲取所述目標(biāo)指針中存儲(chǔ)的地址偏移值,所述地址偏移值指示所述目標(biāo)指針與所述目標(biāo)指針指向的對(duì)象之間的地址偏移量;
12、計(jì)算單元,用于根據(jù)所述第一地址信息和所述地址偏移值計(jì)算所述目標(biāo)共享數(shù)據(jù)與所述第一進(jìn)程對(duì)應(yīng)的第二地址信息;
13、加載單元,用于將所述第二地址信息指示的存儲(chǔ)空間中保存的目標(biāo)共享數(shù)據(jù)加載到所述第一進(jìn)程中,實(shí)現(xiàn)所述第一進(jìn)程對(duì)所述目標(biāo)共享數(shù)據(jù)的訪問。
14、可選地,所述計(jì)算單元,包括:
15、第一計(jì)算子單元,用于計(jì)算所述第一地址信息對(duì)應(yīng)的數(shù)值與所述地址偏移值的和,得到目標(biāo)數(shù)值;
16、第一確定子單元,用于根據(jù)所述目標(biāo)數(shù)值確定第二地址信息。
17、可選地,所述第二獲取單元,包括:
18、第一獲取子單元,用于獲取所述目標(biāo)指針中存儲(chǔ)的密文數(shù)據(jù);
19、解密子單元,用于當(dāng)檢測(cè)到所述第一進(jìn)程對(duì)所述目標(biāo)共享數(shù)據(jù)具有訪問權(quán)限時(shí),對(duì)所述密文數(shù)據(jù)進(jìn)行解密,得到地址偏移值。
20、可選地,所述當(dāng)解密子單元,包括:
21、第一獲取模塊,用于獲取所述第一進(jìn)程對(duì)應(yīng)的應(yīng)用信息;
22、解密模塊,用于當(dāng)確定所述應(yīng)用信息指示的應(yīng)用為預(yù)設(shè)應(yīng)用時(shí),對(duì)所述密文數(shù)據(jù)進(jìn)行解密,得到地址偏移值。
23、可選地,所述解密模塊,包括:
24、獲取子模塊,用于當(dāng)確定所述應(yīng)用信息指示的應(yīng)用為預(yù)設(shè)應(yīng)用時(shí),獲取與所述預(yù)設(shè)應(yīng)用匹配的第一密鑰數(shù)據(jù);
25、解密子模塊,用于根據(jù)所述第一密鑰數(shù)據(jù)對(duì)所述密文數(shù)據(jù)進(jìn)行解密,得到地址偏移值。
26、可選地,所述確定單元,包括:
27、第二確定子單元,用于確定所述存儲(chǔ)位置對(duì)應(yīng)的存儲(chǔ)區(qū)域中首個(gè)內(nèi)存單元與所述第一進(jìn)程對(duì)應(yīng)的第三地址信息;
28、第三確定子單元,用于根據(jù)所述第三地址信息以及與所述目標(biāo)共享數(shù)據(jù)關(guān)聯(lián)的目標(biāo)指針在所述數(shù)據(jù)結(jié)構(gòu)體中的存儲(chǔ)位置確定所述目標(biāo)指針與所述第一進(jìn)程對(duì)應(yīng)的第一地址信息。
29、可選地,所述第一獲取單元,包括:
30、第二獲取子單元,用于獲取所述目標(biāo)共享數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)體的結(jié)構(gòu)體標(biāo)簽;
31、第四確定子單元,用于根據(jù)所述結(jié)構(gòu)體標(biāo)簽確定所述數(shù)據(jù)結(jié)構(gòu)體在所述共享內(nèi)存中的存儲(chǔ)位置。
32、可選地,所述結(jié)構(gòu)體標(biāo)簽包括共享內(nèi)存一級(jí)標(biāo)簽以及結(jié)構(gòu)體二級(jí)標(biāo)簽,所述第四確定子單元,包括:
33、第一確定模塊,用于根據(jù)所述共享內(nèi)存一級(jí)標(biāo)簽在所述共享內(nèi)存中確定目標(biāo)子共享內(nèi)存;
34、第二確定模塊,用于根據(jù)所述結(jié)構(gòu)體二級(jí)標(biāo)簽在所述目標(biāo)子共享內(nèi)存中確定所述數(shù)據(jù)結(jié)構(gòu)體的存儲(chǔ)位置。
35、可選地,所述數(shù)據(jù)處理裝置,還包括:
36、運(yùn)行子單元,用于運(yùn)行第二進(jìn)程,所述第二進(jìn)程與所述第一進(jìn)程關(guān)聯(lián)同一應(yīng)用;
37、第一創(chuàng)建子單元,用于基于所述第二進(jìn)程在內(nèi)存中創(chuàng)建共享內(nèi)存;
38、第二創(chuàng)建子單元,用于在所述共享內(nèi)存中創(chuàng)建包含目標(biāo)指針的數(shù)據(jù)結(jié)構(gòu)體;
39、第一寫入子單元,用于基于所述包含目標(biāo)指針的數(shù)據(jù)結(jié)構(gòu)體將所述第二進(jìn)程的進(jìn)程數(shù)據(jù)中動(dòng)態(tài)內(nèi)存類型的共享數(shù)據(jù)寫入所述共享內(nèi)存;
40、第二計(jì)算子單元,用于根據(jù)所述目標(biāo)指針與所述共享數(shù)據(jù)的地址信息計(jì)算地址偏移值,并將所述地址偏移值存儲(chǔ)至所述目標(biāo)指針中。
41、可選地,所述第二計(jì)算子單元,包括:
42、第二獲取模塊,用于獲取所述目標(biāo)指針與所述第二進(jìn)程對(duì)應(yīng)的第四地址信息,以及獲取所述共享數(shù)據(jù)與所述第二進(jìn)程對(duì)應(yīng)的第五地址信息;
43、計(jì)算模塊,用于計(jì)算所述第五地址信息對(duì)應(yīng)的數(shù)值和所述第四地址信息對(duì)應(yīng)的數(shù)值之間的差值,得到地址偏移值。
44、可選地,所述數(shù)據(jù)處理裝置,還包括:
45、識(shí)別子單元,用于識(shí)別所述第二進(jìn)程的進(jìn)程數(shù)據(jù)中的只讀數(shù)據(jù)和全局?jǐn)?shù)據(jù),所述全局?jǐn)?shù)據(jù)為對(duì)數(shù)據(jù)的更改會(huì)實(shí)時(shí)應(yīng)用到與應(yīng)用相關(guān)的所有進(jìn)程的數(shù)據(jù);
46、第五確定子單元,用于根據(jù)所述只讀數(shù)據(jù)和所述全局?jǐn)?shù)據(jù)確定共享數(shù)據(jù)。
47、可選地,所述第一創(chuàng)建子單元,包括:
48、調(diào)用模塊,用于基于所述第二進(jìn)程調(diào)用封裝了預(yù)設(shè)操作系統(tǒng)應(yīng)用接口的共享內(nèi)存管理類;
49、創(chuàng)建模塊,用于根據(jù)所述共享內(nèi)存管理類中的共享內(nèi)存創(chuàng)建函數(shù)創(chuàng)建共享內(nèi)存。
50、可選地,所述數(shù)據(jù)處理裝置還包括:
51、查詢子單元,用于響應(yīng)于對(duì)內(nèi)存空間中共享內(nèi)存的查詢指令,根據(jù)所述共享內(nèi)存管理類中的共享內(nèi)存查詢函數(shù)查找對(duì)應(yīng)的共享內(nèi)存;
52、釋放子單元,用于響應(yīng)于對(duì)所述共享內(nèi)存的釋放指令,根據(jù)所述共享內(nèi)存管理類中的共享內(nèi)存銷毀函數(shù)釋放所述共享內(nèi)存。
53、可選地,所述寫入子單元,包括:
54、加密模塊,用于對(duì)所述第二進(jìn)程的進(jìn)程數(shù)據(jù)中的共享數(shù)據(jù)進(jìn)行加密,得到加密共享數(shù)據(jù);
55、寫入模塊,用于將所述加密共享數(shù)據(jù)寫入所述共享內(nèi)存;
56、第二計(jì)算子單元,還用于:
57、根據(jù)所述目標(biāo)指針與所述加密共享數(shù)據(jù)的地址信息計(jì)算共享數(shù)據(jù)地址偏移值,并將所述共享數(shù)據(jù)地址偏移值存儲(chǔ)至所述目標(biāo)指針中。
58、可選地,所述數(shù)據(jù)處理裝置還包括:
59、第二寫入子單元,用于將所述加密共享數(shù)據(jù)對(duì)應(yīng)的第二密鑰數(shù)據(jù)寫入所述共享內(nèi)存;
60、第三計(jì)算子單元,用于根據(jù)所述目標(biāo)指針與所述第二密鑰數(shù)據(jù)的地址信息計(jì)算密鑰地址偏移值;
61、存儲(chǔ)子單元,用于將所述密鑰地址偏移值存儲(chǔ)至所述目標(biāo)指針中。
62、可選地,第二創(chuàng)建子單元,包括:
63、第三獲取模塊,用于獲取定義了目標(biāo)指針類型的共享內(nèi)存分配類;
64、構(gòu)建模塊,用于基于所述共享內(nèi)存分配類構(gòu)建數(shù)據(jù)結(jié)構(gòu)體,得到包含目標(biāo)指針的數(shù)據(jù)結(jié)構(gòu)體。
65、根據(jù)本公開的一方面,提供了一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器和處理器,所述存儲(chǔ)器存儲(chǔ)有計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)如上所述的數(shù)據(jù)處理方法。
66、根據(jù)本公開的一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的數(shù)據(jù)處理方法。
67、根據(jù)本公開的一方面,提供了一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被計(jì)算機(jī)設(shè)備的處理器讀取并執(zhí)行,使得該計(jì)算機(jī)設(shè)備執(zhí)行如上所述的數(shù)據(jù)處理方法。
68、本公開實(shí)施例中進(jìn)程對(duì)共享內(nèi)存中的數(shù)據(jù)進(jìn)行訪問時(shí),可以先確定需要訪問的數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)體。然后確定該數(shù)據(jù)結(jié)構(gòu)體中指針與訪問進(jìn)程對(duì)應(yīng)的地址信息以及指針中存儲(chǔ)的地址偏移值,并根據(jù)指針的地址信息和地址偏移值計(jì)算出待訪問的數(shù)據(jù)與訪問進(jìn)程對(duì)應(yīng)的地址信息。如此,訪問進(jìn)程便可以根據(jù)待訪問的數(shù)據(jù)與訪問進(jìn)程對(duì)應(yīng)的地址信息在共享內(nèi)存中準(zhǔn)確訪問到待訪問數(shù)據(jù)。如此,本公開構(gòu)建以存儲(chǔ)了地址偏移值的指針維護(hù)的數(shù)據(jù)結(jié)構(gòu)體,相對(duì)于構(gòu)建以存儲(chǔ)映射地址信息的指針維護(hù)的數(shù)據(jù)結(jié)構(gòu)體,可以將數(shù)據(jù)結(jié)構(gòu)體與創(chuàng)建進(jìn)程解綁,進(jìn)而避免了因內(nèi)存空間與不同進(jìn)程之間映射關(guān)系的不同導(dǎo)致訪問進(jìn)程根據(jù)創(chuàng)建進(jìn)程對(duì)應(yīng)的映射地址信息無法訪問到準(zhǔn)確數(shù)據(jù)的問題。這使得動(dòng)態(tài)存儲(chǔ)類型的數(shù)據(jù)可以在共享內(nèi)存中進(jìn)行進(jìn)程間共享,進(jìn)而可以大大降低多進(jìn)程運(yùn)行時(shí)計(jì)算機(jī)設(shè)備的內(nèi)存開銷。
69、本公開的其他特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本公開而了解。本公開的目的和其他優(yōu)點(diǎn)可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。