專利名稱:一種數(shù)據(jù)包的并發(fā)處理方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機技術(shù)領(lǐng)域,更具體的說,涉及一種數(shù)據(jù)包的并發(fā)處理方法及設(shè)備。
背景技術(shù):
目前,在ASIC(Application Specific Integrated Circuit,特殊應(yīng)用集成電路) 或者FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)的設(shè)計中,經(jīng)常需要處理各種各樣協(xié)議規(guī)定的數(shù)據(jù)包,這些數(shù)據(jù)包通常具有兩個共性一是數(shù)據(jù)包長度不同;二是不同數(shù)據(jù)包可以不按照一定順序來處理。在硬件設(shè)計中,能否對這些協(xié)議數(shù)據(jù)包進行快速高效的處理,對系統(tǒng)的性能有很大影響。目前所有不同類型的數(shù)據(jù)包共享一個大的存儲器,并針對不同的數(shù)據(jù)包建立各自對應(yīng)的單向鏈表,將各自的消息類按按順序串起來;同時建立一個地址池,所述地址池用于對共享存儲器的地址進行維護,其中,用一個空閑鏈表將共享存儲器中所有的空閑地址串起來,用于指示共享存儲器中的空閑位置;其中,基于地址池對所有鏈表進行維護操作。當(dāng)有消息要寫入共享存儲器時,首先從地址池中的空閑鏈表頭取出一個空閑地址作為寫入共享存儲器的地址,并將此空閑地址寫入到地址池中對應(yīng)消息類的鏈表尾;當(dāng)有消息要讀出共享存儲器時,首先從地址池中對應(yīng)消息類的鏈表頭取出一個消息地址作為讀出共享緩沖器的地址,并將此地址寫入到地址池中的空閑鏈表尾。在實現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題由于現(xiàn)有技術(shù)中所有鏈表的操作均是基于一個地址池作出的,由于地址池的端口有限,能夠支持同時對地址池的雙讀雙寫,也就是說只能支持同時進行讀取一個消息和寫入一個消息的操作。當(dāng)一個消息要寫入共享存儲器時,對地址池分別做一次讀操作和寫操作;當(dāng)一個消息要讀出共享存儲器時,也會分別對地址池做一次讀操作和寫操作,因此,現(xiàn)有方案無法實現(xiàn)共享存儲器中同時讀取兩個消息和寫入兩個消息,消息的讀寫速度受到極大的限制,從而影響系統(tǒng)的性能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種數(shù)據(jù)包的并發(fā)處理方法及設(shè)備,通過提高數(shù)據(jù)包的讀寫速度來提升系統(tǒng)性能。本發(fā)明實施例一方面提供了一種數(shù)據(jù)包的并發(fā)處理方法,包括在地址池中采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO;在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的地址FIFO中。本發(fā)明實施例另一方面提供了一種數(shù)據(jù)包的并發(fā)處理設(shè)備,包括配置處理模塊,用于采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;消息控制模塊,用于在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述配置處理模塊配置的所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的所述配置處理模塊建立的所述地址FIFO中。由上述本發(fā)明的實施例提供的技術(shù)方案可以看出,通過在地址池中采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址;并針對所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;在接收到要同時寫入所述共享存儲器的至少兩個消息時,兩個單向空閑鏈表可以分別向兩個消息提供寫入共享存儲器的地址,并將每個消息的寫入地址更新到對應(yīng)的地址FIFO中,解決了現(xiàn)有方案中只能支持同時讀取和寫入一個消息的技術(shù)問題,實現(xiàn)了共享存儲器中對兩個消息的同時讀取和寫入,能夠提高消息的讀寫速度,從而有利于進一步提高系統(tǒng)的性能。
圖1為本發(fā)明實施例一種數(shù)據(jù)包的并發(fā)處理方法流程圖;圖2為本發(fā)明實施例的一種應(yīng)用場景圖;圖3為本發(fā)明實施例的另一種應(yīng)用場景圖;圖4為本發(fā)明實施例一種數(shù)據(jù)包的并發(fā)處理設(shè)備結(jié)構(gòu)示意圖。
具體實施例方式本發(fā)明實施例提出了基于鏈表和FIF0(Fisrt In First Out,先進先出隊列)管理地址的一種數(shù)據(jù)包的并發(fā)處理方法及設(shè)備,具體是采用一個共享存儲器緩存不同類型、不同長度的數(shù)據(jù)包,采用地址池中至少兩個單向空閑鏈表和多個地址FIFO,對共享存儲器中消息的讀出和寫入過程進行精確控制,實現(xiàn)了共享存儲器中對至少兩個消息的同時讀出和寫入。為了便于理解本發(fā)明的技術(shù)方案,下面結(jié)合具體實施例和附圖對本發(fā)明的技術(shù)方案進一步說明。如圖1所示,本發(fā)明實施例提出了一種數(shù)據(jù)包的并發(fā)處理方法,技術(shù)方案包括101、在地址池中采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;102、獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;103、在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的地址FIFO中。在本發(fā)明的一個可選實施例中,所述方法還可以包括在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從所述至少兩個消息對應(yīng)的地址FIFO中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址,并分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址更新到所述至少兩個單向空閑鏈表中。具體的說,如圖2所示為本發(fā)明實施例所述方法的應(yīng)用場景圖如圖所示,共享存儲器是一個大的雙端口緩沖存儲器(buffer),用來存儲不同類型、不同長度的數(shù)據(jù)包;其中,two free^hains為本發(fā)明實施例所述的兩個單向空閑鏈表; MsgO Addr FIFO. . . MsgN Addr FIFO為本發(fā)明實施例所述的分別針對不同消息類型建立的地址先進先出隊列FIFO,用于分別存儲該類型在共享存儲器中的消息地址。Addr Pool為地址池,本發(fā)明實施例所述地址池與背景技術(shù)部分所述地址池不同,本發(fā)明實施例中所述地址池用于存儲共享存儲器中所有的空閑地址,并采用兩個單向空閑鏈表(twofree^hains)來存儲所述空閑地址;地址池是一個雙端口緩沖存儲器 (buffer);在上述步驟101之前,所述方法還可以包括建立至少兩個單向空閑鏈表,其中,每個鏈表都具有頭指針(HeadPtr)和尾指針 (TailPtr);所述單向空閑鏈表包括兩部分內(nèi)容,一部分是共享存儲器的空閑地址,如圖 twofree_chains中右部分;另一部分是用于指向下一個可用空閑地址的指針部分,如圖 twofree_chains中左部分;將頭指針和尾指針分別指向所述單向空閑鏈表的頭和尾。通過上述這種單向空閑鏈表的形式,可以把共享存儲器中所有的空閑地址鏈接起來。需要說明的是,本發(fā)明實施例中兩個單向空閑鏈表,通常采用將共享存儲器中的所有空閑地址均分的方式存儲所述空閑地址。在本發(fā)明的一個可選實施例中,在接收到要同時寫入所述共享存儲器的至少兩個消息時,步驟103的具體過程包括分別從所述至少兩個單向空閑鏈表的表頭中取出空閑地址,作為所述至少兩個消息寫入共享存儲器的空閑地址;分別將與所述至少兩個消息對應(yīng)的所述地址,寫入到與所述消息對應(yīng)的地址FIFO 的表尾。具體的說,圖2所示,在接收到要同時寫入共享存儲器中的兩種不同類型的消息 (Msg inO和Msg inl)時,分別從兩個單向空閑鏈表的表頭中取出一個空閑地址,作為寫入共享存儲器的空閑地址(WrAddr_a和WrAddr_b);并將所述寫入共享存儲器的空閑地址,分別寫入到與所述消息對應(yīng)的地址 FIFO (MsgO Addr FIFO 和 Msgl Addr FIFO)的表尾。通過上述實現(xiàn)方式,不僅實現(xiàn)了兩個消息同時寫入共享存儲器中的發(fā)明目的,同時也實現(xiàn)了共享存儲器中對于兩種不同類型消息的同時寫入。在本發(fā)明的一個可選實施例中,在接收到要同時讀出所述共享存儲器的至少兩個消息時,所述步驟包括分別從與所述至少兩個消息對應(yīng)的地址FIFO的表頭中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址;分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址,分別更新到兩個空閑鏈表的表尾。具體的說,圖2所示,在接收到要同時讀出共享存儲器的至少兩種不同類型的消息(Msg OutO 禾口 Msg Outl)時,從兩個消息對應(yīng)的地址 FIFO (MsgOAddr FIFO 禾口 Msgl Addr FIFO)的表頭中,分別取出所述消息的地址(RdAddr_a和RdAddr_b),作為該消息讀出共享存儲器的地址;并將所述消息讀出共享存儲器的地址(RdAddr_a和RdAddr_b),分別更新到地址池中兩個空閑鏈表尾部??蛇x的,所述方法還包括所述至少兩個單向空閑鏈表之間可動態(tài)平衡長度,進一步包括在接收到要寫入共享存儲器中的一個消息時,根據(jù)所述單向空閑鏈表的長度選擇較長的單向空閑鏈表提供所述消息寫入共享存儲器的空閑地址;在接收到要讀出共享存儲器中的一個消息時,從所述消息對應(yīng)的地址FIFO中取出所述消息的地址,并根據(jù)所述單向空閑鏈表的長度選擇較短的單向空閑鏈表,將所述讀出共享存儲器的地址更新到所述單向空閑鏈表中。本發(fā)明實施例解決了現(xiàn)有技術(shù)中,由于建立的所有鏈表都是基于一個地址池做讀出和寫入操作,地址池的端口為雙端口,只可以支持同時雙讀雙寫;因此當(dāng)一個消息寫入共享存儲器時,會對地址池分別做一次讀操作(從一個空閑鏈表中讀取一個空閑地址作為寫入共享存儲器的地址)和寫操作(將該寫入共享存儲器的地址寫入到地址池中對應(yīng)消息類的鏈表尾);當(dāng)一個消息讀出時,也會對地址池做一次讀操作(從地址池中對應(yīng)消息類的鏈表中取出該消息的地址作為讀出共享存儲器的地址)和寫操作(將讀出共享存儲器的地址寫入到地址池中的空閑鏈表中);這樣當(dāng)有一個消息寫入,一個消息讀出時,已經(jīng)對地址池做出了兩次讀操作和寫操作,因此也就不能滿足同時讀取兩個消息和同時寫入兩個消息的需求了。本發(fā)明實施例中由于針對不同消息類型建立了對應(yīng)的地址FIFO,并在地址池中配置了兩個單向空閑鏈表,當(dāng)接收到有兩條消息要寫入共享存儲器的指令時,從地址池中兩個空閑鏈表中分別讀出一個空閑地址,并將讀出的空閑地址分別寫入與該消息對應(yīng)的地址 FIFO中,在兩條消息要同時寫入共享存儲器的場景下,對地址池只做出了兩次讀操作,因此,在兩條消息同時寫入共享存儲器的場景下,還可以提供兩條消息同時讀出共享存儲器的功能,從而解決現(xiàn)有技術(shù)存在不能實現(xiàn)同時讀取兩個消息和同時寫入兩個消息的的技術(shù)問題。如圖3所示,以htel QPI 1. 1協(xié)議為例,對本發(fā)明實施例的技術(shù)方案的實現(xiàn)過程進行說明Intel QPI 1. 1協(xié)議中定義有6種消息類型,分別是SNP (snoop,監(jiān)聽),HOM(home, 本地),DRS (data response,數(shù)據(jù)返回),NDR (none data response,無數(shù)據(jù)返回),NCB (none coherence bypass,非一致性旁路)禾口 NCS (none coherence standard,非一致性標(biāo)準(zhǔn));其
7中,SNP,H0M禾口 NDR的長度為1個flit (一個flit是80bit) ;DRS和NCB的長度為9 11 個flit ;NCS的長度為1 3個flit ;共享緩沖器的位寬為80bit的雙端口 RAM ;系統(tǒng)初始化時,在地址池中建立至少兩個單向空閑鏈表(twofree_chains) 來存儲共享存儲器中的空閑地址;其中,每個鏈表都具有頭指針(HeadPtr)和尾指針 (TailPtr);所述單向空閑鏈表包括共享存儲器的空閑地址以及用于指向下一個可用空閑地址的指針部分;并將頭指針和尾指針分別指向所述單向空閑鏈表的頭和尾;具體如圖3 所示;針對所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;具體的, 建立與消息類型SNP,HOM, DRS, NDR, NCB和NCS對應(yīng)的地址FIFO,具體如圖3所示;當(dāng)接收到要同時寫入共享存儲器的SNP和DRS兩種不同類型的消息時,SNP的消息從channel_in_a通道寫入,DRS的消息從channel_in_b通道寫入;地址池中兩個空閑鏈表分別提供一個空閑地址作為SNP和DRS消息的寫入共享存儲器的地址,并將該地址分別寫入到與SNP和DRS對應(yīng)的地址FIFO中;其中,因為SNP消息的長度為1個flit,則空閑鏈表只需提供一個空閑地址即可滿足寫入要求,而DRS消息的長度為9 11個flit,空閑鏈表需要連續(xù)給出空閑地址直到 DRS消息全部寫入共享存儲器中;在SNP消息寫入完成時,而DRS消息還在寫入的過程中, 這時Channel_in_a通道空閑,可以應(yīng)用此通道繼續(xù)寫入其他類型的消息;當(dāng)接收到要同時讀出共享存儲器的NDR和HOM兩種不同類型的消息時,NDR的消息從channel_out_a通道讀出,HOM的消息從channel_out_b通道讀出; NDR消息和HOM消息對應(yīng)的地址FIFO分別給出該消息的地址作為讀出共享存儲器的地址,因為NDR消息和HOM消息的長度都為1個flit,則NDR消息和HOM消息對應(yīng)的地址 FIFO只需要給出一個消息地址即可滿足讀取要求,并將該消息地址寫入到地址池中的兩個空閑鏈表的尾部,從而完成N DR和HOM兩種不同類型消息在共享存儲器中的同時讀出。如圖4所示,本發(fā)明實施例還提出了一種數(shù)據(jù)包的并發(fā)處理設(shè)備,通過如下模塊實現(xiàn)配置處理模塊41,用于采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址, 所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;消息控制模塊42,用于在接收到要同時寫入所述共享存儲器的至少兩個消息時, 由所述配置處理模塊配置的所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的所述配置處理模塊建立的所述地址FIFO中。在本發(fā)明的一個可選實施例中,所述消息控制模42塊還用于在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址, 并分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址更新到所述至少兩個單向空閑鏈表中。在本發(fā)明的一個可選實施例中,所述配置處理模塊41具體用于建立至少兩個單向空閑鏈表;所述單向空閑鏈表包括共享存儲器的空閑地址以及指向下一個可用空閑地址的指針部分;將頭指針和尾指針分別指向所述單向空閑鏈表的頭和尾。在本發(fā)明的一個可選實施例中,所述消息控制模塊42具體用于在接收到要同時寫入所述共享存儲器的至少兩個消息時,分別從所述至少兩個單向空閑鏈表的表頭中取出空閑地址,作為所述至少兩個消息寫入共享存儲器的空閑地址;分別將與所述至少兩個消息對應(yīng)的所述地址,寫入到與所述消息對應(yīng)的地址FIFO 的表尾;在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO的表頭中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址;分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址,分別更新到兩個空閑鏈表的表尾。在本發(fā)明的一個可選實施例中,所述消息控制模塊還用于在接收到要寫入共享存儲器中的一個消息時,根據(jù)所述單向空閑鏈表的長度選擇較長的單向空閑鏈表提供所述消息寫入共享存儲器的空閑地址;在接收到要讀出共享存儲器中的一個消息時,從所述消息對應(yīng)的地址FIFO中取出所述消息的地址,并根據(jù)所述單向空閑鏈表的長度選擇較短的單向空閑鏈表,將所述讀出共享存儲器的地址更新到所述單向空閑鏈表中。在本發(fā)明的一個可選實施例中,所述設(shè)備適用于不同消息類型下,對兩個消息的同時讀取和寫入,還適用于相同消息類型下,一個消息的同時讀取和寫入共享存儲器的應(yīng)用場景。需要說明的是,本發(fā)明實施例一種數(shù)據(jù)包的并發(fā)處理設(shè)備是根據(jù)圖1所示的方法實施例直接獲得的,包含與所述圖1方法實施例相同的技術(shù)特征,其中,本發(fā)明實施例中各功能模塊實現(xiàn)的方案與圖1方法實施例中各步驟記載的技術(shù)方案對應(yīng),具體請參見圖1實施例中的描述,在此不做贅述。綜上所述,本發(fā)明實施例實現(xiàn)了共享存儲器中兩個消息的同時讀出與寫入,不僅適用于,也適用于兩個不同類型消息的應(yīng)用場景,還適用于一個消息的同時讀取和寫入共享存儲器的應(yīng)用場景。本發(fā)明實施例可應(yīng)用在各種不同類型、不同長度數(shù)據(jù)包的存儲設(shè)計中,不僅可以對數(shù)據(jù)包實現(xiàn)亂序并發(fā)的讀寫,也可按順序讀寫;不僅僅可在ASIC或FPGA實現(xiàn)時使用,在其他資源比較緊張的情況下也比較實用,可提高資源利用率和系統(tǒng)性能,尤其是在數(shù)據(jù)包長度相差較大的情況下。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random Access Memory, RAM)等。
權(quán)利要求
1.一種數(shù)據(jù)包的并發(fā)處理方法,其特征在于,包括在地址池中采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的地址FIFO中。
2.根據(jù)權(quán)利要求1所述的處理方法,其特征在于,所述方法還包括在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址,并分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址更新到所述至少兩個單向空閑鏈表中。
3.根據(jù)權(quán)利要求2所述的處理方法,其特征在于,所述方法還包括建立至少兩個單向空閑鏈表;所述單向空閑鏈表包括共享存儲器中的空閑地址以及指向下一個可用空閑地址的指針部分;將頭指針和尾指針分別指向所述單向空閑鏈表的頭和尾。
4.根據(jù)權(quán)利要求3所述的處理方法,其特征在于,在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述至少兩個單向空閑鏈表分別為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的地址FIFO中,包括分別從所述至少兩個單向空閑鏈表的表頭中取出空閑地址,作為所述至少兩個消息寫入共享存儲器的空閑地址;分別將與所述至少兩個消息對應(yīng)的所述地址,寫入到與所述消息對應(yīng)的地址FIFO的表尾。
5.根據(jù)權(quán)利要求3所述的處理方法,其特征在于,在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址,并分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址更新到所述至少兩個單向空閑鏈表中,包括分別從與所述至少兩個消息對應(yīng)的地址FIFO的表頭中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址;分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址,分別更新到兩個空閑鏈表的表尾。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括 所述至少兩個單向空閑鏈表之間動態(tài)平衡長度;進一步包括在接收到要寫入共享存儲器中的一個消息時,根據(jù)所述單向空閑鏈表的長度選擇較長的單向空閑鏈表提供所述消息寫入共享存儲器的空閑地址;在接收到要讀出共享存儲器中的一個消息時,從所述消息對應(yīng)的地址FIFO中取出所述消息的地址,并根據(jù)所述單向空閑鏈表的長度選擇較短的單向空閑鏈表,將所述讀出共享存儲器的地址更新到所述單向空閑鏈表中。
7.根據(jù)權(quán)利要求1-6中任一所述的處理方法,其特征在于,所述方法適用于不同消息類型下,對兩個消息的同時讀取和寫入;以及,相同消息類型下,一個消息的同時讀取和寫入。
8.一種數(shù)據(jù)包的并發(fā)處理設(shè)備,其特征在于,包括配置處理模塊,用于采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO ;消息控制模塊,用于在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述配置處理模塊配置的所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的所述配置處理模塊建立的所述地址FIFO中。
9.根據(jù)權(quán)利要求8所述的處理設(shè)備,其特征在于,所述消息控制模塊還用于在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址,并分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址更新到所述至少兩個單向空閑鏈表中。
10.根據(jù)權(quán)利要求9所述的處理設(shè)備,其特征在于,所述配置處理模塊具體用于建立至少兩個單向空閑鏈表;所述單向空閑鏈表包括共享存儲器的空閑地址以及指向下一個可用空閑地址的指針部分;將頭指針和尾指針分別指向所述單向空閑鏈表的頭和尾。
11.根據(jù)權(quán)利要求10所述的處理設(shè)備,其特征在于,所述消息控制模塊具體用于在接收到要同時寫入所述共享存儲器的至少兩個消息時,分別從所述至少兩個單向空閑鏈表的表頭中取出空閑地址,作為所述至少兩個消息寫入共享存儲器的空閑地址;分別將與所述至少兩個消息對應(yīng)的所述地址,寫入到與所述消息對應(yīng)的地址FIFO的表尾;在接收到要同時讀出所述共享存儲器的至少兩個消息時,分別從與所述至少兩個消息對應(yīng)的地址FIFO的表頭中取出所述消息的地址,作為所述消息讀出所述共享存儲器的地址;分別將與所述至少兩個消息對應(yīng)的讀出所述共享存儲器的地址,分別更新到兩個空閑鏈表的表尾。
12.根據(jù)權(quán)利要求9所述的處理設(shè)備,其特征在于,所述消息控制模塊還用于在接收到要寫入共享存儲器中的一個消息時,根據(jù)所述單向空閑鏈表的長度選擇較長的單向空閑鏈表提供所述消息寫入共享存儲器的空閑地址;在接收到要讀出共享存儲器中的一個消息時,從所述消息對應(yīng)的地址FIFO中取出所述消息的地址,并根據(jù)所述單向空閑鏈表的長度選擇較短的單向空閑鏈表,將所述讀出共享存儲器的地址更新到所述單向空閑鏈表中。
13.根據(jù)權(quán)利要求8-12中任一所述的處理設(shè)備,其特征在于,所述設(shè)備適用于不同消息類型下,對兩個消息的同時讀取和寫入;以及,相同消息類型下,一個消息的同時讀取和寫入。
全文摘要
本發(fā)明涉及一種數(shù)據(jù)包的并發(fā)處理方法及設(shè)備,該方法包括在地址池中采用至少兩個單向空閑鏈表存儲共享存儲器的空閑地址,所述地址池用于存儲共享存儲器中所有的空閑地址;獲取所述共享存儲器的消息類型,并根據(jù)所述共享存儲器中的消息類型建立對應(yīng)的地址先進先出隊列FIFO;在接收到要同時寫入所述共享存儲器的至少兩個消息時,由所述至少兩個單向空閑鏈表為所述至少兩個消息分別提供寫入共享存儲器的空閑地址,并將分別與所述至少兩個消息對應(yīng)的所述地址更新到所述消息對應(yīng)的地址FIFO中。本發(fā)明技術(shù)方案的實現(xiàn),能夠解決現(xiàn)有技術(shù)中無法實現(xiàn)共享存儲器中對兩個消息的同時讀取和寫入。
文檔編號G06F5/06GK102395958SQ201180001485
公開日2012年3月28日 申請日期2011年8月26日 優(yōu)先權(quán)日2011年8月26日
發(fā)明者侯新宇, 常勝, 楊寶川, 王工藝 申請人:華為技術(shù)有限公司