專利名稱:一種接收報文的方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)通信技術領域,尤其涉及一種接收報文的方法及系統(tǒng)。
背景技術:
在大多數(shù)通訊系統(tǒng)中,都存在報文寫入單元和報文讀取單元之間的報文交互過 程,報文寫入單元將報文寫入內存單元,然后報文讀取單元從所述內存單元讀取寫入內存 單元的所述報文,這個過程即為接收報文的過程,稱為收包。在現(xiàn)有技術一中,實現(xiàn)一次收包的過程如下如圖1所示,首先,報文讀取單元向 報文寫入單元配置“包起始地址”,然后啟動接收報文功能,報文寫入單元每次向內存單元 寫完一個報文后,會向報文讀取單元指示“包結束”,以便報文讀取單元從內存單元讀取已 寫入的所述報文進行處理。這樣,對于一次接收報文過程實現(xiàn)很簡單,但如果遇到大批量報 文需要接收的情況時,報文讀取單元就要連續(xù)向報文寫入單元配置“包起始地址”,然后啟 動報文接收功能,并且要連續(xù)響應“包結束”來處理寫入內存單元的報文數(shù)據(jù),這樣報文讀 取單元不停地在停止與響應狀態(tài)中切換,非常耗費報文讀取單元的資源?,F(xiàn)有技術二中,還存在另一種接收報文的方法,即實現(xiàn)報文讀取單元在處理過程 中的中斷結合(interrupt coalescing)。具體做法為,為內存單元配置最大接收報文數(shù)量 或最大延時,當內存單元收到的報文達到配置的最大接收數(shù)量,或者從收到第一個報文開 始計時,達到配置的最大毫秒延時后,向報文讀取單元發(fā)出中斷信號,此時等待報文讀取單 元處理寫入內存單元的數(shù)據(jù),這樣,極大地減少了接收報文過程中對報文讀取單元的中斷 次數(shù)。若報文讀取單元能實時處理內存單元的報文,則下一次向內存單元寫入報文的等待 時間為報文讀取單元處理內存單元內報文所需要的時間。如果報文讀取單元工作負載突然 很大,無法實時響應中斷信號,那么下一次向內存單元寫入報文的等待時間為,在處理報文 所需要的時間基礎上還需增加一個報文讀取單元處理完其它操作再處理內存單元報文的 等待時間。綜上,現(xiàn)有技術二的技術方案,雖然減少了現(xiàn)有技術一中對報文讀取單元的資源 耗費,但是還存在如下問題在下一次向內存單元寫入報文的等待時間內,報文寫入單元的 工作必須暫停,降低了系統(tǒng)的操作效率。
發(fā)明內容
本發(fā)明實施例提供一種接收報文的方法及系統(tǒng),能夠減少向內存單元寫入報文的 等待時間,提高報文接收的操作效率。為達到上述目的,本發(fā)明的實施例采用如下技術方案一種接收報文的方法,包括向內存單元的第一內存段中寫入報文;當向所述第一內存段寫入報文結束時,根據(jù)第二內存段的段起始地址,向所述第 二內存段中寫入報文;
在向所述第一內存段寫入報文結束后,從所述第一內存段讀取已寫入的報文。一種接收報文的系統(tǒng),包括內存單元,用于暫存報文;內存申請及配置單元,用于向所述內存單元申請第一內存段和第二內存段,配置所述第一內存單元和所述第二內存單元的段起始地址;報文寫入單元,用于向所述內存單元的所述第一內存段和所述第二內存段中寫入 報文;其中,當向所述第一內存段寫入報文結束時,根據(jù)所述第二內存段的段起始地址,向 所述第二內存段中寫入報文;報文讀取單元,用于在所述報文寫入單元向所述第一內存段寫入報文結束后,從 所述第一內存段讀取已寫入的報文。本發(fā)明實施例提供的接收報文的方法及系統(tǒng),基于至少兩個邏輯相連的內存段, 使報文的寫入和讀取順序是按照內存單元的分段來進行。接收報文時,向第一內存段寫入 報文;所述第一內存段寫入報文結束后,便接著跳轉至第二內存段的起始地址,向所述第二 內存段寫入報文,這時,所述第一內存段內已寫入的數(shù)據(jù)等待讀??;讀取所述第一內存段內 的數(shù)據(jù)可以與所述第二內存段寫入報文同時進行也可以有一定延時進行,從而使寫入內存 單元的報文能夠按照分段來進行處理,而對于每個內存段內的報文是批量進行處理的。此 過程中一直向內存單元寫入報文,內存單元寫入報文的間斷時間僅為一個內存段寫完后向 另一個內存段跳轉所需的時間,提高了報文接收的操作效率。
為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例中所需要使用的 附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領 域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附 圖。圖1為現(xiàn)有技術一報文接收示意圖;圖2為本發(fā)明實施例一接收報文的方法流程圖;圖3為本發(fā)明實施例二接收報文的方法對應的系統(tǒng);圖4為本發(fā)明實施例二接收報文的方法流程圖;圖5為本發(fā)明實施例二內存段為4的接收報文狀態(tài)轉移圖;圖6為本發(fā)明實施例四內存段為4的接收報文狀態(tài)轉移圖;圖7為本發(fā)明實施例五接收報文的系統(tǒng)示意圖;圖8為本發(fā)明實施例六報文寫入單元框圖。
具體實施例方式下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。實施例一
如圖2所示,本發(fā)明實施例一接收報文的方法,包括S11、向內存單元的第一內存段中寫入報文。內存單元可根據(jù)申請劃分為至少兩個內存段,內存段之間邏輯相連,所述至少兩 個內存段中任意兩個邏輯相連的內存段均可稱為第一內存段與第二內存段。內存段之間不 以物理地址的相連作為連接判斷標準,而是采用狀態(tài)機,將這些內存段通過轉移條件有機 的銜接在一起,即當一個內存段滿足特定的轉移條件時,轉向另一個內存段。這個轉移條件 可以為每個內存段設定的最大容量,或是每個內存段的接收報文時間等等。而內存段的邏 輯相連表現(xiàn)為對內存段執(zhí)行操作的執(zhí)行順序,例如,當所述至少兩個內存段中的其中一個 內存段滿足一定轉移條件后,轉向另一個內存段執(zhí)行操作,這種執(zhí)行操作的順序為內存段 邏輯相連的順序。啟動接收報文后,向所述第一內存段寫入報文時,依照第一內存段的地址順序,依 次寫入報文。S12、當向所述第一內存段寫入報文結束時,根據(jù)第二內存段的段起始地址,向所 述第二內存段中寫入報文。當所述第一內存段寫入報文結束時,跳轉至第二內存段的段起始地址,按照所述 第二內存段的地址順序向所述第二內存段寫入報文。所述第一內存段寫入報文結束是向所 述第二內存段寫入報文的轉移條件,其寫入結束可以以內存段的容量或是向內存段寫入時 間作為判定標準。S13、在向所述第一內存段寫入報文結束后,從所述第一內存段讀取已寫入的報文。向所述第一內存段寫入結束后,該內存段內的報文等待處理,讀取所述第一內存 段內的報文。若報文讀取單元能夠及時響應第一內存段中等待處理的報文,那么讀取所述 第一內存段內的報文可以與向所述第二內存段寫入報文同時進行;若報文讀取單元暫時無 法響應讀取所述第一內存段內的報文,則讀取所述第一內存段內的報文也可以延遲于向第 二內存段寫入報文進行。重復步驟S11至S13,按照內存段之間的邏輯連接順序,向內存段寫入報文,并按 照內存段之間的邏輯連接順序,從內存段讀取已寫入的報文。從系統(tǒng)角度而言,在同一時 刻,向內存單元寫入報文和從內存區(qū)讀取報文是并行操作的。本發(fā)明實施例提供的接收報文的方法,基于至少兩個邏輯相連的內存段,使報文 的寫入和讀取順序是按照內存單元的分段來進行。接收報文時,按照第一內存段的地址順 序,向第一內存段寫入報文;所述第一內存段寫入報文結束后,便接著跳轉至第二內存段 的段起始地址,向所述第二內存段寫入報文,這時,所述第一內存段內已寫入的數(shù)據(jù)等待讀 ??;讀取所述第一內存段內的數(shù)據(jù)可以與所述第二內存段寫入報文同時進行也可以有一定 延時進行,從而使寫入內存單元的報文和讀取內存單元的報文能夠按照分段來進行處理, 而對于每個內存段內的報文是批量進行處理的。此過程中一直向內存單元寫入報文,內存 單元寫入報文的間斷時間僅為一個內存段寫完后向另一個內存段跳轉所需的時間,提高了 報文接收的操作效率。實施例二本發(fā)明實施例二基于實施例一,以圖3由報文寫入單元、內存單元和報文讀取單元組成的系統(tǒng)為例對本發(fā)明的實施方式作進一步詳細說明。如圖4所示,本發(fā)明實施例包 括如下內容S21、向內存單元申請至少兩個內存段(即所述第一內存段和所述第二內存段), 向報文寫入單元配置每個所述內存段的段起始地址。其中,所述至少兩個內存段邏輯相接, 組成環(huán)形緩沖區(qū)。
進一步地,本發(fā)明實施例還包括配置所述第一內存段和所述第二內存段可以寫 入報文的最大報文數(shù)量,即每個內存段可以寫入的最大報文數(shù)量。每段地址空間即為一個內存段。每個內存段內地址是連續(xù)的,但是內存段之間的 地址可能是連續(xù)的,也可能是離散的。這是因為內存單元可能會因其他數(shù)據(jù)或業(yè)務的存在, 使可寫入報文的內存地址不再是連續(xù)的,而是不相鄰的、離散的。申請內存段成功之后,向報文寫入單元配置每個所述內存段的段起始地址和每個 所述內存段接收的最大報文數(shù)量segN_len,N代表第N段內存段。為每個內存段配置段起始地址和接收的最大報文數(shù)量,則每個內存段的存儲容量 等于每段配置的最大報文數(shù)量乘以最大報文長度。其中,所述最大報文長度表示內存接收 報文的能力,即能夠接收的報文最大長度,而非實際進入內存單元的報文的最大長度,一般 情況下,內存單元能夠接收最大為2千字節(jié)的報文,而實際的報文長度一般為1. 5千字節(jié)左 右。例如本發(fā)明實施例中,配置內存段SegO的起始地址為9000_A000,配置內存段SegO接 收最大報文數(shù)量為1000,則內存段SegO的存儲容量=配置的最大報文數(shù)量*最大報文長度 =1000*2千字節(jié)=2兆字節(jié)。其它內存段的存儲容量類似計算。本發(fā)明實施例在接收報文過程中,可以將前述不相鄰的地址空間利用起來,采用 狀態(tài)機的設計方式,將這些不相鄰的、離散的內存段有機的銜接在一起,組成環(huán)形緩沖區(qū) (Ring Buffer),即向內存段寫入或讀取報文是按段循環(huán)的。對于本發(fā)明實施例來說,每個 內存段設定一定的轉移條件,當滿足所述轉移條件時,按照狀態(tài)機設計的跳轉順序,跳轉至 下一內存段執(zhí)行操作,這種跳轉順序即為內存段的邏輯連接順序,本發(fā)明實施例中,內存段 之間的跳轉順序是循環(huán)的。本發(fā)明實施例中的轉移條件為當內存段寫入的報文數(shù)量達到該 內存段的最大容量時,則進行跳轉。與寫入報文相對應地,報文讀取單元按照內存段的邏輯 連接順序,從內存單元讀取報文。如圖3,報文讀取單元向內存單元申請了 n+1個段區(qū)間,內 存段之間的箭頭指示順序表示了內存段之間的邏輯連接順序。圖5舉例說明了 4個內存段之間的狀態(tài)轉移圖,IDLE為狀態(tài)機的初始狀態(tài),SegN 代表第N段內存段(N為0、1、2或3),內存段之間的箭頭指示表示內存段寫入的報文數(shù)量 達到配置的本段最大數(shù)量時,跳轉至下一個內存段執(zhí)行操作,內存段SegN指向初始狀態(tài)的 箭頭表示時間到達時,報文寫入單元停止寫入操作,回到初始狀態(tài),故本發(fā)明還應包括步驟 S22。S22、設置接收報文的總時間。該總時間,可以決定本發(fā)明實施例接收報文的持續(xù)時間,可以根據(jù)報文讀取單元 對于報文分析的需求而得。該總時間的計時到達,為該系統(tǒng)接收報文的停止條件。設置接 收報文的總時間,報文寫入單元開始計時,進入接收報文狀態(tài)。例如,本發(fā)明實施例中,配置 接收報文的總時間為2分鐘,然后開始計時,進行接收報文,到達2分鐘時,停止向內存單元 寫入報文。定時時間是0. 1毫秒的整數(shù)倍,可以從0. 1毫秒至分鐘級別計時,甚至可以以小時級別計時。S23、向所述至少兩個內存段的第一內存段寫入報文。 開始計時,報文寫入單元可以對報文采取篩選措施,該篩選措施取決于報文讀取 單元具體的報文分析需求,例如,報文讀取單元根據(jù)處理任務設定報文需要滿足的特定條 件,則將所述特定條件作為篩選措施,將符合篩選措施的報文寫入內存段。進一步地,在向內存段寫入報文時,本發(fā)明實施例還包括,指示當前正在寫入的所 述內存段內已寫入的報文數(shù)量。通過設置于報文寫入單元的計數(shù)模塊精確指示每個內存段寫入了多少個報文,當 達到該內存段的最大報文數(shù)量時,則向下一內存段進行跳轉。特別是對于時間到達時正在 寫入報文的內存段,則報文讀取單元還可以通過該內存段的計數(shù)模塊指示的報文數(shù)量,精 確讀取所寫入的報文數(shù)量(因內存段上可能存在基于本發(fā)明實施例寫入的報文之外,因報 文讀取單元執(zhí)行其他業(yè)務產生的依然在該內存段暫存的數(shù)據(jù),而該數(shù)據(jù)對于報文讀取單元 處理本發(fā)明實施例所指的處理任務沒有意義),計數(shù)模塊可以指示針對本發(fā)明實施例所指 的任務處理寫入了多少個報文,當報文讀取單元進行讀取時,只讀取指示數(shù)量的報文,該內 存段的報文(包括其他業(yè)務產生的)不會全被讀取,從而避免了報文讀取單元的資源浪費。S24、向所述第一內存段寫入報文結束時,根據(jù)第二內存段的段起始地址,向所述 第二內存段中寫入報文。更為具體地,本步驟包括如下步驟S241、當向所述第一內存段寫入的報文數(shù)量達到本段預先配置的最大報文數(shù)量 時,指示所述第一內存段寫入結束并發(fā)送中斷請求,同時跳轉至第二內存段的段起始地址。本發(fā)明實施例中,通過定義報文寫入單元內寄存器其中一個標志位為段結束標志 位來標記該段是否寫入結束,即通過改變該標志位的二進制狀態(tài),來標記是否寫入結束,每 個內存段均設置一個段結束標志位。當一個內存段被標記已寫入結束時,同時向報文讀取 單元發(fā)送一個中斷請求,請求讀取該內存段內的報文。例如圖3和圖5,本發(fā)明實施例中內存段SegO寫入的報文個數(shù)等于配置的最大報 文數(shù)量1000時,即滿足rev_cnt0 = seg0_len時,基于設計的內存段跳轉順序,跳轉至內存 段Segl的起始地址,同時指示所述內存段SegO寫入結束和發(fā)送中斷請求,具體措施可以通 過在報文寫入單元的寄存器的段結束標志位上標記“第0段結束”,同時向報文讀取單元上 報中斷請求,來指示報文讀取單元該內存段已寫入結束且已寫入的報文等待讀取,報文讀 取單元收到該中斷請求后,進行讀取報文。S242、向所述第二內存段寫入報文。本發(fā)明實施例中跳轉至內存段Segl的起始地址后,按照內存段Segl的地址順序 向內存段Segl寫入報文。S25、在向所述第一內存段寫入報文結束后,從所述第一內存段讀取已寫入的報文。例如本發(fā)明實施例中寫入內存段SegO的報文數(shù)量為1000時,報文寫入單元在寄 存器的一個段結束標志位上標記“第0段結束”且向報文讀取單元發(fā)送中斷請求,即表示內 存段SegO內的報文等待處理。若報文讀取單元立即響應該中斷請求,在向所述第二內存段 寫入報文時,從所述第一內存段中讀取所述已寫入的報文。那么內存段SegO內的報文可以 立即被報文讀取單元讀取和處理,即與向內存段Segl寫入報文同時進行,則系統(tǒng)角度來看上,接收報文的過程中,報文寫入單元向內存單元寫入報文和報文讀取單元從內存單元讀 取報文是并行操作的。但是若報文讀取單元沒能及時響應該中斷請求,則報文讀取單元會 滯后于報文寫入單元向第二內存段寫入報文,但該過程中,一直保持向內存單元寫入報文, 提高了報文接收效率。需要說明的是,本發(fā)明所說的第一內存段和第二內存段,僅指兩個內存段之間的 相對順序,并不特指所有內存段順序編號中的第一個內存段和第二個內存段,同理本發(fā)明 實施例所提到的內存段也并不限于僅有兩個內存段。按照內存段邏輯相接的順序,重復步驟S23至步驟S25,本發(fā)明實施例中,所有內 存段是循環(huán)相接的,即當向所述第二內存段寫入報文結束時,根據(jù)所述第一內存段的段起始地址,向所 述第一內存段中寫入報文;在向所述第二內存段寫入報文結束后,從所述第二內存段中讀取已寫入的報文。其中,所述第二內存段和所述第一內存段分別表示一次循環(huán)順序中的最后一個內 存段和第一個內存段,且該循環(huán)順序可以以任意一個內存段作為起始順序。當最后一個內存段寫入完畢后,跳轉至第一個內存段,再次向第一個內存段寫入 報文。對于本發(fā)明實施例來說,還可能存在另外一種情況,即若讀取所述第一內存段內已 寫入的報文延遲于向所述第二內存段寫入報文的時間過長,則再次跳轉至所述第一內存段 時,該內存段內之前寫入的報文還未處理,此種情況可以等待報文讀取單元處理完已經寫 入的報文,然后再將新的報文寫入內存段,或者可以進入步驟S26。S26、向所述第一內存段再次寫入報文,覆蓋該內存段已寫入的報文,并標記所述 第一內存段報文已被覆蓋。重復步驟S23-S25,直至所述至少兩個內存段全部寫入結束后,若第一個內存段上 一次寫入的數(shù)據(jù)還未被報文讀取單元讀取走,則向該內存段重復寫入報文,覆蓋上次寫入 報文,對于其他內存段,若上次報文還未被讀取也同樣采取覆蓋措施。本發(fā)明實施例中,通過定義報文寫入單元內寄存器其中一個標志位為報文覆蓋標 志位來標記報文已被覆蓋或未被覆蓋,即通過改變該標志位的二進制狀態(tài),來改變已被覆 蓋或未被覆蓋狀態(tài),每個內存段均設置一個報文覆蓋標志位。例如,本發(fā)明實施例中,當內存段Seg3寫入的報文個數(shù)等于配置的接收最大報文 數(shù)量,則循環(huán)跳轉寫內存段SegO,同時在寄存器的段結束標志位上標記“第3段結束”,以便 后續(xù)處理。此時,如報文讀取單元還未能處理內存段SegO段上次寫入的批量報文,那么報 文寫入單元在寄存器的報文覆蓋標志位通過改變“0”、“1”狀態(tài)來標記“第0段已覆蓋”,表 明內存段SegO已經被新的報文覆蓋了。其他內存段覆蓋標志以此類推。S27、當接收報文的時間達到配置的所述總時間,指示時間到達和指示當前正在寫 入的當前內存段寫入結束,報文寫入單元停止向所述當前內存段寫入報文,已寫入所述當 前內存段的報文等待讀取。當配置的接收報文的總時間到達后,認為報文讀取單元已經讀取到了對報文進行 分析所要的報文數(shù)量,則正在寫入的內存段即使沒有完成配置的最大報文數(shù)量,也會停止 寫入,標記“段結束”,同時向報文讀取單元指示總時間到達,報文寫入單元停止向當前內存 段寫入報文,報文讀取單元接收到總時間到達指示后,讀取完所述當前內存段的報文后,停止讀取報文,接收報文過程結束。本發(fā)明實施例中,當配置接收報文的定時時間到達2分鐘后,若正在向內存段Seg2寫入報文,則內存段Seg2即使沒有寫完配置的最大報文數(shù)量,也會標記“段結束”,同 時向報文讀取單元指示定時時間到達,報文寫入單元停止向任何內存段寫入報文,報文讀 取單元讀取完內存段Seg2寫入的報文后,停止向任何內存段讀取操作。本發(fā)明實施例提供的接收報文的方法,向內存單元申請至少兩個邏輯相連且循環(huán) 相接的內存段,內存段組成環(huán)形緩沖區(qū),從系統(tǒng)角度上向內存寫入報文和從內存中讀取報 文可以同時進行,報文讀取單元能夠分段處理、批量處理報文。本發(fā)明實施例還給出了再次 跳轉至某個內存段進行寫入時,上次向該內存段寫入的報文還未處理,這種特殊情況的解 決辦法。本發(fā)明實施例使向內存單元寫入報文時,除跳轉所需時間外,時間上保持連續(xù)向內 存單元寫入報文,同時也可以時刻使內存單元保持有可供報文讀取單元讀取的報文。本發(fā) 明實施例還給出了報文接收過程的一種停止條件,即時間到達時,停止接收報文。本發(fā)明實 施例提高了報文接收的效率。實施例三實施例三與實施例二技術方案大致相同,與實施例一不同的是在步驟S26后停止 接收報文的條件,本發(fā)明實施例,在步驟S26后,包括確定從內存單元所讀取出來的報文數(shù)量滿足報文處理的數(shù)量需求,停止向內存段 寫入和從內存段讀取報文。本發(fā)明實施例報文讀取單元基于已從內存單元讀取到的大批量報文,進行統(tǒng)計判 斷,若認為大批量從內存單元讀取的報文已滿足報文讀取單元處理數(shù)據(jù)過程中對數(shù)據(jù)數(shù)量 的需求或者批量計算的需求,報文讀取單元便可向報文寫入單元發(fā)出停止指令,停止向某 一內存段寫入或從某一內存段讀取報文,完成接收報文過程,但是報文寫入單元不在標志 位標記“段結束”,也不向報文讀取單元指示時間到達。本發(fā)明實施例提供了另一種接收報文的停止條件,當接收到的報文數(shù)量滿足處理 需求時,停止接收報文。本發(fā)明實施例基于與實施例二相同的解釋,能夠提高報文接收的效率。需要說明的是,對于接收過程來說,定時時間到達和判斷接收到的報文數(shù)量滿足 處理需求,均是接收過程可停止的條件,滿足停止條件中的任一條,便可停止接收報文,使 接收報文過程更為靈活。實施例四本發(fā)明實施例相對于實施例二和三的不同之處在于,所述至少兩個內存段之間的 邏輯連接方式為順序相接,但是不進行循環(huán),即當最后一個內存段滿足轉移條件時,回到狀 態(tài)機的初始狀態(tài)。相應的,在重復實施例二步驟S23至S25之后,若最后一個內存段寫入的報文數(shù)量 等于配置的最大報文數(shù)量,報文寫入單元指示“段結束”后,即使定時總時間未到達,報文寫 入單元也停止向內存單元再次寫入報文,已寫入內存單元的報文等待報文讀取單元讀取。例如圖6,以四個內存段為例,舉例說明內存段之間的狀態(tài)轉移,當內存段Seg3寫 入的報文數(shù)量等于配置的接收最大報文數(shù)量,則標記“第3段結束”,同時向報文讀取單元 發(fā)出中斷請求。此時,即使定時時間未到達,也停止向內存單元寫入報文,已寫入內存單的報文等待報文讀取單元讀取。本發(fā)明實施例作為實施例二和實施例三的簡化方案,同樣能夠提高接收報文的效率。實施例五如圖7所示,本發(fā)明實施例還提供了一種接收報文的系統(tǒng)1,包括內存單元2,用 于暫存報文;內存申請及配置單元5,用于向所述內存單元申請第一內存段和第二內存段, 配置所述第一內存單元和所述第二內存單元的段起始地址;報文寫入單元3,用于向所述 內存單元的所述第一內存段和所述第二內存段中寫入報文;其中,當向所述第一內存段寫 入報文結束時,根據(jù)所述第二內存段的段起始地址,向所述第二內存段中寫入報文;報文讀 取單元4,用于在所述報文寫入單元向所述第一內存段寫入報文結束后,從所述第一內存段 讀取已寫入的報文。內存申請及配置單元通過調用函數(shù)向內存單元發(fā)起申請,申請至少兩段地址空 間,每段地址空間即為一個內存段。每個內存段內地址是連續(xù)的,但是內存段之間的地址可 能是連續(xù)的,也可能是離散的。這是因為內存單元可能會因其他數(shù)據(jù)或業(yè)務的存在,使可寫 入報文的內存地址不再是連續(xù)的,而是不相鄰的、離散的。內存申請及配置單元申請內存段 成功之后,向報文寫入單元配置每個所述內存段的段起始地址。內存段之間不以物理地址的相連作為連接判斷標準,而是以狀態(tài)機方式,將這些 內存段通過轉移條件有機的銜接在一起,即當一個內存段滿足特定的轉移條件時,轉向另 一個內存段。這個轉移條件可以為每個內存段設定的最大容量,或是每個內存段的接收報 文時間等等。而內存段的邏輯相連表現(xiàn)為對內存段執(zhí)行操作的執(zhí)行順序,例如,當所述至少 兩個內存段中的其中一個內存段滿足一定轉移條件后,轉向另一個內存段執(zhí)行操作,這種 執(zhí)行操作的順序為內存段邏輯相連的順序。啟動接收報文后,報文寫入單元向所述第一內存段寫入報文時,依照第一內存段 的地址順序,依次寫入報文。當報文寫入單元向所述第一內存段寫入報文結束時,跳轉至所 述至少兩個內存段的第二內存段的起始地址,按照所述第二內存段的地址順序向所述第二 內存段寫入報文。所述第一內存段寫入報文結束是向所述第二內存段寫入報文的轉移條 件,其寫入結束可以以內存段的容量或是向內存段寫入時間作為判定標準。若報文讀取單 元能夠及時響應第一內存段中等待處理的報文,那么報文讀取單元讀取所述第一內存段內 的報文可以與報文寫入單元向所述第二內存段寫入報文同時進行;若報文讀取單元暫時無 法響應所述第一內存段內的報文,則讀取所述第一內存段內的報文也可以延遲于向第二內 存段寫入報文進行。本發(fā)明實施例提供的接收報文的系統(tǒng),基于至少兩個邏輯相連的內存段,使報文 的寫入和讀取順序是按照內存單元的分段來進行。接收報文時,內存申請及配置單元向所 述內存單元申請地址空間,之后向報文寫入單元配置所述第一內存單元和所述第二內存單 元的段起始地址;報文寫入單元向第一內存段寫入報文;報文寫入單元向所述第一內存段 寫入報文結束后,便接著跳轉至第二內存段的起始地址,向所述第二內存段寫入報文,這 時,所述第一內存段內已寫入的數(shù)據(jù)等待讀??;報文讀取單元讀取所述第一內存段內的數(shù) 據(jù)可以與報文寫入單元向所述第二內存段寫入報文同時進行也可以有一定延時進行,從而 使寫入內存單元的報文能夠按照分段來進行處理,而對于每個內存段內的報文是批量進行處理的。此過程中報文寫入單元一直向內存單元寫入報文,內存單元寫入報文的間斷時間 僅為一個內存段寫完后向另一個內存段跳轉所需的時間,提高了報文接收的操作效率。實施例六實施例六基于實施例五,在實施例五接收報文的系統(tǒng)所包含的單元基礎上做進一 步詳細說明。進一步地,所述內存申請及配置單元配置每個所述內存段接收的最大報文數(shù)量 segN_len,N代表第N段內存段。則每個內存段的存儲容量等于每段配置的最大報文數(shù)量乘 以最大報文長度。其中,所述最大報文長度表示內存接收報文的能力,即能夠接收的報文最 大長度,而非實際進入內存的報文的最大長度,一般情況下,內存能夠接收最大為2千字節(jié) 的報文,而實際的報文長度一般為1.5千字節(jié)左右。例如本發(fā)明實施例中,配置第0內存段 SegO的起始地址為9000_A000,配置第0內存段SegO接收最大報文數(shù)量為1000,則第0內 存段的存儲容量=配置的最大報文數(shù)量*最大報文長度=1000*2千字節(jié)=2兆字節(jié)。其 它內存段的存儲容量類似計算。本發(fā)明實施例在接收報文過程中,可以將前述不相鄰的地址空間利用起來,采用 狀態(tài)機的設計方式,將這些不相鄰的、離散的地址空間有機的銜接在一起,組成環(huán)形緩沖區(qū) (Ring Buffer),即向內存段寫入或讀取報文是按段循環(huán)的。對于本發(fā)明實施例來說,每個 內存段設定一定的轉移條件,當滿足所述轉移條件時,按照狀態(tài)機設計的跳轉順序,跳轉至 下一內存段執(zhí)行操作,這種跳轉順序即為內存段的邏輯連接順序,本發(fā)明實施例中,內存段 之間的跳轉順序是循環(huán)的,即組成環(huán)形緩沖區(qū)。本發(fā)明實施例中的轉移條件為當內存段寫 入的報文數(shù)量達到該內存段的最大容量時,則進行跳轉。與寫入報文相對應地,報文讀取單 元按照內存段的邏輯連接順序,從內存單元讀取報文。如圖8所示,進一步地,所述報文寫入單元3包括計時模塊31,用于設置所述系統(tǒng) 接收報文的總時間。該總時間,可以決定本發(fā)明實施例接收報文的持續(xù)時間,可以根據(jù)報文讀取單元 對于報文分析的需求而得。該總時間的計時到達,為該系統(tǒng)接收報文的停止條件。計時模 塊開始計時,觸發(fā)報文接收功能,進入接收報文狀態(tài)。進一步地,所述報文寫入單元還包括計數(shù)模塊32,用于指示當前正在寫入的所述 內存段內已寫入的報文數(shù)量。報文寫入單元能通過計數(shù)模塊精確指示每個內存段寫入了多少個報文,當達到該 內存段的最大報文數(shù)量時,則向下一內存段進行跳轉。特別是對于時間到達時正在寫入報 文的內存段,則報文讀取單元還可以通過該內存段的計數(shù)模塊指示的報文數(shù)量,精確讀取 所寫入的報文數(shù)量。進一步地,所述報文寫入單元3還包括段結束及中斷模塊33,用于當向所述第一 內存段或第二內存段寫入的報文數(shù)量達到該內存段預先配置的最大報文數(shù)量時,指示所述 內存段的報文寫入結束,并向所述報文讀取單元上報中斷請求。本發(fā)明實施例中,可以通過定義寄存器其中一個標志位為段結束標志位來標記該 段是否寫入結束,即通過改變該標志位的二進制狀態(tài),來標記是否寫入結束,每個內存段均 設置一個段結束標志位。當內存段被標記已寫入結束時,段結束及中斷模塊同時向報文讀 取單元發(fā)送一個中斷請求,請求讀取該內存段內的報文。
12
本發(fā)明實施例中,所有內存段是循環(huán)相接的,當最后一個內存段寫入完畢后,跳轉 至第一個內存段,再次向第一個內存段寫入報文。對于本發(fā)明實施例來說,還可能存在另外 一種情況,即若報文讀取單元讀取所述第一內存段內的報文延遲于向所述第二內存段寫入 報文的時間過長,則再次跳轉至所述第二內存段進行寫入時,可能該內存段內之前寫入的 報文還未處理。針對此種情況,本發(fā)明實施例所述報文寫入單元,還用于向所述第一內存段再次 寫入報文,覆蓋該內存段已寫入的報文;所述報文寫入單元3還包括覆蓋指示模塊34,用于 當所述第一內存段已寫入的報文被覆蓋時,標記所述第一內存段報文已被覆蓋。本發(fā)明實施例中,所述覆蓋指示模塊可以通過定義寄存器其中一個標志位來實 現(xiàn),具體做法為通過改變該標志位的二進制狀態(tài),來改變已被覆蓋或未被覆蓋狀態(tài),每個內 存段均設置一個報文覆蓋標志位。進一步地,所述段結束及中斷模塊33,還用于當所述內存單元接收報文的時間達 到配置的總時間時,指示當前正在寫入的內存段寫入結束,并向所述報文讀取單元上報時 間到達。當計時模塊開始計時后達到設置的總時間時,認為報文讀取單元已經讀取到了對 報文進行分析所要的報文數(shù)量,則正在寫入的內存段即使沒有完成配置的最大報文數(shù)量, 段結束及中斷模塊也會對正在寫入的當前內存段標記“段結束”,同時向報文讀取單元指示 總時間到達,報文讀取單元接收到總時間到達指示后,讀取完所述當前內存段的報文后,停 止讀取報文,接收報文過程結束。作為本發(fā)明實施例進一步地完善方案,本發(fā)明實施例報文讀取單元4包括指示停 止模塊42,用于確定從所述內存單元所讀取出來的報文數(shù)量滿足報文處理的數(shù)量需求,指 示停止向所述內存單元寫入和從所述內存單元讀取報文如果在定時時間到達之前,處理模塊基于已讀取到的所有報文,進行統(tǒng)計判斷,若 認為大批量寫入內存的報文已滿足處理過程中對報文數(shù)量的需求,便可停止接收報文,完 成接收報文過程,但是報文寫入單元不指示“段結束”,也不指示時間到達。作為本發(fā)明實施例的一種簡化方案,所述至少兩個內存段之間的狀態(tài)機采用順序 相接的形式,即當最后一個內存段滿足轉移條件時,回到狀態(tài)機的初始狀態(tài)。內存段之間若 最后一個內存段寫入的報文數(shù)量等于配置的最大報文數(shù)量,段結束及中斷模塊標記“段結 束”后,即使定時總時間未到達,也停止向內存再次寫入報文,已寫入內存的報文等待報文 讀取單元讀取。本發(fā)明實施例提供的接收報文的系統(tǒng),報文讀取單元和內存申請及配置單元可以 為網絡中的CPU (Central Processing Unit)子系統(tǒng),報文寫入單元由ASIC(專用集成電 路,Application Specificlntegrated Circuit)子系統(tǒng)或者現(xiàn)場可編程門陣列(FPGA, Field-Programmable Gate Array)子系統(tǒng)構成。本發(fā)明實施例提供的接收報文的系統(tǒng),向內存單元申請至少兩個內存段,宏觀上 向內存寫入報文和從內存中讀取報文可以同時進行。本發(fā)明實施例針對內存段寫入報文循 環(huán)的情況,給出了再次向一個內存段寫入報文時,上次寫入的報文還未處理,這種特殊情況 的解決辦法;以及內存段間不存在循環(huán)關系,最后一個內存段寫入結束后的解決辦法。本發(fā) 明實施例使向內存寫入報文時,除跳轉所需時間外保持連續(xù)寫入,同時也可以時刻使內存保持可讀取報文,從而能夠進行分段處理、批量處理報文。本發(fā)明實施例還給出了報文接收 過程的兩種停止條件,即時間到達時,停止接收報文和讀取的報文數(shù)量滿足處理需求,停止 接收接文。本發(fā)明實施例提高了報文接收的效率。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發(fā)明可以通 過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā) 明的技術方案可以以軟件產品的形式體現(xiàn)出來,該軟件產品可以存儲在一個非易失性存儲 介質(可以是⑶-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可 以是個人計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例上述的方法。本領域技術人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流 程并不一定是實施本發(fā)明所必須的。本領域技術人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分 布于實施例的裝置中,也可以進行相應變化位于不同于本實施例的一個或多個裝置中。上 述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。以上公開的僅為本發(fā)明的幾個具體實施例,但是,本發(fā)明并非局限于此,任何本領 域的技術人員能思之的變化都應落入本發(fā)明的保護范圍。
權利要求
一種接收報文的方法,其特征在于,該方法包括向內存單元的第一內存段中寫入報文;當向所述第一內存段寫入報文結束時,根據(jù)第二內存段的段起始地址,向所述第二內存段中寫入報文;在向所述第一內存段寫入報文結束后,從所述第一內存段讀取已寫入的報文。
2.按照權利要求1所述的接收報文的方法,其特征在于,在所述向內存單元的第一內 存段中寫入報文之前,所述方法還包括向所述內存單元申請所述第一內存段和所述第二內存段,配置每個所述內存段的段起 始地址。
3.按照權利要求2所述的接收報文的方法,其特征在于,所述方法還包括配置所述第一內存段和所述第二內存段可以寫入報文的最大報文數(shù)量。
4.按照權利要求3所述的接收報文的方法,其特征在于,所述當向所述第一內存段寫 入報文結束時,根據(jù)第二內存段的段起始地址,向所述第二內存段中寫入報文,包括當向所述第一內存段寫入的報文數(shù)量達到預先配置的最大報文數(shù)量時,根據(jù)所述第二 內存段的段起始地址,向所述第二內存段中寫入報文。
5.按照權利要求1所述的接收報文的方法,其特征在于,所述方法還包括當向所述第二內存段寫入報文結束時,根據(jù)所述第一內存段的段起始地址,向所述第 一內存段中寫入報文;在向所述第二內存段寫入報文結束后,從所述第二內存段中讀取已寫入的報文。
6.按照權利要求1所述的接收報文的方法,其特征在于,所述在向所述第一內存段寫 入報文結束后,從所述第一內存段讀取已寫入的報文,包括在向所述第二內存段寫入報文時,從所述第一內存段中讀取所述已寫入的報文。
7.一種接收報文的系統(tǒng),其特征在于,所述系統(tǒng)包括內存單元,用于暫存報文;內存申請及配置單元,用于向所述內存單元申請第一內存段和第二內存段,配置所述 第一內存單元和所述第二內存單元的段起始地址;報文寫入單元,用于向所述內存單元的所述第一內存段和所述第二內存段中寫入報 文;其中,當向所述第一內存段寫入報文結束時,根據(jù)所述第二內存段的段起始地址,向所 述第二內存段中寫入報文;報文讀取單元,用于在所述報文寫入單元向所述第一內存段寫入報文結束后,從所述 第一內存段讀取已寫入的報文。
8.按照權利要求7所述的接收報文的系統(tǒng),其特征在于所述報文寫入單元包括段結束及中斷模塊,用于當向所述第一內存段或第二內存段 寫入的報文數(shù)量達到該內存段預先配置的最大報文數(shù)量時,指示所述內存段的報文寫入結 束,并向所述報文讀取單元上報中斷請求。
9.按照權利要求8所述的接收報文的系統(tǒng),其特征在于所述段結束及中斷模塊,還用于當所述內存單元接收報文的時間達到配置的總時間 時,指示當前正在寫入的內存段寫入結束,并向所述報文讀取單元上報時間到達。
10.按照權利要求7所述的接收報文的系統(tǒng),其特征在于所述報文讀取單元包括指示停止模塊,用于確定從所述內存單元所讀取出來的報文數(shù) 量滿足報文處理的數(shù)量需求,指示停止向所述內存單元寫入和從所述內存單元讀取報文。
11.按照權利要求7所述的接收報文的系統(tǒng),其特征在于所述報文寫入單元還包括計數(shù)模塊,用于指示當前正在寫入的所述內存段內已寫入的 報文數(shù)量。
全文摘要
本發(fā)明實施例公開了一種接收報文的方法及系統(tǒng),涉及數(shù)據(jù)通信技術領域,為減少向內存單元寫入報文的等待時間,提高報文接收的操作效率而設計。本發(fā)明實施例公開的接收報文的方法,包括向內存單元的第一內存段中寫入報文;當向所述第一內存段寫入報文結束時,根據(jù)第二內存段的段起始地址,向所述第二內存段中寫入報文;在向所述第一內存段寫入報文結束后,從所述第一內存段讀取已寫入的報文。本發(fā)明實施例還提供了與所述方法相對應的接收報文的系統(tǒng)包括內存單元、內存申請及配置單元、報文寫入單元和報文讀取單元。本發(fā)明實施例用于通信系統(tǒng)中接收報文。
文檔編號H04L12/56GK101873257SQ20101019191
公開日2010年10月27日 申請日期2010年6月4日 優(yōu)先權日2010年6月4日
發(fā)明者宋奇剛, 李中華, 杜欣, 譚亞中, 黃久松 申請人:華為技術有限公司