两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

嵌入式或無線通信系統(tǒng)中用于存儲器分配的系統(tǒng)和方法

文檔序號:7733161閱讀:315來源:國知局
專利名稱:嵌入式或無線通信系統(tǒng)中用于存儲器分配的系統(tǒng)和方法
嵌入式或無線通信系統(tǒng)中用于存儲器分配的系統(tǒng)和方法相關(guān)申請的交叉引用 本申請要求于2008年4月2日提交的題為MEMORY ALLOCATION SCHEME FOR EMBEDDED OR WIRELESS COMMUNICATION SYSTEMS (用于嵌入式或無線通信系統(tǒng)的存儲器分 配方案)的美國臨時專利申請S/N. 61/041,878的權(quán)益。該申請的全部內(nèi)容通過援引納入 于此。背景 發(fā)明領(lǐng)域本領(lǐng)域一般涉及存儲器分配,尤其涉及嵌入式或無線通信系統(tǒng)中的存儲器分配。
背景技術(shù)
存儲器分配服務(wù)利用存儲器項池。在一些情形中,存儲器項基于存儲器項的大小 被分序到不同的池中。例如,一個池可能包括許多小存儲器項,而另一個池可能包括相對 少的大存儲器項。響應(yīng)于存儲器分配請求,可從特定池中選擇恰適數(shù)據(jù)項并將其返回給請 求方實體。該系統(tǒng)導(dǎo)致顯著的存儲器和處理器資源浪費。例如,在小存儲器項的情況下,頭 部與有效載荷之比較高,導(dǎo)致低效率的存儲器使用。進一步,當(dāng)整個存儲器項被分配時,任 何特定數(shù)據(jù)項的顯著數(shù)據(jù)部分可能處于未使用。另外,在這些分配服務(wù)中,沒有統(tǒng)計復(fù)用可 用。處理器資源也因多個小存儲器項的鏈接而被消耗。在無線通信系統(tǒng)中,分組常常被分段成較小的固定大小——例如40字節(jié)——的 “無線電鏈路”分組,以確??煽康臒o線電傳輸。為了高效率地使用存儲器,一種辦法是創(chuàng)建 各保持40字節(jié)塊的相對小存儲器項的大池,這些存儲器項最終在較高層上被鏈接在一起 以形成較大的數(shù)據(jù)塊(例如,1500字節(jié)的IP分組)。此服務(wù)的一個缺點在于一些空間可能 被浪費,因為這些存儲器項可能必須對準(zhǔn)高速緩存行(32或64字節(jié)),這可能不適合小的無 線電鏈路分組大小。另外,不同技術(shù)可能共享相同的存儲器項池以減小整個存儲器,在這種 情形中必須將存儲器項有效載荷大小選取為適合最大的無線電鏈路分組大小,其會進一步 增加浪費。發(fā)明概述在一個實施例中,提供了一種提供存儲器管理的系統(tǒng)。該系統(tǒng)包括處理器和可在 該處理器上執(zhí)行的存儲器管理服務(wù)。該存儲器管理服務(wù)可配置成生成第一存儲器項,其中 第一存儲器項中的每一者包括頭部和有效載荷,有效載荷可配置成存儲多個可獨立分配的 存儲器大塊,第一存儲器項的頭部引用有效載荷中的可分配空間;生成第二存儲器項,其中 第二存儲器項中的每一者包括引用第一存儲器項的有效載荷中的一個或多個存儲器大塊 的頭部;以及響應(yīng)于存儲器分配請求返回來自或者第一或者第二存儲器項的頭部的引用。在另一個實施例中,提供了一種用于存儲器管理的方法。該方法包括分配第一存 儲器項,第一存儲器項各自包括第一頭部和有效載荷,有效載荷包括可獨立分配的存儲器 大塊,第一頭部包括對有效載荷中未分配存儲器的引用;分配第二存儲器項,第二存儲器項各自包括第二頭部,第二頭部包括對第一存儲器項的有效載荷中獲分配存儲器大塊的引 用;接收對存儲器分配的請求;以及通過返回來自第一或者第二存儲器項的頭部的引用來 響應(yīng)對存儲器分配的請求在另一個實施例中,提供了一種存儲器管理系統(tǒng)。該系統(tǒng)包括用于分配第一存儲 器項的裝置,第一存儲器項各自包括第一頭部和有效載荷,有效載荷包括可獨立分配的存 儲器大塊,第一頭部包括對有效載荷中未分配存儲器的引用;用于分配第二存儲器項的裝 置,第二存儲器項各自包括第二頭部,第二頭部包括對第一存儲器項的有效載荷中獲分配 存儲器大塊的引用;用于接收對存儲器分配的請求的裝置;以及用于通過返回來自第一或 者第二存儲器項的頭部的引用來響應(yīng)對存儲器分配的請求的裝置。在另一個實施例中,提供了編碼有計算機指令的計算機可讀介質(zhì)。這些指令在被 執(zhí)行時使得處理器分配第一存儲器項,第一存儲器項各自包括第一頭部和有效載荷,有效 載荷包括可獨立分配的存儲器大塊,第一頭部包括對有效載荷中未分配存儲器的引用;分 配第二存儲器項,第二存儲器項各自包括第二頭部,第二頭部包括對第一存儲器項的有效 載荷中獲分配存儲器大塊的引用;接收對存儲器分配的請求;以及通過返回來自第一或者 第二存儲器項的頭部的引用來響應(yīng)對存儲器分配的請求。附圖簡要描述

圖1是圖解移動設(shè)備的示例的框圖。圖2是圖解存儲器項的示例的框圖。圖3是圖解存儲器項的另一個示例的框圖。圖4A和4B是圖解用于分配存儲器的方法的示例的框圖。圖5是圖解存儲器分配服務(wù)的執(zhí)行的各種示例的框圖。圖6是圖解用于分配存儲器的方法的另一個示例的框圖。優(yōu)選實施例的詳細(xì)描述以下詳細(xì)描述涉及本發(fā)明的某些具體實施例。然而,本發(fā)明可用眾多不同方式來 體現(xiàn)。應(yīng)顯然的是,本文中的各方面可用各種各樣的形式來體現(xiàn)并且本文中所公開的任何 具體結(jié)構(gòu)、功能或這兩者僅僅是代表性的?;诒疚闹械慕淌?,本領(lǐng)域技術(shù)人員應(yīng)領(lǐng)會,本 文中所公開的一方面可獨立于任何其他方面來實現(xiàn),以及這些方面中的兩個或多個可按各 種方式被組合。例如,使用本文中闡述的任何數(shù)目的方面,可實現(xiàn)裝置或可實踐方法。此外, 可使用其他結(jié)構(gòu)、功能性或使用除本文中所闡述的方面中的一個或多個之外的或與之不同 的結(jié)構(gòu)、功能性來實現(xiàn)這樣的裝置或?qū)嵺`這樣的方法。移動設(shè)備典型地利用存儲器分配服務(wù)來進行操作。本文中描述用以降低移動設(shè)備 中各種子系統(tǒng)所需的存儲器的總量以及用以減少移動設(shè)備所消耗的處理資源的方法和設(shè) 備。以下闡述的是可聯(lián)合所描述的方法和設(shè)備使用的一些架構(gòu)。圖1是圖解移動設(shè)備102的示例的框圖。設(shè)備102包括與存儲器204通信的處理 器202以及用于經(jīng)由無線鏈路106通信的網(wǎng)絡(luò)接口 206??扇芜x地,設(shè)備102還可以包括 以下各項中的一者或多者顯示器210 ;諸如按鍵、觸摸屏、或其他合適的觸覺型輸入設(shè)備 之類的用戶輸入設(shè)備212 ;包括適于基于在無線鏈路106上接收到的信號提供音頻輸出的 換能器的擴音器214 ;和/或包括適于提供可在無線鏈路106上傳送的信號的音頻輸入的 換能器的話筒216。例如,電話可包括適于提供圖形用戶界面(GUI)的視覺輸出的顯示器210。網(wǎng)絡(luò)接口 206可包括任何合適的天線(未圖示)、接收機220、和發(fā)射機222,以使 得示例性設(shè)備102可在無線鏈路106上與一個或多個設(shè)備通信。可任選地,網(wǎng)絡(luò)接口 206 還可以具有用以減少處理器202的處理需求的處理能力??扇芜x地,設(shè)備102可包括經(jīng)由鏈路108在網(wǎng)絡(luò)110上通信的第二網(wǎng)絡(luò)接口 208。 例如,設(shè)備102可經(jīng)由有線或無線通信鏈路來提供與其他網(wǎng)絡(luò)110(例如,諸如因特網(wǎng)之類 的廣域網(wǎng))的 連通性。因此,設(shè)備102可使得其他設(shè)備102(例如,Wi-Fi站)能接入其他網(wǎng)絡(luò) 110。此外應(yīng)領(lǐng)會,設(shè)備102中的一個或多個可以是便攜式的,或者在一些情形中為相對非 便攜式的。第二網(wǎng)絡(luò)接口 208可傳送和接收根據(jù)IEEE 802. 11標(biāo)準(zhǔn)(包括IEEE 802.11(a)、 (b)、或(g))、藍(lán)牙標(biāo)準(zhǔn)的RF信號、和/或CDMA、GSM、AMPS信號或用于在無線蜂窩電話網(wǎng)絡(luò) 中通信的其他已知信號。此外,第二網(wǎng)絡(luò)接口 208可包括任何合適的有線網(wǎng)絡(luò)接口,諸如以 太網(wǎng)(IEEE802. 3)、USB、或 MDDI。設(shè)備102可包括用以向設(shè)備102的一個或多個組件供電的電池231。設(shè)備102可 包括電話、智能電話、個人數(shù)字助理(PDA)、超級移動個人計算機(UMPC)、移動因特網(wǎng)設(shè)備 (MID)、或任何其他移動設(shè)備中的至少之一。具體而言,本文中的教示可被納入多種設(shè)備102 中(例如,實現(xiàn)在其中或由其執(zhí)行)。本文中所描述的組件可用多種方式來實現(xiàn)。參考圖1,設(shè)備或裝置102被表示為一 系列互相關(guān)的功能性塊,這些功能性塊可代表由例如處理器202、軟件、其某種組合、或以如 本文中教示的其他某種方式來實現(xiàn)的功能。例如,處理器202可便于用戶經(jīng)由輸入設(shè)備212 輸入。進一步,發(fā)射機222可包括用于傳送的處理器,該處理器提供與向另一個設(shè)備102傳 送信息有關(guān)的各種功能性。接收機220可包括用于接收的處理器,該處理器提供與如本文 中所教示地接收來自另一個設(shè)備102的信息有關(guān)的各種功能性。處理器202還與存儲器分配服務(wù)203通信。在一個實施例中,存儲器分配服務(wù)203 在處理器202上運行。存儲器分配服務(wù)203響應(yīng)于來自在設(shè)備102中操作的一個或多個子 系統(tǒng)的對存儲器的請求。存儲器分配服務(wù)203的方法和操作將在以下更詳細(xì)地描述。如以上所注意到的,圖1圖解了在一些方面中,這些組件可經(jīng)由恰適的處理器組 件來實現(xiàn)。這些處理器組件在一些方面中可至少部分地使用如本文中所教示的結(jié)構(gòu)來實 現(xiàn)。在一些方面中,處理器可適于實現(xiàn)這些組件中的一個或多個的功能性的一部分或全部。 在一些方面中,由虛線框所表示的組件中的一個或多個是可任選的。在一個或多個示例性實施例中,所描述的功能可以在硬件、軟件、固件、或其任何 組合中實現(xiàn)。如果在軟件中實現(xiàn),則這些功能可以作為一條或多條指令或代碼存儲在計算 機可讀介質(zhì)上或在其上傳送。計算機可讀介質(zhì)包括計算機存儲介質(zhì)和通信介質(zhì)兩者,后者 包括便于將計算機程序從一處轉(zhuǎn)移到另一處的任何介質(zhì)。存儲介質(zhì)可以是可被通用或?qū)S?計算機訪問的任何可用介質(zhì)。作為示例而非限定,這樣的計算機可讀介質(zhì)可包括RAM、R0M、 EEPR0M、CD_R0M或其它光盤存儲、磁盤存儲或其它磁存儲設(shè)備、或可用來攜帶或存儲指令或 數(shù)據(jù)結(jié)構(gòu)形式的合需程序代碼手段且能可通用或?qū)S糜嬎銠C、或者通用或?qū)S锰幚砥髟L問 的任何其它介質(zhì)。任何連接也被正當(dāng)?shù)胤Q為計算機可讀介質(zhì)。例如,如果軟件使用同軸電 纜、光纖電纜、雙絞線、數(shù)字訂戶線(DSL)、或諸如紅外、無線電、以及微波之類的無線技術(shù)從 web網(wǎng)站、服務(wù)器、或其它遠(yuǎn)程源傳送而來,則該同軸電纜、光纖電纜、雙絞線、DSL、或諸如紅夕卜、無線電、以及微波之類的無線技術(shù)就被包括在介質(zhì)的定義之中。本文中所使用的盤和碟 包括壓縮碟(CD)、激光碟、光碟、數(shù)字多用碟(DVD)、軟盤和藍(lán)光碟,其中盤通常磁性地再現(xiàn) 數(shù)據(jù),而碟用激光來光學(xué)地再現(xiàn)數(shù)據(jù)。以上的組合也應(yīng)被包括在計算機可讀介質(zhì)的范圍之 內(nèi)。根據(jù)存儲器分配服務(wù)的一方面,小存儲器塊被包裝成較大的固定大小的單元(稱 為“DSM項”)。使用“DUP”(復(fù)制)項來保持對這些較小塊中的每一者的跟蹤,DUP項指向 DSM內(nèi)的有效載荷。由于DSM項的大小有限,并且可假定DSM內(nèi)的所有塊具有近似的有限壽 命,因此沒有必要處理每一個DSM內(nèi)的自由存儲器的碎片。這樣的益處在于存儲器利用率 可被極大地減少,因為每個DSM內(nèi) 僅很少的存儲器被浪費掉,但復(fù)雜度卻是具有高包裝效 率的其他存儲器分配技術(shù)的分?jǐn)?shù)??紤]這方面的另一種途徑是這是固定大小和靈活大小分 配服務(wù)的混合,其中整個存儲器按固定大小塊被分配,但在這些塊內(nèi)允許靈活大小分配,因 為預(yù)期這些靈活分配具有較短的壽命。在一方面,基礎(chǔ)存儲器塊被稱為DSM項。其包括頭部和有效載荷部分。當(dāng)有數(shù)據(jù) 塊必須被存儲在存儲器中時,分配新的DSM項并且該數(shù)據(jù)被復(fù)制到DSM的有效載荷部分中。 因此,頭部被更新以反映該數(shù)據(jù)的開始和長度。如果該數(shù)據(jù)的長度超過有效載荷部分的大 小,則多個DSM項可被鏈接在一起成為鏈表。進一步,定義了特殊類型的DSM項,記為DUP (“復(fù)制”)。DUP使用與常規(guī)DSM相同 的頭部結(jié)構(gòu),但沒有其自己的有效載荷部分。作為代替,其可指向其它地方的數(shù)據(jù)部分,例 如正常DSM內(nèi)部的數(shù)據(jù)部分。為了跟蹤有多少DUP指向同一 DSM項中的數(shù)據(jù),存在被記為 "ref_count (引用_計數(shù))”的頭部字段,其計數(shù)對該DSM項的引用的數(shù)目并且在原始DSM 首次被分配時被設(shè)為1。每次創(chuàng)建指向該DSM項內(nèi)部的新DUP時,該DSM項的ref_COunt遞 增。同樣,當(dāng)DUP被釋放時,原始DSM項的ref_COimt遞減。這樣,分配算法可知曉該DSM 項何時可實際被釋放,這僅在沒有其他DUP指向該分組的有效載荷部分時發(fā)生,即在ref_ count已變回0時發(fā)生。DUP可被用于拆分分組、重新排序數(shù)據(jù)、移除頭部等,而不必觸及原始數(shù)據(jù)。所有這 些僅通過操縱DSM和DUP頭部就能達(dá)成。根據(jù)另一方面,允許將數(shù)據(jù)包裝成相同的DSM項以提高存儲器效率的技術(shù)可解決 先前所提及的缺點中的一些。根據(jù)這方面,定義了較大DSM項的池。大DSM大小將允許來 自多個無線電鏈路分組的數(shù)據(jù)被級聯(lián)到同一 DSM項中。圖2是圖解用于存儲器分配服務(wù)的存儲器項的框圖。存儲器分配服務(wù)可包括應(yīng)用 編程接口(“API”)。此API可供諸如設(shè)備102中存在的子系統(tǒng)之類的子系統(tǒng)訪問用。此 存儲器分配服務(wù)可整體或部分地由處理器202或其他類似處理設(shè)備來執(zhí)行。進一步,API可 構(gòu)成諸如設(shè)備102之類的移動或無線設(shè)備的操作系統(tǒng)的一部分?;蛘撸珹PI可構(gòu)成軟件庫 的一部分。在圖2中,示出第一類存儲器項610。此第一類存儲器項610可被稱為數(shù)據(jù)服務(wù) 管理(“DSM”)項?;蛘撸杀环Q為容器項。這些容器類存儲器項610被組織成存儲器項 池605。雖然圖解了單個池605,但是應(yīng)領(lǐng)會也可以使用多個DSM項池。每個池可由諸如項 大小或該池所服務(wù)的子系統(tǒng)之類的一個或多個公共特性來表征。圖2中還提供了存儲器項610的展開圖。如該展開圖中可見,這些容器類項610 包括多個部分。存儲器項的第一部分可被稱為頭部615。頭部615既可包含關(guān)于存儲器項610的其余部分的信息,也可包含其他信息。存儲器項610的第二部分可被稱為有效載荷。 有效載荷自身可具有若干獲分配存儲器部分或塊620。此外,有效載荷可具有未分配或未 使用空間625。在一個實施例中,有效載荷包括大致1500字節(jié),約為存儲IP分組所需的大存儲器項610的頭部615可包括諸如對存儲器項610中未分配空間625的引用之 類的信息。在一個示例中,此引用采取指針的形式來指示存儲器項610中未分配空間625 的開始地址。對數(shù)據(jù)項610中未分配空間625的此引用也可被稱為“data_ptr (數(shù)據(jù)_指 針)”。頭部還可以包含指示已分配存儲器620的大小的字段。此已分配空間的量可被稱為 有效載荷中的“已使用”空間。頭部還可以包含指示標(biāo)識與存儲器項610相關(guān)聯(lián)的存儲器 池605的標(biāo)識符的字段。此標(biāo)識符可被稱為“pool_id (池_id)”。頭部還可以包含指示對 存儲器項610的引用的數(shù)目的字段。例如,如以下所描述的,存儲器項610可被其他存儲器 項引用。例如,有效載荷的已分配大塊620中的每一個被不同的存儲器項引用。進一步,存 儲器項610的頭部615引用有效載荷的未分配部分625。這些引用的計數(shù)尤其可用于確定 存儲器項610何時可被釋放完并返回池605中以供后續(xù)再分配。此引用計數(shù)可被稱為“引 用”。頭部615還可以包含對其他存儲器項的一個或多個引用。例如,如果所請求的存儲器 大塊太大而不適合單個存儲器項610,則頭部中的引用可被用于指示可被鏈接在一起以滿 足該請求的一個或多個附加存儲器項。取決于被引用的存儲器項的類型,這些引用可被稱 為“pkt_ptr (分組_指針)”或“dup_ptr”。例如,pkt_ptr可引用0個或多個DSM或容器 項,而dup_ptr可引用0個或多個DUP項。除所標(biāo)識出的字段以外,頭部615可包括諸如用 戶定義字段或用于測試目的的字段之類的附加字段。此外,頭部615可省略所標(biāo)識出的字 段中的一個或多個。圖2還圖解了第二類存儲器項630。此第二類存儲器項可被稱為復(fù)制或“DUP”存 儲器項。這些DUP項630包括與容器存儲器項610的頭部615相類似的頭部。例如,DUP 項可具有與DSM項頭部615相同的字段?;蛘?,DUP項可具有更多或更少字段。然而,這些 DUP項不具有其自己的有效載荷。相反,DUP項頭部630包含對容器存儲器項的引用。在一 個特定示例中,DUP項630包含指示存儲器項610的已分配部分620中的第一個分配存儲 器塊的指針。這些DUP項630也可以被安排成一個或多個池640。像容器項的池605那樣, 可以使用多個DUP項池。例如,圖2圖解了兩個DUP項池640和650。在一個示例中,嵌入 式設(shè)備或無線通信設(shè)備中的每個子系統(tǒng)具有其自己的DUP項池。在本實施例中,池640可 對應(yīng)于一個特定子系統(tǒng),而池650可對應(yīng)于另一個子系統(tǒng)。如圖2中可見的,一個實施例提 供了來自分開的諸池的DUP項可引用單個DSM項610中的存儲器塊620。圖3示出了圖2中所圖解的存儲器項的替換實施例。像之前的那樣,可使用單個 DSM項池715。然而這次,每個DUP項池730和735分別引用不同DSM項725和720的已分 配部分。如上所述,一旦對該有效載荷的全部引用都已被釋放,DSM項就可返回DSM池715 中以供再分配。然而,當(dāng)允許多個子系統(tǒng)使DUP引用到同一 DSM項中時,可能出現(xiàn)碎片。例 如,特定DSM中被分配給第一子系統(tǒng)的所有存儲器可能已被釋放。然而,如果有小塊仍被來 自另一個子系統(tǒng)的DUP引用,則該有效載荷中的其余存儲器可能在第二子系統(tǒng)釋放其小存 儲器塊之前都必須等待被釋放。為使此問題最小化,每個子系統(tǒng)可使其自己的DUP引用到 其自己的DSM中。這樣,特定DSM中已分配存儲器部分的壽命更可能相同。壽命的近似性導(dǎo)致碎片減少。圖4A和4B圖解用于分配存儲器的方法780的實施例。此方法780可作為在諸如 處理器202之類的處理器上運行的服務(wù)來執(zhí)行。方法780便于接收存儲器分配請求以及返 回對已分配存儲器的引用。如以下所描述的,所指派的特定引用可以是請求方子系統(tǒng)的當(dāng) 前存儲器分配境況和所請求存儲器塊的大小的函數(shù)。注意,這些步驟中的一些可被省略以 滿足特定應(yīng)用的要求或規(guī)范。還應(yīng)注意,本文中所描述的這些步驟中的一些是優(yōu)化且由此 可按照系統(tǒng)設(shè)計者的決定被選擇性地使用或省略。方法780在存儲器分配服務(wù)在步驟785處接收到存儲器請求時開始。作為存儲器 請求的一部分,請求方子系統(tǒng)可指定所請求的存儲器大小。請求方子系統(tǒng)還可以提供子系 統(tǒng)ID以使得存儲器分配服務(wù)可為該子系統(tǒng)選擇恰適的DSM項。在接收到存儲器請求之后, 存儲器分配服務(wù)如判定步驟790中所示地確定所請求大小是否小于當(dāng)前DSM容器項中未分 配存儲器的大小。如參照圖2和3所討論的,DSM項在有效載荷部分中可具有未分配空間。 判定步驟790可通過將未分配部分的大小與所請求大小作比較來執(zhí)行?;蛘?,由于有效載 荷的總大小是已知的,因此可以將所請求量與有效載荷的已分配部分的大小作比較。在另 一個實施例中,并非使用所請求的存儲器大小來作比較,而是存儲器分配系統(tǒng)可增大請求 的大小以使得擴增后的請求與高速緩存邊界對準(zhǔn)。例如,可增大實際請求以使得結(jié)果所得 請求是諸如16、32、64、或128字節(jié)之類的特定高速緩存行大小的倍數(shù)。無論是所請求的存 儲器大小還是擴增后的對準(zhǔn)版本適合未分配部分,該方法都前進至步驟800。繼續(xù)到判定步驟800,存儲器分配系統(tǒng)確定所請求大小加上當(dāng)前DSM項的先前已 分配部分的大小是否大于第一閾值。例如,如果DSM有效載荷是大致1500字節(jié)長,則閾值 可為1200字節(jié)。因此,存儲器分配系統(tǒng)將確定已分配存儲器的大小加上所請求存儲器的大 小是否超過1200字節(jié)極限。在一個實施例中,閾值可被選為DSM項的有效載荷大小的特定 百分比。例如,閾值可為有效載荷大小的大致70%-80%。在另一個實施例中,閾值大小可 被選取成反映諸如對用以存儲IP分組的存儲器的請求之類的公共請求的大小特性。在另 一個實施例中,并非將已分配存儲器的大小與閾值作比較,而是可將剩余未分配存儲器的 大小與閾值作比較。在本實施例中,如果分配了所請求或經(jīng)調(diào)整的存儲器大小,則該服務(wù)將 計算有效載荷中將保持未分配的部分。剩余未分配存儲器與此閾值的比較隨后將以與先前 所討論的已分配存儲器與閾值的比較類似的方式來使用。通過執(zhí)行判定步驟800,如果標(biāo)識出的總和大于閾值,則該方法前進至步驟805。 在步驟805處繼續(xù),存儲器分配系統(tǒng)向請求方子系統(tǒng)返回引用。在一個實施例中,所返回的 引用是來自當(dāng)前DSM項的頭部的data_ptr。有利地,通過返回來自DSM項的頭部的引用,存 儲器分配系統(tǒng)節(jié)省了在創(chuàng)建DUP項和返回來自DUP頭部的引用時所涉及的開銷和資源。進 一步,分配DSM有效載荷的剩余部分而非僅僅所請求的大小使得存儲器分配服務(wù)能避免在 有效載荷的尾部的小塊,否則這些小塊若被使用將會導(dǎo)致鏈接。返回到判定步驟800,如果所請求存儲器大小加上已分配存儲器大小并未大于閾 值,則該方法前進至步驟810。在步驟810中,存儲器分配服務(wù)創(chuàng)建DUP項,分配所請求的存 儲器,并且向請求方子系統(tǒng)返回DUP中的引用。有利地,在多次迭代下,本方法允許存儲器 分配服務(wù)能將多個分配包裝成單個DSM項。此包裝允許存儲器資源的高效率使用并且在存 儲器使用和處理使用兩者中皆提供增益。
返回到步驟790,若所請求的存儲器大小大于當(dāng)前DSM項中的未分配空間,則該方 法繼續(xù)到圖4B的判定步驟845。在判定步驟845中,存儲器分配服務(wù)確定所請求大小是否 大于第二閾值。此第二閾值像第一閾值一樣可被設(shè)為固定數(shù)目的字節(jié)。例如,如果DSM項 有效載荷的大小為1600字節(jié),則第二閾值可為1200字節(jié)?;蛘?,第二閾值也可為被確定為 有效載荷大小的百分比。例如,第二閾值可為有效載荷大小的65%-75%。在另一實施例 中,該閾值可被動態(tài)地確定。例如,該閾值可被設(shè)為等于DSM項中已分配存儲器的總量。在 本實施例中,當(dāng)所請求大小超過DSM中的已分配空間時,所請求大小將超過該閾值。不管如 何確定該閾值,如果所請求大小大于此閾值,則存儲器分配服務(wù)就將如步驟850中所示地 分配新DSM項并且向請求方子系統(tǒng)返回來自新DSM項頭部的data_ptr。類似于步驟805, 返回來自新DSM項的頭部的引用的此過程節(jié)省了創(chuàng)建新DUP項的開銷。請求方子系統(tǒng)被給 予多于其要求的——即整個DSM項,并且此分配允許后續(xù)分配請求能用當(dāng)前DSM項中剩余 的未分配存儲器來滿足。返回到步驟845,如果所請求大小小于此第二閾值,則該方法前進至步驟855。在 步驟855中,刪除對DSM有效載荷的未分配部分的DSM項頭部引用。實際上,這釋放完DSM 項中的剩余部分。此外,創(chuàng)建新DSM項。分配該新DSM項中的存儲器塊并且創(chuàng)建相應(yīng)的DUP。 新DUP中對新DSM項的引用隨后被返回給請求方子系統(tǒng)。出于解釋目的,在圖5中圖解了前述方法的示例。在情形1中,圖解了當(dāng)前DSM項 910。當(dāng)前DSM具有已分配部分915和未分配部分920。所請求分組大小925被示為在第一 閾值930中。如圖所示,已分配部分915的大小加上所請求部分925的大小小于第一閾值 930。因此,如圖所示,DSM項935的大塊被分配,以及新DUP項被創(chuàng)建且其引用被返回給調(diào) 用方子系統(tǒng)。該新DUP項包括指向新分配數(shù)據(jù)的開始的對DSM 935中的引用。在情形2中,聯(lián)合另一個所請求分組960示出當(dāng)前DSM 955。如圖所示,DSM955 的已分配部分的大小加上所請求分組的大小超過第一閾值,但總和并未超過總有效載荷長 度。因此,對DSM項965的未分配部分的引用被返回給請求方子系統(tǒng)。結(jié)果是除了獲得所 請求存儲器大小或甚至是稍大的經(jīng)調(diào)整行分配之外,請求方子系統(tǒng)將獲得DSM 965中的所 有剩余未分配空間980。再次,返回來自DSM項頭部的引用節(jié)省了創(chuàng)建DUP的開銷并且消除 了否則將會留下的殘端980所創(chuàng)建的鏈接可能性。在情形3中,與另一個所請求存儲器塊990 —起示出當(dāng)前DSM 985。如圖所示,所 請求分組太大而不適合當(dāng)前DSM的未分配部分。此外,所請求大小小于第二閾值995。因 此,刪除當(dāng)前DSM 1000的頭部中對有效載荷的未分配部分的引用。創(chuàng)建新DSM 1005。分配 來自該DSM的存儲器塊并且創(chuàng)建引用該新DSM中獲分配塊的新DUP項。來自該新DUP項的 引用隨后被返回給請求方子系統(tǒng)。再次將領(lǐng)會,雖然第二閾值995被示為靜態(tài)的,但該閾值 可諸如通過將其設(shè)為等于初始已分配存儲器的大小來動態(tài)地確定。在情形4中,連同所請求存儲器塊1015—起示出當(dāng)前DSM 1010。如同情形3那 樣,所請求大小太大而不適合當(dāng)前DSM項1010的未分配部分。此外,所請求塊大小1015大 于第二閾值995。結(jié)果是當(dāng)前DSM 1020被保留在其當(dāng)前狀態(tài)。同時,創(chuàng)建新DSM 1025并且 返回該新DSM頭部中對有效載荷的未分配部分的引用。圖6類似于圖4A和4B中所圖解的方法。然而,圖6提供相對于用于分配存儲器 的服務(wù)的一個實施例中所使用的特定參數(shù)的變型。圖6中所圖解的方法1080為存儲器分配請求提供API。在一個特定實施例中,方法1080為子系統(tǒng)提供可用于請求存儲器分配的 函數(shù)調(diào)用。如圖所示,該函數(shù)可以采取所請求的存儲器分配大小作為參數(shù)。此外,該函數(shù)可 采取諸如標(biāo)識請求方子系統(tǒng)的子系統(tǒng)ID之類的其他參數(shù)。圖6所代表的服務(wù)可被配置成 在諸如設(shè)備102的處理器202之類的處理器上運行。響應(yīng)于分配請求,該服務(wù)如以下所討 論地準(zhǔn)備指向大小大于或等于所請求大小的獲分配存儲器塊的指針。因此,使用該服務(wù)的 API的子系統(tǒng)被返回指向獲分配存儲器的指針。在一個特定實施例中,圖6中所圖解的方法 在其操作期間使用以下值中的一些或全部current_dsm_item_ptr[](當(dāng)前_(1細(xì)_項_指針[])這是每個子系統(tǒng)的指向當(dāng)前 DSM項的指針集。aligned_pkt_size (經(jīng)對準(zhǔn)_分組_大小)這是所請求的存儲器塊的大小,其被 調(diào)整成與諸如16、32、64、或128之類的大小的高速緩存行對準(zhǔn)。pkt_ptr (分組_指針)即將被返回的指向獲分配存儲器的指針。DSMI_MEM_THRESHOLD_TO_FREE_DSM (DSMI_ 存儲器 _ 閾值 _ 用以-釋放 _DSM)用 于確定應(yīng)返回DUP還是DSM引用的第一閾值。如果在分配存儲器塊之后,剩余未分配存儲 器將小于此閾值,則返回DSM引用,從而有效地分配該DSM項中的所有剩余未分配存儲器。DSMI_THRESH0LD_F0R_C0MPLETE_ITEM_ALL0CATI0N (DSMI_ 閾值 _ 用以-完整 _ 項 _分配)用于確定應(yīng)返回DUP還是DSM引用的第二閾值。如果所請求分組大小大于此閾 值,則創(chuàng)建新DSM項并返回來自新DSM的頭部的引用。當(dāng)前DSM被保留。圖6中所圖解的方法始于1085處所示的函數(shù)調(diào)用。作為該請求的參數(shù),分配服務(wù) 接收所請求的分組大小“pkt_size”。此外,在一些實施例中,還將向函數(shù)調(diào)用傳遞另一個參 數(shù),即子系統(tǒng)ID。前進至步驟1100,該方法鎖定特定DSM項池以避免并發(fā)訪問問題。在鎖 定池之后,該方法前進到判定步驟1105。在判定步驟1105處,該服務(wù)確定pkt_ptr是否為 空。如果針對該請求尚未分配存儲器,則該指針可為空。然而,如果該指針具有非空值,則 服務(wù)前進至解鎖池(1140)并返回指針(1145)。然而,如果指針為空,則服務(wù)前進至判定步 驟 1110。在判定步驟1110處繼續(xù),服務(wù)確定Current_dSm_item_ptr是否為空。如果先前 迭代已導(dǎo)致不存在當(dāng)前DSM項,則服務(wù)前進至創(chuàng)建一個DSM項(1115),并且若這樣的創(chuàng)建失 敗則退出(1120、1140、1145)。一旦確認(rèn)存在或創(chuàng)建了有效的當(dāng)前DSM,該方法前進至判定 步驟1125。在判定步驟1125處,服務(wù)確定經(jīng)對準(zhǔn)的所請求大小是否小于當(dāng)前DSM中未分配 空間的大小。如果是,則服務(wù)隨后在步驟1130處確定DSM中在分配所請求存儲器之后將剩 余的未分配空間是否小于第一閾值。若如此,則服務(wù)創(chuàng)建DUP并且在當(dāng)前DSM中分配經(jīng)對 準(zhǔn)的所請求存儲器(1135),解鎖池(1140),并返回DUP指針(1145)。若否,則服務(wù)創(chuàng)建全新 的DSM(1150),解鎖池(1140),并返回來自該新DSM的頭部的指針(1145)返回到步驟1125,如果所請求大小大于剩余未分配空間,則該方法前進至判定步 驟1155。在步驟1155處,該服務(wù)確定所請求大小是否大于或等于第二閾值。若如此,則服 務(wù)創(chuàng)建全新的DSM(1165),解鎖池(1140),并返回來自該新DSM的頭部的指針(1145)若否, 則該服務(wù)釋放當(dāng)前DSM中的剩余存儲器并前進至在步驟1105處再次開始該方法。結(jié)果是 新DSM被創(chuàng)建,引用該新DSM的主體的DUP被創(chuàng)建,并且DUP指針被返回給請求方子系統(tǒng)。本存儲器分配服務(wù)的附加特征和實施例也在本文中呈現(xiàn)
用于不同用戶的多DSM指針為了處置其中期望數(shù)據(jù)塊的壽命對于不同用戶實質(zhì)地不同的情形,該算法可維護 多個DSM指針,并且僅將具有近似壽命的數(shù)據(jù)塊包裝成相同的DSM。例如,用戶專用ID可連 同分配請求一起被傳遞,以使得僅來自此用戶的數(shù)據(jù)將會被包裝成相同的DSM項。來自其 他用戶的請求將會被包裝成其他DSM。此處,“用戶”可以是用以將一組用戶簡檔與其他的 區(qū)別開來的一組任務(wù)或子任務(wù)或?qū)踊蚝瘮?shù),或這些的任何其他組合。支持在DSM的前部(或后部)添加數(shù)據(jù)為了高效率地處置在現(xiàn)有DSM或DUP項的前部中添加數(shù)據(jù)(即,添加協(xié)議頭部) 而不必分配新DSM項和執(zhí)行鏈接,建議允許分配在前部中具有自由空間的DSM。通過“偏移 量”頭部來保持對該自由空間的跟蹤。這樣,DUP或DSM可被分配給定偏移量,并且以后若 有更多數(shù)據(jù)需要被插入DSM的前部中,這可以不進行新DSM分配及隨后的鏈接就能完成???允許用于在DSM的尾部中添加數(shù)據(jù)的類似服務(wù)。多個池該服務(wù)允許多個DSM池,從而允許為特定用戶預(yù)留給定數(shù)目的項。這樣,該用戶將 不必?fù)?dān)憂因為另一個用戶已分配到全部DSM項而突然沒有更多自由DSM項。另外,這提供 了更好的存儲器超支問題(其中一個用戶超馳分配的邊界)的調(diào)試能力,因為該問題被局 限在僅此用戶的代碼庫中。作為多個池的替換方案的配額服務(wù)達(dá)成相同目的的另一種途徑是具有一個池,但每個用戶具有他可分配的DSM項的 最大配額(字節(jié))。一旦他已達(dá)到其配額,他為了分配新項就必須釋放一些項,以避免其他 用戶的存儲器匱乏。其勝于多池辦法的一項益處在于仍可達(dá)成共享。例如,如果有4個用 戶,其自己的池為X項,則可能需要存儲器有4X項。然而由于極不可能所有4個用戶將同 時分配所有項,因此配額服務(wù)可允許將總存儲器減少到比方說3X,假定如果一個用戶取得 其所有存儲器=X,則其余3個用戶將能夠共享剩余存儲器=2X。用于不同大小的多DSM指針在這方面,可基于所請求的存儲器空間來劃分DSM分配(與使用以上的子系統(tǒng)ID 相反)。本提議并非使用跨多個層/子系統(tǒng)共享的多種大小的池的常規(guī)途徑來滿足所有任 務(wù)/側(cè)面的需要,而是可存在支持多個DSM指針的規(guī)定,根據(jù)該規(guī)定每個DSM指針可分配僅 特定大小的塊。例如,我們可具有用于128、256、512、768、1024、1536字節(jié)塊大小等的05皿 指針。每當(dāng)任何層/模塊請求特定大小的存儲器時,算法可確定最合適的DSM指針并在 所請求的大小可用的情況下提供dup。如果所請求大小不可用,則釋放該大小的DSM指針 (若非空)并分配來自較大項的全局池的較大項(例如,大于預(yù)定字節(jié)數(shù)目的項,在一個示 例中為大于或等于768字節(jié)的項),以及隨后復(fù)制(DUP)該最合適塊大小并將該DUP返回給
調(diào)用者。本分配還具有勝于現(xiàn)有技術(shù)的若干截然不同的優(yōu)點。本服務(wù)的實施例減少了存儲 器占用量。較少池的使用允許更好的統(tǒng)計復(fù)用。該服務(wù)助益更好的包裝效率。DSM項即使 帶有用于DUP的增添開銷也具有更少的開銷。CPU處理開銷(MIPS)因較少的鏈接而被減 少。該服務(wù)允許使用較大的DSM項來避免長分組鏈(尤其是有較大分組大小時),從而減少DSM分配/釋放操作的次數(shù)。各實施例簡化了與涉及多個存儲器池的更常規(guī)辦法相關(guān)聯(lián)的 維護。該服務(wù)可被實現(xiàn)為具有用于進行處置的中央API,這避免了每子系統(tǒng)必須實現(xiàn)這樣的 功能性,從而避免了復(fù)制代碼。避免了每目標(biāo)對單獨的池大小和項大小的需要。在沒有本 文中所勾勒的技術(shù)的情況下,任何人可能需要在許多地方(例如,諸如分組服務(wù)模塊(PS)、 高速USB(HS-USB)模塊等堆棧中的各種或多個層)分開實現(xiàn)代碼,這更傾向于出錯等。可 例如通過在低等待時間存儲器(例如,內(nèi)部隨機存取存儲器(IRAM))中定義DUP池來在高 速存儲器中定義DUP池以進一步改進性能(例如,有益于高速緩存)。若此應(yīng)用編程接口 (API)僅使用一個池,則可獲得DSM檢查的減少。當(dāng)前DSM基于作為參數(shù)來傳遞的池ID (標(biāo) 識)執(zhí)行一些檢查。
權(quán)利要求
一種存儲器管理系統(tǒng),包括處理器;以及可在所述處理器上執(zhí)行的存儲器管理服務(wù),所述存儲器管理服務(wù)可配置成生成第一存儲器項,其中所述第一存儲器項中的每一者包括頭部和有效載荷,所述有效載荷可配置成存儲多個可獨立分配的存儲器大塊,所述第一存儲器項的所述頭部引用所述有效載荷中的可分配空間;生成第二存儲器項,其中所述第二存儲器項中的每一者包括引用所述第一存儲器項的所述有效載荷中的一個或多個存儲器大塊的頭部;以及響應(yīng)于存儲器分配請求返回來自或者第一或者第二存儲器項的所述頭部的引用。
2.如權(quán)利要求1所述的存儲器管理系統(tǒng),其特征在于,所述第一存儲器項的所述頭部 維持對所述第一存儲器項的引用的計數(shù)。
3.如權(quán)利要求1所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成為多個子系統(tǒng)中的每一個生成單獨的第一存儲器項。
4.如權(quán)利要求1所述的存儲器管理系統(tǒng),其特征在于,所述存儲器分配請求包括所請 求存儲器大小。
5.如權(quán)利要求4所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成確定特定第一存儲器項的有效載荷中已分配存儲器的大小與所述所請求存儲器大 小的總和,并且將所述總和與閾值作比較。
6.如權(quán)利要求5所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成當(dāng)所述總和小于所述閾值時生成特定第二存儲器項并返回來自所述特定第二存儲 器項的頭部的引用。
7.如權(quán)利要求6所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成在所述總和大于所述閾值時返回來自所述特定第一存儲器項的所述頭部的引用。
8.如權(quán)利要求4所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成確定特定第一存儲器項的有效載荷中已分配存儲器的大小與所述所請求存儲器大 小的總和,將所述總和與所述特定第一存儲器項的所述有效載荷的大小作比較,以及將所 述所請求存儲器大小與閾值作比較。
9.如權(quán)利要求8所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成在所述總和大于所述特定第一存儲器項的所述有效載荷的所述大小并且所述所請 求存儲器大小小于所述閾值時生成另一個特定第一存儲器項,生成引用所述另一個特定第 一存儲器項的有效載荷的特定第二存儲器項,并返回來自所述特定第二存儲器項的頭部的 引用。
10.如權(quán)利要求8所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步 配置成在所述總和大于所述特定第一存儲器項的所述有效載荷的所述大小并且所述所請 求存儲器大小大于所述閾值時生成另一個特定第一存儲器項,并返回來自所述另一個特定 第一存儲器項的頭部的引用。
11.如權(quán)利要求8所述的存儲器管理系統(tǒng),其特征在于,所述閾值是所述特定第一存儲 器項中已分配存儲器的大小。
12.如權(quán)利要求4所述的存儲器管理系統(tǒng),其特征在于,所述存儲器管理服務(wù)可進一步配置成增大所述所請求存儲器大小以使所述所請求存儲器大小與高速緩存線邊界對準(zhǔn)。
13.一種存儲器管理方法,所述方法包括分配第一存儲器項,所述第一存儲器項各自包括第一頭部和有效載荷,所述有效載荷 包括可獨立分配的存儲器大塊,所述第一頭部包括對所述有效載荷中未分配存儲器的引 用;分配第二存儲器項,所述第二存儲器項各自包括第二頭部,所述第二頭部包括對第一 存儲器項的所述有效載荷中獲分配存儲器大塊的引用; 接收對存儲器分配的請求;以及通過返回來自第一或者第二存儲器項的所述頭部的引用來響應(yīng)對存儲器分配的請求。
14.如權(quán)利要求13所述的方法,其特征在于,所述第一頭部還包括對所述第一存儲器 項的引用的計數(shù)。
15.如權(quán)利要求13所述的方法,其特征在于,所述分配第一存儲器項進一步包括為多 個子系統(tǒng)中的每一個分配單獨的第一存儲器項。
16.如權(quán)利要求13所述的方法,其特征在于,所述存儲器分配請求包括所請求存儲器大小。
17.如權(quán)利要求16所述的方法,其特征在于,還包括確定特定第一存儲器項的有效載 荷中已分配存儲器的大小與所述所請求存儲器大小的總和,并且將所述總和與閾值作比較。
18.如權(quán)利要求17所述的方法,其特征在于,還包括在所述總和小于所述閾值時分配 特定第二存儲器項并返回來自所述特定第二存儲器項的頭部的引用。
19.如權(quán)利要求18所述的方法,其特征在于,還包括在所述總和大于所述閾值時返回 來自所述特定第一存儲器項的所述頭部的引用。
20.如權(quán)利要求16所述的方法,其特征在于,還包括確定特定第一存儲器項的有效載荷中已分配存儲器的大小與所述所請求存儲器大小 的總和;將所述總和與所述特定第一存儲器項的所述有效載荷的大小作比較;以及 將所述所請求存儲器大小與閾值作比較。
21.如權(quán)利要求20所述的方法,其特征在于,還包括 生成另一個特定第一存儲器項;生成引用所述另一個特定第一存儲器項的有效載荷的特定第二存儲器項;以及 當(dāng)所述總和大于所述特定第一存儲器項的所述有效載荷的所述大小并且所述所請求 存儲器大小小于所述閾值時返回來自所述特定第二存儲器項的頭部的引用。
22.如權(quán)利要求20所述的方法,其特征在于,還包括 生成另一個特定第一存儲器項;以及當(dāng)所述總和大于所述特定第一存儲器項的所述有效載荷的所述大小并且所述所請求 存儲器大小大于所述閾值時返回來自所述另一個特定第一存儲器項的頭部的引用。
23.如權(quán)利要求20所述的方法,其特征在于,所述閾值是所述特定第一存儲器項中已 分配存儲器的大小。
24.如權(quán)利要求16所述的方法,其特征在于,還包括增大所述所請求存儲器大小以使所述所請求存儲器大小與高速緩存線邊界對準(zhǔn)。
25.一種存儲器管理系統(tǒng),包括用于分配第一存儲器項的裝置,所述第一存儲器項各自包括第一頭部和有效載荷,所 述有效載荷包括可獨立分配的存儲器大塊,所述第一頭部包括對所述有效載荷中未分配存 儲器的引用;用于分配第二存儲器項的裝置,所述第二存儲器項各自包括第二頭部,所述第二頭部 包括對第一存儲器項的所述有效載荷中獲分配存儲器大塊的引用;用于接收對存儲器分配的請求的裝置;以及 用于通過返回來自第一或者第二存儲器項的所述頭部的引用來響應(yīng)對存儲器分配的 請求的裝置。
26.—種編碼有計算機指令的計算機可讀介質(zhì),所述指令在被執(zhí)行時使得處理器分配第一存儲器項,所述第一存儲器項各自包括第一頭部和有效載荷,所述有效載荷 包括可獨立分配的存儲器大塊,所述第一頭部包括對所述有效載荷中未分配存儲器的引 用;分配第二存儲器項,所述第二存儲器項各自包括第二頭部,所述第二頭部包括對第一 存儲器項的所述有效載荷中獲分配存儲器大塊的引用;接收對存儲器分配的請求;以及通過返回來自第一或者第二存儲器項的所述頭部的引用來響應(yīng)對存儲器分配的請求。
全文摘要
嵌入式或無線設(shè)備中用于改進的存儲器分配服務(wù)的系統(tǒng)和方法。使用容器存儲器項的組合并引用存儲器項來分配存儲器。
文檔編號H04L12/56GK101971581SQ200980109315
公開日2011年2月9日 申請日期2009年4月2日 優(yōu)先權(quán)日2008年4月2日
發(fā)明者S·馬赫施瓦瑞, T·克林根伯恩, V·A·庫瑪 申請人:高通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
镇原县| 靖江市| 盐亭县| 安图县| 建始县| 措美县| 鹿泉市| 澳门| 寿阳县| 蓝田县| 长岭县| 安阳县| 哈巴河县| 寿宁县| 博罗县| 眉山市| 鄯善县| 璧山县| 台州市| 沅江市| 九台市| 松江区| 龙胜| 朝阳市| 广宗县| 绥芬河市| 汪清县| 江都市| 奇台县| 九江市| 青铜峡市| 广宁县| 长泰县| 新竹县| 松滋市| 阳山县| 广丰县| 平南县| 汶川县| 永兴县| 晋州市|