專利名稱:報(bào)文接收方法、報(bào)文接收模塊、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)通信技術(shù),尤其涉及一種報(bào)文接收方法、報(bào)文接收模塊、裝置及系統(tǒng)。
背景技術(shù):
直接訪問(wèn)內(nèi)存(Direct Memory Access, DMA)技術(shù)是一種外設(shè)與內(nèi)存之間高速傳輸數(shù)據(jù)的方法,外部設(shè)備接口卡以DMA方式可以直接訪問(wèn)主機(jī)存儲(chǔ)器中的數(shù)據(jù)。DMA傳輸技術(shù)采用兩種關(guān)鍵技術(shù),即報(bào)文緩沖區(qū)描述符維護(hù)和中斷處理例程。報(bào)文緩沖區(qū)描述符維護(hù)主要用于對(duì)描述符以及描述符所指的報(bào)文緩沖區(qū)的申請(qǐng)和管理;中斷處理例程主要涉及緩沖區(qū)內(nèi)報(bào)文處理和緩沖區(qū)的釋放。但是,接收和發(fā)送描述符的同步需要軟硬件協(xié)同維護(hù),需要設(shè)置多種寄存器,例如,描述符基地址寄存器、中斷寄存器、中斷閾值寄存器、描述符數(shù)量寄存器和超時(shí)寄存器等,不僅處理復(fù)雜,而且占用了大量中央處理器(Central Processing Unit, CPU)的開(kāi)銷以及硬件邏輯資源。中斷觸發(fā)機(jī)制需要根據(jù)設(shè)定的閾值向CPU產(chǎn)生中斷,若中斷次數(shù)過(guò)于頻繁,會(huì)造成大量的進(jìn)程切換開(kāi)銷,影響CPU的工作效率。因此,現(xiàn)有技術(shù)中的DMA傳輸技術(shù)存在系統(tǒng)處理效率較低的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明提供一種用于提高DMA傳輸技術(shù)的處理效率,并減小系統(tǒng)開(kāi)銷的報(bào)文接收方法、報(bào)文接收模塊、裝置及系統(tǒng)。本發(fā)明的第一個(gè)方面是提供一種報(bào)文接收方法,包括接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文;其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址;將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文;清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。本發(fā)明的另一個(gè)方面是提供一種報(bào)文接收模塊,包括第一接收單元,用于在接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文;、
其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址;第一發(fā)送單元,用于將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文;第一處理單元,用于在清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。
本發(fā)明的又一個(gè)方面是提供一種網(wǎng)絡(luò)接口卡,包括上述報(bào)文接收模塊。本發(fā)明還提供了一種報(bào)文接收系統(tǒng),包括上述網(wǎng)絡(luò)接口卡、內(nèi)存和中央處理器。本發(fā)明提供的報(bào)文接收方法、報(bào)文接收模塊、裝置及系統(tǒng),通過(guò)將接收到的報(bào)文構(gòu)造為包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的描述符和下一報(bào)文緩沖區(qū)的描述符的總線報(bào)文,使得CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文時(shí)能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠通過(guò)輪詢的方式順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,不需要使用多種寄存器進(jìn)行配合,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。
圖I為本發(fā)明報(bào)文接收方法一實(shí)施例的流程圖;圖2為本發(fā)明實(shí)施例內(nèi)存中報(bào)文緩沖區(qū)格式的示意圖;圖3為本發(fā)明報(bào)文接收方法另一實(shí)施例的流程圖;圖4為本發(fā)明實(shí)施例報(bào)文接收模塊接收?qǐng)?bào)文的流程圖;圖5為本發(fā)明實(shí)施例中央處理器接收?qǐng)?bào)文的流程圖;圖6為本發(fā)明報(bào)文接收模塊實(shí)施例的結(jié)構(gòu)示意圖;圖7為本發(fā)明報(bào)文接收系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例報(bào)文接收系統(tǒng)的一種系統(tǒng)結(jié)構(gòu)。
具體實(shí)施例方式本發(fā)明各實(shí)施例中的技術(shù)方案,是對(duì)主機(jī)內(nèi)存從DMA控制器接收?qǐng)?bào)文的方法進(jìn)行的改進(jìn)。DMA控制器采用DMA技術(shù)實(shí)現(xiàn)與主機(jī)內(nèi)存之間的報(bào)文收發(fā),其中,DMA控制器包括DMA發(fā)送引擎和DMA接收引擎。DMA發(fā)送引擎用于將主機(jī)內(nèi)存中的報(bào)文發(fā)送至外置設(shè)備或者網(wǎng)絡(luò)設(shè)備等;DMA接收引擎用于將從外置設(shè)備或網(wǎng)絡(luò)設(shè)備接收到的報(bào)文發(fā)送至主機(jī)內(nèi)存。本發(fā)明各實(shí)施例中的報(bào)文接收模塊包括DMA接收引擎和相關(guān)的功能模塊,即在以下各實(shí)施例中的報(bào)文接收模塊具有DMA接收引擎的功能以及相關(guān)的控制和處理功能;主機(jī)內(nèi)存在以下各實(shí)施例中還被簡(jiǎn)稱為內(nèi)存;中央處理器在以下各實(shí)施例中還被簡(jiǎn)稱為CPU。圖I為本發(fā)明報(bào)文接收方法一實(shí)施例的流程圖,如圖I所示,該方法包括步驟101、接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文。
其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址。報(bào)文接收模塊從外置設(shè)備或者網(wǎng)絡(luò)設(shè)備接收到報(bào)文之后,需要將接收到的報(bào)文構(gòu)造為總線報(bào)文,該總線報(bào)文包括描述符域和報(bào)文域。
具體的構(gòu)造方法為,從該報(bào)文接收模塊中存儲(chǔ)的第一描述符隊(duì)列中讀取第一描述符和第二描述符,將第一描述符中的物理地址和虛擬地址,第二描述符中的虛擬地址,以及控制信息與接收到的報(bào)文構(gòu)造為總線報(bào)文。其中,第一描述符中的物理地址和虛擬地址,第二描述符中的虛擬地址和控制信息存儲(chǔ)在總線報(bào)文的描述符域中,接收到的報(bào)文存儲(chǔ)在總線報(bào)文的報(bào)文域中??偩€報(bào)文中所包含信息的順序由報(bào)文接收模塊和預(yù)先存儲(chǔ)在CPU中的軟件程序進(jìn)行控制,根據(jù)通信雙方的協(xié)議進(jìn)行構(gòu)造即可。其中,報(bào)文接收模塊中存儲(chǔ)的第一描述符隊(duì)列,包括至少兩個(gè)順序排列的描述符,每個(gè)描述符均包括一個(gè)物理地址和一個(gè)虛擬地址,并且同一個(gè)描述符中物理地址和虛擬地址對(duì)應(yīng)著內(nèi)存中的同一存儲(chǔ)空間。區(qū)別在于,物理地址是內(nèi)存中存儲(chǔ)報(bào)文的存儲(chǔ)空間的實(shí)際地址,用于供其他裝置或模塊根據(jù)該物理地址將報(bào)文寫(xiě)入內(nèi)存中對(duì)應(yīng)的存儲(chǔ)空間中,當(dāng)CPU需要讀取內(nèi)存中該存儲(chǔ)空間的報(bào)文時(shí),則需要根據(jù)虛擬地址訪問(wèn)該存儲(chǔ)空間,物理地址和虛擬地址指向的是內(nèi)存中的同一存儲(chǔ)空間。由于第一描述符隊(duì)列中的描述符是順序排列的,因此將其中位于隊(duì)列起始位置的描述符定義為第一描述符,將順序排列在第一描述之后的描述符定義為第二描述符。第一和第二僅用于標(biāo)記描述符在隊(duì)列中的位置次序。在構(gòu)造總線報(bào)文時(shí),將第一描述符中的物理地址和虛擬地址所指向的內(nèi)存中的存儲(chǔ)空間,作為該總線報(bào)文的目的地;除了包括目的地地址以外,還在總線報(bào)文中攜帶第二描述符中的虛擬地址,該第二描述符中的虛擬地址所指向的內(nèi)存中的存儲(chǔ)空間,是順序排列在總線報(bào)文發(fā)送目的地之后的存儲(chǔ)空間,即下一報(bào)文緩沖區(qū)??刂菩畔⒅邪ㄔ摽偩€報(bào)文的傳輸狀態(tài)信息,此外還包括該總線報(bào)文的報(bào)文域中報(bào)文的長(zhǎng)度和傳輸報(bào)文的端口信息等保證報(bào)文正常傳輸?shù)男畔?。將第一描述符中的物理地址和虛擬地址、第二描述符中的虛擬地址,以及控制信息存儲(chǔ)在總線報(bào)文的描述符域中,將接收到的報(bào)文存儲(chǔ)在報(bào)文域中,將描述符域和報(bào)文域構(gòu)造為總線報(bào)文。內(nèi)存中的接收總線報(bào)文的報(bào)文緩沖區(qū)采用的是鏈表形式,具體的,當(dāng)前報(bào)文緩沖區(qū)中保存的第二描述符中的虛擬地址,即為指向下一報(bào)文緩沖區(qū)的指針。可以理解的是,為了保證內(nèi)存能夠正常接收到報(bào)文接收模塊所發(fā)送的總線報(bào)文,總線報(bào)文的格式與內(nèi)存中接收總線報(bào)文的報(bào)文緩沖區(qū)的格式是一致的。圖2為本發(fā)明實(shí)施例內(nèi)存中報(bào)文緩沖區(qū)格式的示意圖,如圖2所示,對(duì)報(bào)文緩沖區(qū)的格式進(jìn)行舉例說(shuō)明。報(bào)文緩沖區(qū)由描述符域和報(bào)文域構(gòu)成,其中設(shè)報(bào)文緩沖區(qū)的大小為2KB,分為64個(gè)單元,每個(gè)單元的大小為256位。其中,第I個(gè)單元為報(bào)文緩沖區(qū)的描述符域,包括當(dāng)前報(bào)文緩沖區(qū)的64位物理地址Phy_Addr,64位虛擬地址Virt_Addr,64位控制信息Ctrl_Status以及當(dāng)前報(bào)文緩沖區(qū)之后的下一報(bào)文緩沖區(qū)的64位虛擬地址Next_Virt_Addr,其中控制信息中包括I位硬件傳輸完成標(biāo)識(shí)位HWCpl,其余位保留;第2個(gè)單元至第64個(gè)單元為報(bào)文域Packet。其中,Phy_Addr為當(dāng)前報(bào)文緩沖區(qū)的物理地址,報(bào)文接收模塊可以根據(jù)該物理地址將報(bào)文寫(xiě)入該當(dāng)前報(bào)文緩沖區(qū)。Virt_Addr為當(dāng)前報(bào)文緩沖區(qū)的虛擬地址,CPU可以根據(jù)該虛擬地址訪問(wèn)該當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文。Ctrl_Status為該總線報(bào)文的控制信息,主要包括傳輸完成標(biāo)識(shí)位HWCpl。若報(bào)文緩沖區(qū)未接收到總線報(bào)文時(shí),該報(bào)文緩沖區(qū)的描述符域中該標(biāo)識(shí)位為0,報(bào)文接收模塊所構(gòu)造的總線報(bào)文中該標(biāo)識(shí)位為1,那么當(dāng)報(bào)文緩沖區(qū)接收到總線報(bào)文之后,該標(biāo)識(shí)位即更新為1,從而說(shuō)明報(bào)文緩沖區(qū)接收到了總線報(bào)文,報(bào)文接收模塊與內(nèi)存的報(bào)文傳輸完成;若將報(bào) 文接收模塊中控制信息設(shè)為0和報(bào)文緩沖區(qū)中控制信息設(shè)為1,同樣可以實(shí)現(xiàn)內(nèi)存在接收到總線報(bào)文之后控制信息的更新,并且控制信息的形式并不僅限于此。Next_Virt_Addr為該當(dāng)前報(bào)文緩沖區(qū)之后的下一報(bào)文緩沖區(qū)的虛擬地址,用于供CPU在訪問(wèn)當(dāng)前報(bào)文緩沖區(qū)時(shí)獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而在需要訪問(wèn)下一報(bào)文緩沖區(qū)時(shí),利用該虛擬地址即可實(shí)現(xiàn)訪問(wèn)。報(bào)文域用于存儲(chǔ)接收到的報(bào)文內(nèi)容。由于報(bào)文接收模塊所發(fā)送的總線報(bào)文的格式與報(bào)文緩沖區(qū)的格式是一致的,報(bào)文緩沖區(qū)在未接收到總線報(bào)文時(shí),其描述符域中包括當(dāng)前報(bào)文緩沖區(qū)、下一報(bào)文緩沖區(qū)的地址信息和控制信息,而報(bào)文域?yàn)榭眨划?dāng)前報(bào)文緩沖區(qū)接收到總線報(bào)文之后,總線報(bào)文的內(nèi)容覆蓋當(dāng)前報(bào)文緩沖區(qū)的內(nèi)容,從而使得當(dāng)前報(bào)文緩沖區(qū)中的控制信息得到更新,并且報(bào)文域中寫(xiě)入了報(bào)文內(nèi)容??梢岳斫獾氖?,以上舉例說(shuō)明的內(nèi)容僅為本發(fā)明實(shí)施例中的一種實(shí)現(xiàn)方式,可選的實(shí)現(xiàn)方式并不僅限于此。步驟102、將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文。報(bào)文接收模塊在構(gòu)造完總線報(bào)文之后,根據(jù)該總線報(bào)文的描述符域中所攜帶的從第一描述符中讀取到的物理地址,將總線報(bào)文發(fā)送至該物理地址對(duì)應(yīng)的報(bào)文緩沖區(qū),該報(bào)文緩沖區(qū)即為當(dāng)前報(bào)文緩沖區(qū)。報(bào)文接收模塊將總線報(bào)文發(fā)送至內(nèi)存之后,CPU可以根據(jù)對(duì)應(yīng)的報(bào)文緩沖區(qū)的虛擬地址,從內(nèi)存中讀取該報(bào)文緩沖區(qū)的報(bào)文域中的報(bào)文內(nèi)容。CPU對(duì)當(dāng)前報(bào)文緩沖區(qū)的描述符域中的控制信息進(jìn)行判斷,若判斷出當(dāng)前報(bào)文緩沖區(qū)已接收到報(bào)文,則讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文域中報(bào)文,若判斷出當(dāng)前報(bào)文緩沖區(qū)中未接收到報(bào)文,則處于等待狀態(tài)。步驟103、清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。報(bào)文接收模塊在將構(gòu)造的總線報(bào)文發(fā)送至內(nèi)存之后,將第一描述符隊(duì)列中的第一描述符對(duì)應(yīng)的內(nèi)容清除,即,將第一描述符中的物理地址和虛擬地址清除。并且,由于第一描述符隊(duì)列中順序排列有兩個(gè)或多個(gè)描述符,若第一描述符隊(duì)列中的描述符為三個(gè)或以上時(shí),將該第一描述符隊(duì)列中的描述符順序進(jìn)行移位,也就是說(shuō),當(dāng)?shù)谝幻枋龇械膬?nèi)容被清除之后,第一描述符為空,將描述符整體向前移位,使位于第二描述符中的物理地址和虛擬地址移位到第一描述符中,在原第一描述符隊(duì)列中排列在第三個(gè)位置的描述符移位到第二描述符中,以此類推,描述符均向前移一位,相應(yīng)地,第一描述符隊(duì)列中末尾的描述符的存儲(chǔ)位置為空。第一描述符和第二描述符中的物理地址和虛擬地址分別得到了更新。在實(shí)際應(yīng)用中,報(bào)文接收模塊在構(gòu)造總線報(bào)文時(shí),從第一描述符隊(duì)列中讀取第一描述符和第二描述符的方式還可以為,將讀取到的第一描述符存入寄存器Cur_DeS,將讀取到的第二描述符存入寄存器NeXt_DeS,利用這兩個(gè)寄存器中的描述符構(gòu)造總線報(bào)文;并且第一描述符隊(duì)列中的前兩個(gè)描述符被讀取之后,把給兩個(gè)描述符清除,隊(duì)列中的描述符整體向前移位,使得第一描述符隊(duì)列的初始的存儲(chǔ)描述符的位置不為空;從而在報(bào)文接收模塊將該總線報(bào)文發(fā)送出去之后,在構(gòu)造下一總線報(bào)文時(shí),將原寄存器Cur_DeS中存儲(chǔ)的物理地址和虛擬地址清除,原寄存器Next_Des中的物理地址和虛擬地址存入寄存器Cur_Des,繼續(xù)從第一描述符隊(duì)列中的初始位置讀取新的描述符,存入寄存器Next_DeS,并以此 類推。本發(fā)明實(shí)施例中的報(bào)文接收方法,通過(guò)將接收到的報(bào)文構(gòu)造為包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的描述符和下一報(bào)文緩沖區(qū)的描述符的總線報(bào)文,使得CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文時(shí)能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠通過(guò)輪詢的方式順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,不需要使用多種寄存器進(jìn)行配合,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。進(jìn)一步地,在上述實(shí)施例的基礎(chǔ)上,執(zhí)行步驟103之后,該方法還包括步驟104、接收所述中央處理器在讀取到所述當(dāng)前報(bào)文緩沖區(qū)內(nèi)的報(bào)文之后所發(fā)送的,對(duì)所述當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址進(jìn)行回收的回收指令。步驟105、將所述回收指令中攜帶的物理地址和虛擬地址存入所述第一描述符隊(duì)列的末尾。CPU在從當(dāng)前報(bào)文緩沖區(qū)中讀取到報(bào)文之后,將讀取到的報(bào)文發(fā)送到網(wǎng)絡(luò)協(xié)議棧,并且向報(bào)文接收模塊發(fā)送回收指令,該回收指令中攜帶有當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址,也就是說(shuō),該報(bào)文緩沖區(qū)可以繼續(xù)用來(lái)接收?qǐng)?bào)文接收模塊所發(fā)送的總線報(bào)文。此時(shí),該當(dāng)前報(bào)文緩沖區(qū)中的描述符域中的控制信息被更新為未接收到總線報(bào)文的狀態(tài),并且報(bào)文域中的內(nèi)容保留,等待該報(bào)文緩沖區(qū)接收到后續(xù)的總線報(bào)文時(shí),該報(bào)文域中的內(nèi)容將被新的總線報(bào)文的報(bào)文域中的內(nèi)容覆蓋。報(bào)文接收模塊在接收到CPU發(fā)送的回收指令后,將該回收指令中攜帶的物理地址和虛擬地址存儲(chǔ)在第一描述符隊(duì)列的末尾的空位上。本發(fā)明實(shí)施例中的報(bào)文接收方法,通過(guò)在CPU讀取完內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的報(bào)文后,指示報(bào)文接收模塊對(duì)當(dāng)前報(bào)文緩沖區(qū)的描述符進(jìn)行回收,存入第一描述符隊(duì)列的末尾,以使報(bào)文接收模塊順序從第一描述符隊(duì)列中讀取描述符構(gòu)造總線報(bào)文時(shí),可以連續(xù)獲取到可用的描述符,從而避免了報(bào)文接收模塊在可用描述符全部被使用之后發(fā)起中斷的動(dòng)作,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。圖3為本發(fā)明報(bào)文接收方法另一實(shí)施例的流程圖,在上述各實(shí)施例的基礎(chǔ)上,執(zhí)行步驟101之前,如圖3所示,該方法還包括步驟200、接收所述中央處理器在對(duì)所述內(nèi)存進(jìn)行初始化之后,發(fā)送的所述內(nèi)存中的第二描述符隊(duì)列的基地址,以及所述第二描述符隊(duì)列內(nèi)描述符的數(shù)量。其中,所述第二描述符隊(duì)列存儲(chǔ)有所述內(nèi)存中的至少兩個(gè)報(bào)文緩沖區(qū)各自的描述符,所述描述符包括所述報(bào)文緩沖區(qū)在所述內(nèi)存中的物理地址和虛擬地址。步驟201、將根據(jù)所述基地址從所述內(nèi)存中讀取到的所述數(shù)量的描述符,作為所述第一描述符隊(duì)列。在報(bào)文接收模塊接收?qǐng)?bào)文之前,需要先獲取用于構(gòu)造總線報(bào)文的第一描述符隊(duì)列。具體方法為,CPU在對(duì)內(nèi)存進(jìn)行初始化時(shí),會(huì)將內(nèi)存中初始化的至少兩個(gè)報(bào)文緩沖區(qū)的描述符存儲(chǔ)在隊(duì)列中,該隊(duì)列即為第二描述符隊(duì)列。第二描述符隊(duì)列中保存了該至少兩個(gè)報(bào)文緩沖區(qū)各自的描述符,每個(gè)報(bào)文緩沖區(qū)的描述符包括該報(bào)文緩沖區(qū)的物理地址和與該物理地址對(duì)應(yīng)的虛擬地址;CPU將第二描述符隊(duì)列的基地址和第二描述符隊(duì)列中存儲(chǔ)的描述符的數(shù)量,發(fā)送給報(bào)文接收模塊,其中該基地址為存儲(chǔ)第二描述符隊(duì)列的起始的物理地址;報(bào)文接收模塊根據(jù)該基地址和數(shù)量,從內(nèi)存中該基地址對(duì)應(yīng)的存儲(chǔ)空間,讀取該數(shù)量的描述符,并將讀取到的描述符順序組成第一描述符隊(duì)列,用于構(gòu)造總線報(bào)文。 本發(fā)明實(shí)施例中的報(bào)文接收方法,通過(guò)CPU對(duì)內(nèi)存進(jìn)行初始化時(shí),獲取內(nèi)存中的報(bào)文緩沖區(qū)的描述符,用于構(gòu)造總線報(bào)文,由于CPU在讀取完的報(bào)文緩沖區(qū)的描述符之后,會(huì)告知報(bào)文接收模塊對(duì)該描述符進(jìn)行回收,使得報(bào)文接收模塊在內(nèi)存初始化時(shí)獲得的描述符能夠被循環(huán)利用,無(wú)需向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文時(shí),其獲知當(dāng)前報(bào)文緩沖區(qū)的虛擬地址的方法有以下兩種。第一種情況為,若所述總線報(bào)文為向所述內(nèi)存發(fā)送的首個(gè)總線報(bào)文,也就是說(shuō),CPU在對(duì)內(nèi)存進(jìn)行初始化之后,訪問(wèn)內(nèi)存中的第一個(gè)報(bào)文緩沖區(qū)的情況。CPU對(duì)內(nèi)存進(jìn)行初始化之后,內(nèi)存中存儲(chǔ)的第二描述符隊(duì)列內(nèi)的首個(gè)描述符中的虛擬地址即為第一個(gè)報(bào)文緩沖區(qū)的虛擬地址,CPU從第二描述符隊(duì)列中讀取首個(gè)描述符的虛擬地址,即可訪問(wèn)內(nèi)存中對(duì)應(yīng)的報(bào)文緩沖區(qū),獲得當(dāng)前報(bào)文緩沖區(qū)的報(bào)文域中的報(bào)文內(nèi)容。第二種情況為,若所述總線報(bào)文不是向所述內(nèi)存發(fā)送的首個(gè)總線報(bào)文,也就是說(shuō),CPU已經(jīng)從內(nèi)存中讀取到了報(bào)文緩沖區(qū)中的報(bào)文,則CPU從該已讀取的報(bào)文緩沖區(qū)的描述符域中可以獲知準(zhǔn)備進(jìn)行讀取的報(bào)文緩沖區(qū)的虛擬地址。CPU根據(jù)該虛擬地址即可訪問(wèn)內(nèi)存中的當(dāng)前報(bào)文緩沖區(qū),讀取當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文域內(nèi)的報(bào)文內(nèi)容。依此類推,根據(jù)總線報(bào)文的結(jié)構(gòu)和報(bào)文緩沖區(qū)的格式可知,CPU從當(dāng)前報(bào)文緩沖區(qū)的描述符域中能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠根據(jù)獲知到的該虛擬地址訪問(wèn)下一報(bào)文緩沖區(qū)。本發(fā)明實(shí)施例中的報(bào)文接收方法,CPU在對(duì)內(nèi)存初始化之后,根據(jù)首個(gè)報(bào)文緩沖區(qū)的虛擬地址讀取報(bào)文之后,即可根據(jù)當(dāng)前報(bào)文緩沖區(qū)的描述符域中的下一報(bào)文緩沖區(qū)的虛擬地址,訪問(wèn)下一報(bào)文緩沖區(qū),并利用此方法輪詢內(nèi)存中的報(bào)文緩沖區(qū),不需要單獨(dú)維護(hù)描述符列表,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。、
圖4為本發(fā)明實(shí)施例報(bào)文接收模塊接收?qǐng)?bào)文的流程圖,如圖4所示,報(bào)文接收模塊接收?qǐng)?bào)文的流程包括步驟400、報(bào)文接收模塊在接收?qǐng)?bào)文之前,需要進(jìn)行初始化,從CPU中的第二描述符隊(duì)列中讀取內(nèi)存中至少兩個(gè)報(bào)文緩沖區(qū)的描述符,將讀取到的描述符存入第一描述符隊(duì)列中;步驟401、報(bào)文接收模塊檢測(cè)·是否接收到報(bào)文,若未接收到報(bào)文,則循環(huán)執(zhí)行步驟401,等待接收?qǐng)?bào)文;若接收到報(bào)文,則繼續(xù)執(zhí)行步驟402 ;步驟402、報(bào)文接收模塊在接收到報(bào)文之后,申請(qǐng)報(bào)文緩沖區(qū)的描述符,即從第一描述符隊(duì)列中申請(qǐng)描述符,從第一描述符隊(duì)列中位于隊(duì)列起始位置的描述符和順序排列在該描述符之后的描述符,分別存入寄存器Cur_Des和寄存器Next_Des ; 步驟403、報(bào)文接收模塊提取寄存器Cur_Des中的物理地址Phy_Addr和虛擬地址Virt_Addr,準(zhǔn)備將構(gòu)造的總線報(bào)文存入該描述符對(duì)應(yīng)的內(nèi)存中的當(dāng)前報(bào)文緩沖區(qū)中;提取寄存器Next_Des中的虛擬地址Virt_Addr,作為Nest_Virt_Addr,用于構(gòu)造總線報(bào)文時(shí)攜帶于總線報(bào)文的描述符域中,以使CPU根據(jù)該虛擬地址獲知當(dāng)前報(bào)文緩沖區(qū)之后的下一報(bào)文緩沖區(qū)的存儲(chǔ)地址;步驟404、報(bào)文接收模塊利用從寄存器Cur_Des和寄存器NeXt_Des中提取到的物理地址和虛擬地址,以及接收到的報(bào)文和傳輸報(bào)文所需要的控制信息,構(gòu)造包含上述各數(shù)據(jù)的總線報(bào)文;步驟405、報(bào)文接收模塊將構(gòu)造的總線報(bào)文寫(xiě)入內(nèi)存中的報(bào)文緩沖區(qū),該報(bào)文緩沖區(qū)即為報(bào)文接收模塊從寄存器Cur_DeS中提取到的物理地址對(duì)應(yīng)的當(dāng)前報(bào)文緩沖區(qū);步驟406、報(bào)文接收模塊在將總線報(bào)文寫(xiě)入內(nèi)存之后,將寄存器Next_Des中的描述符寫(xiě)入寄存器Cur_Des中,繼續(xù)從第一描述符隊(duì)列中申請(qǐng)新的描述符存入寄存器Next_Des中,并繼續(xù)執(zhí)行步驟401,等待接收?qǐng)?bào)文,相應(yīng)地執(zhí)行后續(xù)操作。圖5為本發(fā)明實(shí)施例中央處理器接收?qǐng)?bào)文的流程圖,如圖5所示,中央處理器接收?qǐng)?bào)文的流程包括步驟500、CPU提取線程參數(shù),根據(jù)對(duì)內(nèi)存進(jìn)行初始化時(shí),內(nèi)存中存儲(chǔ)的第二描述符隊(duì)列中首個(gè)報(bào)文緩沖區(qū)的虛地址,訪問(wèn)讀取該虛地址對(duì)應(yīng)的報(bào)文緩沖區(qū);步驟501、CPU根據(jù)傳輸完成標(biāo)識(shí)位HWCpl,判斷當(dāng)前報(bào)文緩沖區(qū)內(nèi)是否有報(bào)文,由于該報(bào)文緩沖區(qū)未接收到總線報(bào)文時(shí),其HWCpl為0,在接收到總線報(bào)文之后,HWCpl為I ;從而根據(jù)HWCpl若判斷出當(dāng)前報(bào)文緩沖區(qū)中未接收到總線報(bào)文,則循環(huán)執(zhí)行步驟501,等待接收總線報(bào)文;若判斷出當(dāng)前報(bào)文緩沖區(qū)中已接收到總線報(bào)文,則執(zhí)行步驟502 ;步驟502、CPU在接收到總線報(bào)文之后,提取總線報(bào)文的報(bào)文域中報(bào)文的摘要信息,并執(zhí)行步驟503將摘要信息存儲(chǔ)到摘要隊(duì)列中,以供系統(tǒng)對(duì)所接收到的報(bào)文的數(shù)量、字節(jié)長(zhǎng)度、數(shù)據(jù)流的數(shù)量和數(shù)據(jù)流的持續(xù)時(shí)間等信息進(jìn)行記錄;同時(shí)繼續(xù)執(zhí)行步驟504 ;需要說(shuō)明的是,步驟502中的實(shí)現(xiàn)方式與現(xiàn)有技術(shù)中所采用的方式相同;步驟504、CPU將接收到的報(bào)文發(fā)送至網(wǎng)絡(luò)協(xié)議棧,其中網(wǎng)絡(luò)協(xié)議棧為上層應(yīng)用;步驟505、CPU接收并處理完報(bào)文之后,將該報(bào)文緩沖區(qū)的描述符域中的HWCpl恢復(fù)為初始狀態(tài),即清零;步驟506、CPU將讀取完的報(bào)文緩沖區(qū)進(jìn)行回收,將該報(bào)文緩沖區(qū)的物理地址和虛擬地址攜帶于回收指令中,發(fā)送給報(bào)文接收模塊,指示報(bào)文接收模塊對(duì)該報(bào)文緩沖區(qū)進(jìn)行回收,也就是說(shuō),該報(bào)文緩沖區(qū)處于可用狀態(tài),可用于接收新的總線報(bào)文;步驟507、CPU根據(jù)已讀取的報(bào)文緩沖區(qū)的描述符域中所攜帶的下一報(bào)文緩沖區(qū)的虛擬地址,即可訪問(wèn)下一報(bào)文緩沖區(qū),從而實(shí)現(xiàn)CPU對(duì)內(nèi)存中的報(bào)文緩沖區(qū)的輪詢。本發(fā)明實(shí)施例通過(guò)將接收到的報(bào)文構(gòu)造為,包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的描述符和下一報(bào)文緩沖區(qū)的描述符的總線報(bào)文,使得CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文時(shí)能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠通過(guò)輪詢的方式順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,不需要使用多種寄存器進(jìn)行配合,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。本領(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、磁碟 或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。圖6為本發(fā)明報(bào)文接收模塊實(shí)施例的結(jié)構(gòu)示意圖,如圖6所示,該報(bào)文接收模塊包括第一接收單元11,用于在接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文;其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址;第一發(fā)送單元12,用于將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文;第一處理單元13,用于在清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。進(jìn)一步地,在上述實(shí)施例的基礎(chǔ)上,該報(bào)文接收模塊還包括第二接收單元14,用于在所述第一處理單元13將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位之后,接收所述中央處理器在讀取到所述當(dāng)前報(bào)文緩沖區(qū)內(nèi)的報(bào)文之后所發(fā)送的,對(duì)所述當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址進(jìn)行回收的回收指令;第二處理單元15,用于將所述回收指令中攜帶的物理地址和虛擬地址存入所述第一描述符隊(duì)列的末尾。進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,該報(bào)文接收模塊還包括第三接收單元16,用于在所述第一接收單元11接收到報(bào)文之前,接收所述中央處理器在對(duì)所述內(nèi)存進(jìn)行初始化之后,發(fā)送的所述內(nèi)存中的第二描述符隊(duì)列的基地址,以及所述第二描述符隊(duì)列內(nèi)描述符的數(shù)量;其中,所述第二描述符隊(duì)列存儲(chǔ)有所述內(nèi)存中的至少兩個(gè)報(bào)文緩沖區(qū)各自的描述符,所述描述符包括所述報(bào)文緩沖區(qū)在所述內(nèi)存中的物理地址和虛擬地址;
第三處理單元17,用于將根據(jù)所述基地址從所述內(nèi)存中讀取到的所述數(shù)量的描述符,作為所述第一描述符隊(duì)列。進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,若所述第一發(fā)送單元12向所述內(nèi)存發(fā)送的總線報(bào)文為首個(gè)總線報(bào)文;相應(yīng)地,所述第一發(fā)送單元12還用于,將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)所述第二描述符隊(duì)列內(nèi)的首個(gè)描述符中的虛擬地址, 讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文;若所述第一發(fā)送單元12向所述內(nèi)存發(fā)送的總線報(bào)文不是首個(gè)總線報(bào)文;相應(yīng)地,所述第一發(fā)送單元12還用于,將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)從所述當(dāng)前報(bào)文緩沖區(qū)前的上一個(gè)報(bào)文緩沖區(qū)讀取到的所述當(dāng)前報(bào)文緩沖區(qū)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文。需要說(shuō)明的是,對(duì)各功能模塊的命名時(shí)所采用的第一、第二和第三等內(nèi)容,僅用于區(qū)別各功能模塊,不代表各功能模塊之間的次序。具體的,本發(fā)明實(shí)施例中的報(bào)文接收模塊進(jìn)行報(bào)文接收的方法,可以參見(jiàn)上述對(duì)應(yīng)的方法實(shí)施例,此處不再贅述。本發(fā)明實(shí)施例中的報(bào)文接收模塊,通過(guò)將接收到的報(bào)文構(gòu)造為包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的描述符和下一報(bào)文緩沖區(qū)的描述符的總線報(bào)文,使得CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文時(shí)能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠通過(guò)輪詢的方式順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,不需要使用多種寄存器進(jìn)行配合,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。圖7為本發(fā)明報(bào)文接收系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例報(bào)文接收系統(tǒng)的一種系統(tǒng)結(jié)構(gòu)。如圖7所示,該報(bào)文接收系統(tǒng)包括網(wǎng)絡(luò)接口卡I、內(nèi)存2和中央處理器3,其中網(wǎng)絡(luò)接口卡I中包括報(bào)文接收模塊4。具體的,本發(fā)明實(shí)施例中報(bào)文接收系統(tǒng)進(jìn)行報(bào)文接收的方法,可以參見(jiàn)上述對(duì)應(yīng)的方法實(shí)施例,此處不再贅述。本發(fā)明實(shí)施例中的報(bào)文接收系統(tǒng),通過(guò)將接收到的報(bào)文構(gòu)造為包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的描述符和下一報(bào)文緩沖區(qū)的描述符的總線報(bào)文,使得CPU從內(nèi)存中讀取當(dāng)前報(bào)文緩沖區(qū)的報(bào)文時(shí)能夠獲知下一報(bào)文緩沖區(qū)的虛擬地址,從而能夠通過(guò)輪詢的方式順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,不需要使用多種寄存器進(jìn)行配合,也不需要向CPU產(chǎn)生中斷,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。最后應(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ù)方案的范圍。
權(quán)利要求
1.一種報(bào)文接收方法,其特征在于,包括 接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文; 其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址; 將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文; 清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。
2.根據(jù)權(quán)利要求I所述的報(bào)文接收方法,其特征在于,所述將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位之后,所述方法還包括 接收所述中央處理器在讀取到所述當(dāng)前報(bào)文緩沖區(qū)內(nèi)的報(bào)文之后所發(fā)送的,對(duì)所述當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址進(jìn)行回收的回收指令; 將所述回收指令中攜帶的物理地址和虛擬地址存入所述第一描述符隊(duì)列的末尾。
3.根據(jù)權(quán)利要求I或2所述的報(bào)文接收方法,其特征在于,所述接收到報(bào)文之前,所述方法還包括 接收所述中央處理器在對(duì)所述內(nèi)存進(jìn)行初始化之后,發(fā)送的所述內(nèi)存中的第二描述符隊(duì)列的基地址,以及所述第二描述符隊(duì)列內(nèi)描述符的數(shù)量; 其中,所述第二描述符隊(duì)列存儲(chǔ)有所述內(nèi)存中的至少兩個(gè)報(bào)文緩沖區(qū)各自的描述符,所述描述符包括所述報(bào)文緩沖區(qū)在所述內(nèi)存中的物理地址和虛擬地址; 將根據(jù)所述基地址從所述內(nèi)存中讀取到的所述數(shù)量的描述符,作為所述第一描述符隊(duì)列。
4.根據(jù)權(quán)利要求3所述的報(bào)文接收方法,其特征在于,若所述總線報(bào)文為向所述內(nèi)存發(fā)送的首個(gè)總線報(bào)文; 相應(yīng)地,所述將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文包括 將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)所述第二描述符隊(duì)列內(nèi)的首個(gè)描述符中的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文; 若所述總線報(bào)文不是向所述內(nèi)存發(fā)送的首個(gè)總線報(bào)文; 相應(yīng)地,所述將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文包括 將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)從所述當(dāng)前報(bào)文緩沖區(qū)前的上一個(gè)報(bào)文緩沖區(qū)讀取到的所述當(dāng)前報(bào)文緩沖區(qū)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文。
5.一種報(bào)文接收模塊,其特征在于,包括 第一接收單元,用于在接收到報(bào)文之后,將所述報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及所述第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文; 其中,所述第一描述符包括內(nèi)存中當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址;所述第二 描述符順序排列在所述第一描述符之后,包括所述內(nèi)存中所述當(dāng)前報(bào)文緩沖區(qū)后的下一個(gè)報(bào)文緩沖區(qū)的物理地址和虛擬地址; 第一發(fā)送單元,用于將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)所述當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文; 第一處理單元,用于在清除所述第一描述符中的物理地址和虛擬地址之后,將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位,以使所述第二描述符中的物理地址和虛擬地址成為更新后的第一描述符中的物理地址和虛擬地址。
6.根據(jù)權(quán)利要求5所述的報(bào)文接收模塊,其特征在于,所述報(bào)文接收模塊還包括 第二接收單元,用于在所述第一處理單元將所述第一描述符隊(duì)列中的描述符順序進(jìn)行移位之后,接收所述中央處理器在讀取到所述當(dāng)前報(bào)文緩沖區(qū)內(nèi)的報(bào)文之后所發(fā)送的,對(duì)所述當(dāng)前報(bào)文緩沖區(qū)的物理地址和虛擬地址進(jìn)行回收的回收指令; 第二處理單元,用于將所述回收指令中攜帶的物理地址和虛擬地址存入所述第一描述符隊(duì)列的末尾。
7.根據(jù)權(quán)利要求5或6所述的報(bào)文接收模塊,其特征在于,所述報(bào)文接收模塊還包括 第三接收單元,用于在所述第一接收單元接收到報(bào)文之前,接收所述中央處理器在對(duì)所述內(nèi)存進(jìn)行初始化之后,發(fā)送的所述內(nèi)存中的第二描述符隊(duì)列的基地址,以及所述第二描述符隊(duì)列內(nèi)描述符的數(shù)量; 其中,所述第二描述符隊(duì)列存儲(chǔ)有所述內(nèi)存中的至少兩個(gè)報(bào)文緩沖區(qū)各自的描述符,所述描述符包括所述報(bào)文緩沖區(qū)在所述內(nèi)存中的物理地址和虛擬地址; 第三處理單元,用于將根據(jù)所述基地址從所述內(nèi)存中讀取到的所述數(shù)量的描述符,作為所述第一描述符隊(duì)列。
8.根據(jù)權(quán)利要求7所述的報(bào)文接收模塊,其特征在于,若所述第一發(fā)送單元向所述內(nèi)存發(fā)送的總線報(bào)文為首個(gè)總線報(bào)文; 相應(yīng)地,所述第一發(fā)送單元還用于,將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)所述第二描述符隊(duì)列內(nèi)的首個(gè)描述符中的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文; 若所述第一發(fā)送單元向所述內(nèi)存發(fā)送的總線報(bào)文不是首個(gè)總線報(bào)文; 相應(yīng)地,所述第一發(fā)送單元還用于,將所述總線報(bào)文發(fā)送至所述內(nèi)存中與所述第一描述符中的物理地址對(duì)應(yīng)的所述當(dāng)前報(bào)文緩沖區(qū),以供所述中央處理器根據(jù)從所述當(dāng)前報(bào)文緩沖區(qū)前的上一個(gè)報(bào)文緩沖區(qū)讀取到的所述當(dāng)前報(bào)文緩沖區(qū)的虛擬地址,讀取所述當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文。
9.一種網(wǎng)絡(luò)接口卡,其特征在于,包括如權(quán)利要求5-8任一所述的報(bào)文接收模塊。
10.一種報(bào)文接收系統(tǒng),其特征在于,包括如權(quán)利要求9所述的網(wǎng)絡(luò)接口卡、內(nèi)存和中央處理器。
全文摘要
本發(fā)明提供一種報(bào)文接收方法、報(bào)文接收模塊、裝置及系統(tǒng),其中報(bào)文接收方法包括接收到報(bào)文之后,將報(bào)文與第一描述符隊(duì)列內(nèi)的第一描述符中的物理地址和虛擬地址,以及第一描述符隊(duì)列內(nèi)的第二描述符中的虛擬地址構(gòu)造為總線報(bào)文;將總線報(bào)文發(fā)送至內(nèi)存中與第一描述符中的物理地址對(duì)應(yīng)的當(dāng)前報(bào)文緩沖區(qū),以供中央處理器根據(jù)當(dāng)前報(bào)文緩沖區(qū)對(duì)應(yīng)的虛擬地址,讀取當(dāng)前報(bào)文緩沖區(qū)中的報(bào)文;清除第一描述符中的物理地址和虛擬地址之后,將第一描述符隊(duì)列中的描述符順序進(jìn)行移位。從而使得中央處理器通過(guò)輪詢的方式即可順序讀取報(bào)文緩沖區(qū)中的內(nèi)容,有效地提高了系統(tǒng)的處理效率,減小了系統(tǒng)開(kāi)銷。
文檔編號(hào)G06F13/28GK102750245SQ20121017188
公開(kāi)日2012年10月24日 申請(qǐng)日期2012年5月29日 優(yōu)先權(quán)日2012年5月29日
發(fā)明者呂高鋒, 唐路, 孫志剛, 徐東來(lái), 李韜, 楊安, 石巍, 陳一驕 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)