本技術(shù)涉及車載以太網(wǎng),尤其涉及一種內(nèi)存數(shù)據(jù)處理方法、裝置、介質(zhì)和電子設(shè)備。
背景技術(shù):
1、以太網(wǎng)驅(qū)動(dòng)分為接收和發(fā)送兩大主要部分。以太網(wǎng)報(bào)文從硬件接收經(jīng)由phy/mac再到協(xié)議棧,稱之為接收;協(xié)議棧報(bào)文,交由以太網(wǎng)硬件的過程稱之為發(fā)送。
2、但是在現(xiàn)有技術(shù)中,傳統(tǒng)裝置中系統(tǒng)的底層驅(qū)動(dòng)和協(xié)議??赡懿皇怯赏粋€(gè)供應(yīng)商提供,所以會(huì)考慮系統(tǒng)的可移植性、模塊耦合性最小因素,各個(gè)層之間的內(nèi)存是互相獨(dú)立的,各個(gè)層獨(dú)立完成內(nèi)存的分配和釋放,這樣能有效減少模塊耦合性和避免內(nèi)存泄漏。
3、具體而言,在接收流程中,驅(qū)動(dòng)層需要把接收的報(bào)文拷貝到協(xié)議棧,協(xié)議棧不使用驅(qū)動(dòng)層的內(nèi)存;在發(fā)送流程中,跟接收部分相反,協(xié)議棧把報(bào)文拷貝給驅(qū)動(dòng)層,由驅(qū)動(dòng)層調(diào)用硬件接口把報(bào)文發(fā)送出去。所以,各個(gè)層獨(dú)立管理自己的內(nèi)存,這樣不容易出現(xiàn)內(nèi)存泄漏、釋放兩次等問題,各層處理起來也比較簡(jiǎn)單,模塊耦合性小。
4、但是,正是因?yàn)楦鲗幽K之間獨(dú)立使用內(nèi)存,所以在接收和發(fā)送數(shù)據(jù)時(shí)均需要進(jìn)行內(nèi)存的拷貝,由此造成了數(shù)據(jù)傳遞效率較低等諸多問題。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)現(xiàn)有技術(shù)的上述問題,本發(fā)明公開了一種內(nèi)存數(shù)據(jù)處理方法,以通過內(nèi)存零拷貝和優(yōu)化內(nèi)存分配的技術(shù)手段,能夠有效提升以太網(wǎng)數(shù)據(jù)傳輸?shù)男省?/p>
2、為了達(dá)到上述目的,本發(fā)明提供了一種內(nèi)存數(shù)據(jù)處理方法,應(yīng)用于以太網(wǎng),所述以太網(wǎng)包括驅(qū)動(dòng)層以及協(xié)議層,所述驅(qū)動(dòng)層以及所述協(xié)議層共用目標(biāo)內(nèi)存空間;所述方法包括:
3、基于所述驅(qū)動(dòng)層從目標(biāo)內(nèi)存隊(duì)列中獲取至少一個(gè)內(nèi)存塊;所述目標(biāo)內(nèi)存隊(duì)列包括多個(gè)預(yù)設(shè)內(nèi)存塊,所述多個(gè)預(yù)設(shè)內(nèi)存塊基于對(duì)所述目標(biāo)內(nèi)存空間進(jìn)行分割得到;
4、在所述驅(qū)動(dòng)層接收到報(bào)文數(shù)據(jù)的情況下,將所述報(bào)文數(shù)據(jù)存入所述至少一個(gè)內(nèi)存塊中的第一目標(biāo)內(nèi)存塊;
5、基于所述協(xié)議層從所述第一目標(biāo)內(nèi)存塊中讀取所述報(bào)文數(shù)據(jù),對(duì)讀取的所述報(bào)文數(shù)據(jù)進(jìn)行處理,得到第一已處理數(shù)據(jù),將所述第一已處理數(shù)據(jù)發(fā)送至車輛執(zhí)行器。
6、優(yōu)選的,所述基于所述驅(qū)動(dòng)層從目標(biāo)內(nèi)存隊(duì)列中獲取至少一個(gè)內(nèi)存塊中包括:
7、基于所述驅(qū)動(dòng)層從第一內(nèi)存隊(duì)列中獲取至少一個(gè)第一內(nèi)存塊;所述目標(biāo)內(nèi)存隊(duì)列包括第一內(nèi)存隊(duì)列和第二內(nèi)存隊(duì)列,所述第一內(nèi)存隊(duì)列中的各第一內(nèi)存塊的內(nèi)存容量小于所述第二內(nèi)存隊(duì)列中的各第二內(nèi)存塊的內(nèi)存容量,所述第一內(nèi)存隊(duì)列中各所述第一內(nèi)存塊的內(nèi)存容量均相同,所述第二內(nèi)存隊(duì)列中各所述第二內(nèi)存塊的內(nèi)存容量均相同。
8、優(yōu)選的,所述將所述報(bào)文數(shù)據(jù)存入所述至少一個(gè)內(nèi)存塊中的第一目標(biāo)內(nèi)存塊之后,所述方法還包括:
9、在所述第一目標(biāo)內(nèi)存塊的第一數(shù)量為多個(gè)的情況下,從所述第二內(nèi)存隊(duì)列中獲取第二數(shù)量的第二內(nèi)存塊;所述第二數(shù)量是基于所述第一數(shù)量、所述第一目標(biāo)內(nèi)存塊的內(nèi)存容量以及所述第二內(nèi)存隊(duì)列中各第二內(nèi)存塊的內(nèi)存容量確定;
10、合并所述第一數(shù)量的第一目標(biāo)內(nèi)存塊中的報(bào)文數(shù)據(jù)至所述第二內(nèi)存塊中;
11、基于所述協(xié)議層從所述第二內(nèi)存塊中讀取所述報(bào)文數(shù)據(jù),對(duì)讀取的所述報(bào)文數(shù)據(jù)進(jìn)行處理,得到第二已處理數(shù)據(jù),將所述第二已處理數(shù)據(jù)發(fā)送至車輛執(zhí)行器。
12、優(yōu)選的,所述從所述第二內(nèi)存隊(duì)列中獲取第二數(shù)量的第二內(nèi)存塊中包括:
13、基于獲取函數(shù)得到所述第二內(nèi)存塊的存儲(chǔ)地址;所述獲取函數(shù)能夠基于輸入所述第二內(nèi)存塊的內(nèi)存容量,以所述第二內(nèi)存塊的起始地址為基準(zhǔn)進(jìn)行向后偏移預(yù)設(shè)偏移量得到所述第二內(nèi)存塊的存儲(chǔ)地址,所述第二內(nèi)存塊從存儲(chǔ)地址對(duì)應(yīng)的空間用于存儲(chǔ)所述報(bào)文數(shù)據(jù),所述預(yù)設(shè)偏移量基于所述第二內(nèi)存塊的結(jié)構(gòu)信息確定。
14、優(yōu)選的,所述將所述第二已處理數(shù)據(jù)發(fā)送至車輛執(zhí)行器后,所述方法還包括:
15、清空所述第二內(nèi)存塊中以所述第二內(nèi)存塊的存儲(chǔ)地址為起點(diǎn)的存儲(chǔ)空間中的所述第二已處理數(shù)據(jù),基于歸還函數(shù)得到所述第二內(nèi)存塊的起始地址;所述歸還函數(shù)能夠以所述第二內(nèi)存塊的存儲(chǔ)地址為基準(zhǔn)進(jìn)行向前偏移預(yù)設(shè)偏移量得到所述第二內(nèi)存塊的起始地址,所述預(yù)設(shè)偏移量基于所述第二內(nèi)存塊的結(jié)構(gòu)信息確定;
16、基于所述第二內(nèi)存塊的起始地址,歸還所述第二內(nèi)存塊于所述第二內(nèi)存隊(duì)列中。
17、優(yōu)選的,所述方法還包括:
18、在所述協(xié)議層接收到所述車輛執(zhí)行器發(fā)送的目標(biāo)數(shù)據(jù)的情況下,基于所述協(xié)議層獲取與所述目標(biāo)數(shù)據(jù)的數(shù)據(jù)大小相匹配的第二目標(biāo)內(nèi)存塊;
19、在接收到所述目標(biāo)數(shù)據(jù)的情況下,將所述目標(biāo)數(shù)據(jù)存入所述第二目標(biāo)內(nèi)存塊中;
20、基于所述協(xié)議層從所述第二目標(biāo)內(nèi)存塊中讀取所述目標(biāo)數(shù)據(jù),對(duì)讀取的所述目標(biāo)數(shù)據(jù)進(jìn)行處理,得到第三已處理數(shù)據(jù),將所述第三已處理數(shù)據(jù)發(fā)送至以太網(wǎng)卡。
21、優(yōu)選的,所述將所述報(bào)文數(shù)據(jù)存入所述至少一個(gè)內(nèi)存塊中的第一目標(biāo)內(nèi)存塊中包括:
22、基于所述第一目標(biāo)內(nèi)存塊的起始地址進(jìn)行向后偏移預(yù)設(shè)偏移量,得到所述第一目標(biāo)內(nèi)存塊的存儲(chǔ)地址;所述預(yù)設(shè)偏移量基于所述第一目標(biāo)內(nèi)存塊的結(jié)構(gòu)信息確定;
23、將所述報(bào)文數(shù)據(jù)存儲(chǔ)至以所述第一目標(biāo)內(nèi)存塊的存儲(chǔ)地址為起點(diǎn)的存儲(chǔ)空間中。
24、本發(fā)明還提供了一種內(nèi)存數(shù)據(jù)處理裝置應(yīng)用于以太網(wǎng),所述以太網(wǎng)包括驅(qū)動(dòng)層以及協(xié)議層,所述驅(qū)動(dòng)層以及所述協(xié)議層共用目標(biāo)內(nèi)存空間,所述裝置包括:
25、第一獲取模塊,用于基于所述驅(qū)動(dòng)層從目標(biāo)內(nèi)存隊(duì)列中獲取至少一個(gè)內(nèi)存塊;所述目標(biāo)內(nèi)存隊(duì)列包括多個(gè)預(yù)設(shè)內(nèi)存塊,所述多個(gè)預(yù)設(shè)內(nèi)存塊基于對(duì)所述目標(biāo)內(nèi)存空間進(jìn)行分割得到;
26、第一存儲(chǔ)模塊,用于在所述驅(qū)動(dòng)層接收到報(bào)文數(shù)據(jù)的情況下,將所述報(bào)文數(shù)據(jù)存入所述至少一個(gè)內(nèi)存塊中的第一目標(biāo)內(nèi)存塊;
27、第一業(yè)務(wù)模塊,用于基于所述協(xié)議層從所述第一目標(biāo)內(nèi)存塊中讀取所述報(bào)文數(shù)據(jù),對(duì)讀取的所述報(bào)文數(shù)據(jù)進(jìn)行處理,得到第一已處理數(shù)據(jù),將所述第一已處理數(shù)據(jù)發(fā)送至車輛執(zhí)行器。
28、本發(fā)明還提供了一種電子設(shè)備,所述設(shè)備包括處理器和存儲(chǔ)器,所述存儲(chǔ)器中存儲(chǔ)有至少一條指令或至少一段程序,所述至少一條指令或所述至少一段程序由所述處理器加載并執(zhí)行以實(shí)現(xiàn)上述所述復(fù)合微電網(wǎng)控制方法。
29、本發(fā)明還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)中存儲(chǔ)有至少一條指令、至少一段程序、代碼集或指令集,所述至少一條指令、至少一段程序、代碼集或指令集由處理器加載并執(zhí)行,以實(shí)現(xiàn)上述所述復(fù)合微電網(wǎng)控制方法。
30、由于上述技術(shù)方案,本技術(shù)所述的一種具有以下有益效果:
31、本發(fā)明公開的內(nèi)存數(shù)據(jù)處理方法,通過驅(qū)動(dòng)層和協(xié)議層共用目標(biāo)內(nèi)存空間,并預(yù)分配目標(biāo)內(nèi)存空間為多個(gè)內(nèi)存塊,以形成目標(biāo)內(nèi)存隊(duì)列,使得驅(qū)動(dòng)層在接收來自以太網(wǎng)卡的報(bào)文數(shù)據(jù)時(shí),直接將報(bào)文數(shù)據(jù)存儲(chǔ)至內(nèi)存塊中,協(xié)議層能夠在內(nèi)存塊中直接對(duì)報(bào)文數(shù)據(jù)進(jìn)行讀取和處理,這樣報(bào)文數(shù)據(jù)的處理也僅是發(fā)生在內(nèi)存塊的內(nèi)部,無需對(duì)報(bào)文數(shù)據(jù)再進(jìn)行復(fù)制,這樣設(shè)置避免了在數(shù)據(jù)處理過程中對(duì)內(nèi)存的多次拷貝,不僅提高了報(bào)文數(shù)據(jù)處理的效率,還減少了cpu的負(fù)擔(dān),相應(yīng)地降低cpu的負(fù)荷,從而整體提升了系統(tǒng)的性能。此外,通過預(yù)設(shè)內(nèi)存塊形成目標(biāo)內(nèi)存隊(duì)列的方式,還實(shí)現(xiàn)了內(nèi)存塊的集中管理和分配。