欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種內(nèi)存管理方法、系統(tǒng)及服務(wù)器的制作方法

文檔序號:6576664閱讀:240來源:國知局
專利名稱:一種內(nèi)存管理方法、系統(tǒng)及服務(wù)器的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于服務(wù)器技術(shù)領(lǐng)域,尤其涉及一種內(nèi)存管理方法、系統(tǒng)及服務(wù)器。
背景技術(shù)
傳統(tǒng)的內(nèi)存分配是直接通過操作系統(tǒng)提供的函數(shù)來分配,其函數(shù)內(nèi)部具體的執(zhí)行 過程如下所述 1.鎖上線程鎖,防止其它線程進(jìn)入。 2.以4096字節(jié)的倍數(shù)取出內(nèi)存塊(無論用戶需要多大的內(nèi)存,都以4096為一頁 來分配)。 3.解除線程鎖,允許其它線程進(jìn)入。
4.把成功分配的內(nèi)存返回給用戶層。 上述過程在普通的程序中足以滿足需求,但對于服務(wù)器程序會大大降低程序性 能,其具體為 服務(wù)器對內(nèi)存的分配和釋放頻率非常高,以游戲服務(wù)器為例,通常需要每秒100 萬次;服務(wù)器的內(nèi)存分配者是由上百個線程來完成;由于傳統(tǒng)的函數(shù)里只有一個線程鎖, 這樣會降低程序的并發(fā)能力;而且,傳統(tǒng)的線程鎖是采用內(nèi)核對象方式來處理,在內(nèi)存分配 時(shí)需要用到復(fù)雜的算法,這將消耗大量的CPU資源,降低了程序的性能。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種內(nèi)存管理方法,旨在解決現(xiàn)有傳統(tǒng)的內(nèi)存分配 機(jī)制難以滿足服務(wù)器對內(nèi)存分配的要求的問題。 本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種內(nèi)存管理方法,所述方法包括下述步驟 根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常用內(nèi)存鏈表和大
內(nèi)存鏈表; 接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存池; 當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的常用
內(nèi)存鏈表的內(nèi)存分配給申請用戶; 當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的大 內(nèi)存鏈表的內(nèi)存分配給申請用戶。 本發(fā)明實(shí)施例的另一目的在于提供一種內(nèi)存管理系統(tǒng),所述系統(tǒng)包括 預(yù)先配置模塊,用于根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括
常用內(nèi)存鏈表和大內(nèi)存鏈表; 定位模塊,用于接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存 池; 第一內(nèi)存讀取模塊,用于當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控 制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶;以及
4
第二內(nèi)存讀取模塊,用于當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),
控制讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。 本發(fā)明實(shí)施例的另一 目的在于提供一種包括內(nèi)存管理系統(tǒng)的服務(wù)器。 在本發(fā)明實(shí)施例中,根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括
常用內(nèi)存鏈表和大內(nèi)存鏈表,接收用戶的內(nèi)存申請請求,根據(jù)申請的內(nèi)存大小,定位內(nèi)存
池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取內(nèi)存池的常用內(nèi)存鏈表
的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取
內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶,分配效率高,實(shí)現(xiàn)多個內(nèi)存池對應(yīng)多個并行
的線程,內(nèi)存分配并發(fā)性高。


圖1是本發(fā)明第一實(shí)施例提供的內(nèi)存管理方法的實(shí)現(xiàn)流程圖;
圖2是本發(fā)明第二實(shí)施例提供的內(nèi)存管理方法的實(shí)現(xiàn)流程圖; 圖3是本發(fā)明實(shí)施例提供的控制讀取內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請 用戶的實(shí)現(xiàn)流程圖; 圖4是本發(fā)明實(shí)施例提供的內(nèi)存池的常用內(nèi)存鏈表的結(jié)構(gòu)示意圖; 圖5是本發(fā)明實(shí)施例提供的控制讀取內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用
戶的步驟的具體實(shí)現(xiàn)流程圖; 圖6是本發(fā)明實(shí)施例提供的內(nèi)存池的大內(nèi)存鏈表的結(jié)構(gòu)示意圖;
圖7是本發(fā)明實(shí)施例提供的內(nèi)存管理系統(tǒng)的結(jié)構(gòu)框圖;
圖8是本發(fā)明實(shí)施例提供的第一內(nèi)存讀取模塊的結(jié)構(gòu)框圖;
圖9是本發(fā)明實(shí)施例提供的第二內(nèi)存讀取模塊的結(jié)構(gòu)框圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。 在本發(fā)明實(shí)施例中,根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括 常用內(nèi)存鏈表和大內(nèi)存鏈表,接收用戶的內(nèi)存申請請求,根據(jù)申請的內(nèi)存大小,定位內(nèi)存 池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取內(nèi)存池的常用內(nèi)存鏈表 的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取 內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。 圖1示出了本發(fā)明第一實(shí)施例提供的內(nèi)存管理方法的實(shí)現(xiàn)流程,其詳細(xì)步驟如下 所述 在步驟S101中,根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常 用內(nèi)存鏈表和大內(nèi)存鏈表。 在本發(fā)明實(shí)施例中,為了滿足多線程并發(fā)分配內(nèi)存,該實(shí)施例將預(yù)先配置至少兩 個內(nèi)存池,其中,該內(nèi)存池剛配置時(shí)是空的,并沒有實(shí)際的內(nèi)存,在用戶使用時(shí)才分配實(shí)際 的內(nèi)存,預(yù)先配置的內(nèi)存池是虛擬的,不是實(shí)際將內(nèi)存分配為兩個內(nèi)存池,是預(yù)先建立生成一索引數(shù)組,該索引數(shù)組至少包括2個數(shù)據(jù)元素,在內(nèi)存使用過程中才根據(jù)該索引實(shí)際分 配內(nèi)存。 例如,以8的倍數(shù)為大小生成總共8192個內(nèi)存池,每個子內(nèi)存池相互獨(dú)立,子內(nèi)存 池只處理8個區(qū)域的內(nèi)存分配,即1 8、9 16、17 24、... 、65529 65536,在此每一 段數(shù)據(jù)都對應(yīng)到一個內(nèi)存池,上述8192個子內(nèi)存池實(shí)際上是一個數(shù)組,該數(shù)組包括8192個 元素,此處僅為本發(fā)明的一個具體實(shí)施例,在此不用以限制本發(fā)明。 在步驟S102中,接收用戶的內(nèi)存申請請求,根據(jù)申請的內(nèi)存大小,定位內(nèi)存池。
在本發(fā)明實(shí)施例中,當(dāng)有內(nèi)存申請請求時(shí),根據(jù)該申請內(nèi)存的大小,確定其對應(yīng)的 內(nèi)存池,例如,申請內(nèi)存的大小為3458,則根據(jù)倍數(shù)的大小8進(jìn)行計(jì)算,3458/8 = 432還余 2,則該申請內(nèi)存對應(yīng)的內(nèi)存池為第433個內(nèi)存池,在此僅為本發(fā)明的一個實(shí)施例,不用以 限制本發(fā)明。 在步驟S103中,當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所 述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶。 在本發(fā)明實(shí)施例中,當(dāng)與用戶申請的內(nèi)存大小相對應(yīng)的的內(nèi)存池的常用內(nèi)存鏈表 的第一鏈表頭為空,若不為空則控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用 戶,同時(shí),修改所述常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表頭的序號。
在本發(fā)明實(shí)施例中,當(dāng)分配內(nèi)存時(shí),還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細(xì)描述,在此不用以限制本發(fā)明。 在步驟S104中,當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取內(nèi) 存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。 在本發(fā)明實(shí)施例中,若大內(nèi)存鏈表的正使用大內(nèi)存中有剩余的內(nèi)存塊,則更改所 述大內(nèi)存鏈表的正使用大內(nèi)存的偏移量,同時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的剩余 的內(nèi)存塊分配給申請用戶,否則向操作系統(tǒng)申請一內(nèi)存塊,然后執(zhí)行更改偏移量和控制讀 取內(nèi)存的步驟,在該實(shí)施例中,當(dāng)分配內(nèi)存時(shí),還需要控制鎖住和解開自旋鎖的操作,在此 不再贅述,下有詳細(xì)描述,在此不用以限制本發(fā)明。 圖2示出了本發(fā)明第二實(shí)施例提供的內(nèi)存管理方法的實(shí)現(xiàn)流程,其詳細(xì)步驟如下 所述 在步驟S201中,根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常 用內(nèi)存鏈表和大內(nèi)存鏈表。 在步驟S202中,接收用戶的內(nèi)存申請請求,判斷該申請的內(nèi)存大小是否合法,是 則執(zhí)行步驟S203,否則返回錯誤。 在本發(fā)明實(shí)施例中,當(dāng)該內(nèi)存大小超過預(yù)設(shè)的大小時(shí),該內(nèi)存申請不合法,則直接
向操作系統(tǒng)申請內(nèi)存,其中,該內(nèi)存合法的判斷依據(jù)是該申請內(nèi)存是否大于O。 在步驟S203中,判斷申請的內(nèi)存大小是否超過預(yù)先設(shè)置的內(nèi)存管理大小閾值,是
則執(zhí)行步驟S204,否則執(zhí)行步驟S209。 在本發(fā)明實(shí)施例中,當(dāng)內(nèi)存大小合法后,對內(nèi)存大小進(jìn)行檢測,即判斷內(nèi)存大小是 否超過預(yù)先設(shè)置的內(nèi)存管理內(nèi)大小閾值,即判斷申請的內(nèi)存大小是否大于上述65536,是則
需要向操作系統(tǒng)申請內(nèi)存,在此僅為本發(fā)明的一個具體實(shí)施例,不用以限制本發(fā)明。
在步驟S204中,根據(jù)申請的內(nèi)存大小,定位內(nèi)存池。
在步驟S205中,判斷定位到的內(nèi)存池的常用內(nèi)存鏈表是否存在可用內(nèi)存,是則執(zhí) 行步驟步驟S206,否則執(zhí)行步驟S207。 在步驟S206中,當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所 述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶。 在本發(fā)明實(shí)施例中,當(dāng)分配內(nèi)存時(shí),還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細(xì)描述,在此不用以限制本發(fā)明。 在步驟S207中,判斷定位到的內(nèi)存池的大內(nèi)存鏈表是否存在可用內(nèi)存,是則執(zhí)行 步驟S208 ;否則執(zhí)行步驟S209。 在步驟S208中,當(dāng)定位到的內(nèi)存池的大內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所述 內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。 在本發(fā)明實(shí)施例中,當(dāng)分配內(nèi)存時(shí),還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細(xì)描述,在此不用以限制本發(fā)明。
在步驟S209中,向操作系統(tǒng)申請一內(nèi)存塊。 在本發(fā)明實(shí)施例中,當(dāng)用戶申請的內(nèi)存超過預(yù)先設(shè)置的內(nèi)存管理閾值時(shí),則操作 系統(tǒng)單獨(dú)分配內(nèi)存給該申請用戶。 在本發(fā)明實(shí)施例中,當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),向操 作系統(tǒng)申請一內(nèi)存塊,存放到內(nèi)存池常用內(nèi)存鏈表的正在使用內(nèi)存的表頭上,改變偏移量, 讀取該內(nèi)存塊,同時(shí)解開自旋鎖。 圖3示出了本發(fā)明實(shí)施例提供的控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分 配給申請用戶的實(shí)現(xiàn)流程,其詳細(xì)步驟如下所述 在步驟S301中,控制進(jìn)入內(nèi)存池的常用內(nèi)存鏈表,鎖住常用內(nèi)存鏈表的自旋鎖。
在本發(fā)明實(shí)施例中,該常用內(nèi)存鏈表的自旋鎖主要用于保護(hù)該常用內(nèi)存鏈表的數(shù) 據(jù)同步。 在步驟S302中,判斷所述常用內(nèi)存鏈表的第一鏈表頭是否存在可用內(nèi)存,是則執(zhí) 行步驟S303,否則執(zhí)行步驟S306。 在本發(fā)明實(shí)施例中,判斷常用內(nèi)存鏈表的第一鏈表頭是否存在可用內(nèi)存的依據(jù)是 判斷該常用內(nèi)存鏈表的鏈表頭是否為空,為空則表示該常用內(nèi)存池已經(jīng)無內(nèi)存可用,不為 空則表示該常用內(nèi)存池有可用內(nèi)存,其中,內(nèi)存池的常用內(nèi)存鏈表的結(jié)構(gòu)示意圖,如圖4所 示,在此僅為本發(fā)明的一個實(shí)施例,不用以限制本發(fā)明。 在步驟S303中,控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶。
在本發(fā)明實(shí)施例中,該操作是將常用內(nèi)存鏈表第一鏈表頭的內(nèi)存分配給申請用戶 使用。 在步驟S304中,修改常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表頭的序號。
在本發(fā)明實(shí)施例中,當(dāng)將常用內(nèi)存鏈表的第一鏈表頭對應(yīng)的內(nèi)存分配給用戶后, 該常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表頭序號自動修改,依次為第一鏈表頭,第二鏈 表頭,....,如果在該常用內(nèi)存鏈表中,就剩余第一鏈表頭的內(nèi)存可以使用,則可以不用執(zhí) 行該操作,在此僅為本發(fā)明的一個實(shí)施例,不用以限制本發(fā)明。
在步驟S305中,控制解開自旋鎖。 在本發(fā)明實(shí)施例中,在常用內(nèi)存鏈表中,內(nèi)存分配完畢之后,將鎖住的自旋鎖解鎖,以便其他用戶繼續(xù)使用該常用內(nèi)存鏈表的內(nèi)存。 在步驟S306中,解開常用內(nèi)存鏈表的自旋鎖,控制進(jìn)入大內(nèi)存鏈表,進(jìn)行內(nèi)存的 分配。 在本發(fā)明實(shí)施例中,對于大內(nèi)存鏈表的內(nèi)存分配機(jī)制如下實(shí)施例所述。 圖5示出了本發(fā)明實(shí)施例提供的控制讀取內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申
請用戶的步驟的具體實(shí)現(xiàn)流程,其具體為 在步驟S501中,控制進(jìn)入內(nèi)存池的大內(nèi)存鏈表,鎖住大內(nèi)存鏈表的自旋鎖。
在本發(fā)明實(shí)施例中,大內(nèi)存鏈表的自旋鎖主要用于保護(hù)數(shù)據(jù)同步以及內(nèi)存偏移量 值的改變,如圖6所示,大內(nèi)存鏈表包括自旋鎖、正使用大內(nèi)存的偏移量和正是用大內(nèi)存。
在步驟S502中,判斷大內(nèi)存鏈表的正使用大內(nèi)存中是否有剩余的內(nèi)存塊,是則執(zhí) 行步驟S503,否則執(zhí)行步驟S504。 在本發(fā)明實(shí)施例中,判斷大內(nèi)存鏈表的正使用大內(nèi)存中是否有剩余的內(nèi)存塊的依 據(jù)是檢測大內(nèi)存鏈表的正在使用大內(nèi)存的偏移量,當(dāng)正使用大內(nèi)存的偏移量大于等于內(nèi)存 的大小時(shí),表示正使用大內(nèi)存中沒有內(nèi)存塊可用。 假設(shè)該大內(nèi)存鏈表的大小為4096,則當(dāng)正在使用大內(nèi)存的偏移量為0時(shí),表示該 大內(nèi)存鏈表沒用使用過;當(dāng)正在使用大內(nèi)存的偏移量為4096時(shí),表示該大內(nèi)存鏈表已經(jīng)沒 用內(nèi)存可使用。 在步驟S503中,更改大內(nèi)存鏈表的正使用大內(nèi)存的偏移量,同時(shí),控制讀取內(nèi)存 池的大內(nèi)存鏈表的剩余的內(nèi)存塊分配給申請用戶。 在本發(fā)明實(shí)施例,當(dāng)大內(nèi)存鏈表中存在可用的內(nèi)存塊時(shí),在分配給用戶內(nèi)存塊時(shí), 需要更改該大內(nèi)存鏈表的正使用大內(nèi)存的偏移量值,以便后來用戶申請內(nèi)存時(shí),查看是否 有可用內(nèi)存,在此不用以限制本發(fā)明。 在步驟S504中,向操作系統(tǒng)申請一內(nèi)存塊,然后執(zhí)行步驟S503。 在本發(fā)明實(shí)施例中,當(dāng)大內(nèi)存鏈表中,沒用可用內(nèi)存塊時(shí),向操作系統(tǒng)申請一塊內(nèi)
存塊,將該申請的內(nèi)存塊放在該大內(nèi)存鏈表的表頭,供分配給用戶使用,其中,該申請的內(nèi)
存塊的大小大于用戶申請的內(nèi)存大小即可,在此不用以限制本發(fā)明。 在步驟S505中,控制解開自旋鎖。 在本發(fā)明實(shí)施例中,在大內(nèi)存鏈表中,當(dāng)內(nèi)存分配完畢之后,將鎖住的自旋鎖解 鎖,以便其他用戶繼續(xù)使用該大內(nèi)存鏈表的內(nèi)存。 上述流程為本發(fā)明實(shí)施例提供的內(nèi)存分配機(jī)制,當(dāng)內(nèi)存分配使用完畢之后,需要 釋放內(nèi)存,圖6示出了本發(fā)明實(shí)施例提供的內(nèi)存釋放方法的實(shí)現(xiàn)流程,其具體步驟如下所 述 在步驟S601中,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存池。 在本發(fā)明實(shí)施例中,當(dāng)內(nèi)存大小不合法時(shí),直接將該內(nèi)存釋放給操作系統(tǒng),在此不 再贅述,但不用以限制本發(fā)明。 在步驟S602中,進(jìn)入定位到的內(nèi)存池的鏈表,鎖住該鏈表的自旋鎖。
在步驟S603中,將需要釋放的內(nèi)存放到該鏈表的頭部。
在步驟S604中,解開自旋鎖。 在該實(shí)施例中,上述鏈表可以是常用內(nèi)存鏈表,也可以是大內(nèi)存鏈表,在此不用以
8限制本發(fā)明。 圖7示出了本發(fā)明實(shí)施例提供的內(nèi)存管理系統(tǒng)的結(jié)構(gòu)框圖,為了便于說明,圖中 僅給出了與本發(fā)明實(shí)施例相關(guān)的部分,其中,內(nèi)存管理系統(tǒng)可以內(nèi)置于服務(wù)器的軟件單元、 硬件單元或軟硬件結(jié)合單元。 預(yù)先配置模塊11根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常 用內(nèi)存鏈表和大內(nèi)存鏈表;定位模塊12接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大 小,定位內(nèi)存池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),第一內(nèi)存讀取模塊 13控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常 用內(nèi)存鏈表不存在可用內(nèi)存時(shí),第二內(nèi)存讀取模塊14控制讀取所述內(nèi)存池的大內(nèi)存鏈表 的內(nèi)存分配給申請用戶。 在本發(fā)明實(shí)施例中,內(nèi)存釋放控制模塊15將內(nèi)存釋放在所述內(nèi)存池的鏈表的頭 部,其中,其具體的實(shí)現(xiàn)過程為計(jì)算定位需要釋放的內(nèi)存所在的內(nèi)存池;鎖住內(nèi)存池的自 旋鎖,將內(nèi)存釋放在所述內(nèi)存池的鏈表的頭部;控制解開所述自旋鎖,在此不用以限制本發(fā)明。 作為本發(fā)明的一個實(shí)施例,如圖8所示,第一自旋鎖鎖住模塊131控制進(jìn)入所述內(nèi) 存池的常用內(nèi)存鏈表,鎖住所述常用內(nèi)存鏈表的自旋鎖;第一判斷模塊132判斷所述常用 內(nèi)存鏈表的第一鏈表頭是否存在可用內(nèi)存;當(dāng)所述第一判斷模塊132判斷所述常用內(nèi)存鏈 表的第一鏈表頭存在可用內(nèi)存,第一讀取控制操作模塊133控制讀取所述內(nèi)存池的常用內(nèi) 存鏈表的內(nèi)存分配給申請用戶,同時(shí),修改所述常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表 頭的序號;第一解鎖控制模塊134控制解開所述自旋鎖。 作為本發(fā)明的另一個實(shí)施例,如圖9所示,第二自旋鎖鎖住模塊141控制進(jìn)入所述 內(nèi)存池的大內(nèi)存鏈表,鎖住所述大內(nèi)存鏈表的自旋鎖;第二判斷模塊142判斷所述大內(nèi)存 鏈表的正使用大內(nèi)存中是否有剩余的內(nèi)存塊;當(dāng)所述第二判斷模塊142判斷所述大內(nèi)存鏈 表的正使用大內(nèi)存中有剩余的內(nèi)存塊,第二讀取控制操作模塊143更改所述大內(nèi)存鏈表的 正使用大內(nèi)存的偏移量,同時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的剩余的內(nèi)存塊分配給 申請用戶;當(dāng)所述第二判斷模塊142判斷所述大內(nèi)存鏈表的正使用大內(nèi)存中沒有剩余的內(nèi) 存塊,內(nèi)存塊申請模塊144向操作系統(tǒng)申請一內(nèi)存塊;第二解鎖控制模塊145控制解開所述 自旋鎖。 在本發(fā)明實(shí)施例中,根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括 常用內(nèi)存鏈表和大內(nèi)存鏈表,接收用戶的內(nèi)存申請請求,根據(jù)申請的內(nèi)存大小,定位內(nèi)存 池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取內(nèi)存池的常用內(nèi)存鏈表 的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取 內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶,分配效率高,實(shí)現(xiàn)多個內(nèi)存池對應(yīng)多個并行 的線程,內(nèi)存分配并發(fā)性高,而且減少了線程切換所耗費(fèi)的資源。 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種內(nèi)存管理方法,其特征在于,所述方法包括下述步驟根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常用內(nèi)存鏈表和大內(nèi)存鏈表;接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。
2. 如權(quán)利要求l所述的方法,其特征在于,所述當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存 在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶的步驟具體包 括下述步驟控制進(jìn)入所述內(nèi)存池的常用內(nèi)存鏈表,鎖住所述常用內(nèi)存鏈表的自旋鎖; 判斷所述常用內(nèi)存鏈表的第一鏈表頭是否存在可用內(nèi)存;若是,則控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶,同時(shí),修改所述 常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表頭的序號; 控制解開所述自旋鎖。
3. 如權(quán)利要求l所述的方法,其特征在于,所述當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不 存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶的步驟具體包 括下述步驟控制進(jìn)入所述內(nèi)存池的大內(nèi)存鏈表,鎖住所述大內(nèi)存鏈表的自旋鎖; 判斷所述大內(nèi)存鏈表的正使用大內(nèi)存中是否有剩余的內(nèi)存塊;若是,則更改所述大內(nèi)存鏈表的正使用大內(nèi)存的偏移量,同時(shí),控制讀取所述內(nèi)存池的 大內(nèi)存鏈表的剩余的內(nèi)存塊分配給申請用戶;若否,則向操作系統(tǒng)申請一內(nèi)存塊,并執(zhí)行更改偏移量和控制讀取內(nèi)存的步驟; 控制解開所述自旋鎖。
4. 如權(quán)利要求1所述的方法,其特征在于,所述當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不 存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶的步驟之后還 包括下述步驟計(jì)算定位需要釋放的內(nèi)存所在的內(nèi)存池;鎖住內(nèi)存池的自旋鎖,將內(nèi)存釋放在所述內(nèi)存池的鏈表的頭部; 控制解開所述自旋鎖。
5. —種內(nèi)存管理系統(tǒng),其特征在于,所述系統(tǒng)包括預(yù)先配置模塊,用于根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常用 內(nèi)存鏈表和大內(nèi)存鏈表;定位模塊,用于接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存池;第一內(nèi)存讀取模塊,用于當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀 取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶;以及第二內(nèi)存讀取模塊,用于當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制 讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶。
6. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述第一內(nèi)存讀取模塊具體包括第一 自旋鎖鎖住模塊,用于控制進(jìn)入所述內(nèi)存池的常用內(nèi)存鏈表,鎖住所述常用內(nèi)存 鏈表的自旋鎖;第一判斷模塊,用于判斷所述常用內(nèi)存鏈表的第一鏈表頭是否存在可用內(nèi)存; 第一讀取控制操作模塊,用于當(dāng)所述第一判斷模塊判斷所述常用內(nèi)存鏈表的第一鏈表頭存在可用內(nèi)存,則控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶,同時(shí),修改所述常用內(nèi)存鏈表的從第二鏈表頭開始的鏈表頭的序號;以及 第一解鎖控制模塊,用于控制解開所述自旋鎖。
7. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述第二內(nèi)存讀取模塊具體包括 第二自旋鎖鎖住模塊,用于控制進(jìn)入所述內(nèi)存池的大內(nèi)存鏈表,鎖住所述大內(nèi)存鏈表的自旋鎖;第二判斷模塊,用于判斷所述大內(nèi)存鏈表的正使用大內(nèi)存中是否有剩余的內(nèi)存塊;第二讀取控制操作模塊,用于當(dāng)所述第二判斷模塊判斷所述大內(nèi)存鏈表的正使用大內(nèi) 存中有剩余的內(nèi)存塊,則更改所述大內(nèi)存鏈表的正使用大內(nèi)存的偏移量,同時(shí),控制讀取所 述內(nèi)存池的大內(nèi)存鏈表的剩余的內(nèi)存塊分配給申請用戶;內(nèi)存塊申請模塊,用于當(dāng)所述第二判斷模塊判斷所述大內(nèi)存鏈表的正使用大內(nèi)存中沒 有剩余的內(nèi)存塊,則向操作系統(tǒng)申請一內(nèi)存塊;以及第二解鎖控制模塊,用于控制解開所述自旋鎖。
8. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括內(nèi)存釋放控制模塊,用于將內(nèi)存釋放在所述內(nèi)存池的鏈表的頭部。
9. 一種包括權(quán)利要求5至8任一項(xiàng)的內(nèi)存管理系統(tǒng)的服務(wù)器。
全文摘要
本發(fā)明適用于服務(wù)器技術(shù)領(lǐng)域,提供了一種內(nèi)存管理方法、系統(tǒng)及服務(wù)器,所述方法包括下述步驟根據(jù)內(nèi)存的大小,預(yù)先配置至少兩個內(nèi)存池,所述內(nèi)存池包括常用內(nèi)存鏈表和大內(nèi)存鏈表;接收用戶的內(nèi)存申請請求,根據(jù)所述申請的內(nèi)存大小,定位內(nèi)存池;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的常用內(nèi)存鏈表的內(nèi)存分配給申請用戶;當(dāng)定位到的內(nèi)存池的常用內(nèi)存鏈表不存在可用內(nèi)存時(shí),控制讀取所述內(nèi)存池的大內(nèi)存鏈表的內(nèi)存分配給申請用戶,分配效率高,實(shí)現(xiàn)多個內(nèi)存池對應(yīng)多個并行的線程,內(nèi)存分配并發(fā)性高。
文檔編號G06F9/50GK101702138SQ20091011042
公開日2010年5月5日 申請日期2009年10月30日 優(yōu)先權(quán)日2009年10月30日
發(fā)明者王燊望 申請人:深圳市新飛揚(yáng)數(shù)碼技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
蓬莱市| 谢通门县| 岚皋县| 铅山县| 高阳县| 平远县| 滦平县| 裕民县| 安新县| 齐齐哈尔市| 徐州市| 诸暨市| 东辽县| 正定县| 江孜县| 乐山市| 沙坪坝区| 大荔县| 上犹县| 建始县| 通许县| 化州市| 北宁市| 安龙县| 昌平区| 平顶山市| 平顺县| 兰州市| 肇州县| 加查县| 荔浦县| 双柏县| 通江县| 朝阳市| 邯郸市| 厦门市| 城市| 浦县| 会同县| 武强县| 利川市|