版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)設(shè)和現(xiàn)個(gè)支持多程存分配釋放的動(dòng)存管系統(tǒng)(Multi-threadedDynamicMemory之后稱MTDMM)該系統(tǒng)為多線程應(yīng)用程序的內(nèi)使用和管理提供有效的解決方案對(duì)多程的線程共享和線程有數(shù)據(jù)提供不同存儲(chǔ)策根需通動(dòng)存管理統(tǒng)出內(nèi)存分配或釋放的請(qǐng)求存儲(chǔ)管理系統(tǒng)根請(qǐng)求在不同的存儲(chǔ)空間中完成具體的操作對(duì)線共的內(nèi)存分或放求在線程共享的存儲(chǔ)空間中操而對(duì)于線程私的內(nèi)存分配或釋放請(qǐng),則在該線程對(duì)的私有存儲(chǔ)空間中操。該系統(tǒng)可向用提供以下兩大功多個(gè)程供個(gè)共享的儲(chǔ)間線程間的數(shù)據(jù)共享和據(jù)通信每線建立個(gè)有存儲(chǔ)空間足程私有數(shù)據(jù)分和釋。儲(chǔ)理對(duì)接接口動(dòng)態(tài)儲(chǔ)管系以下簡稱供下外接口供用戶用以完對(duì)程共享線程私有的動(dòng)態(tài)存儲(chǔ)單元的分配與釋放int初化系每使MTDMM的序只應(yīng)當(dāng)使用一次成功執(zhí)行則返0,否則返回誤碼
int終MTDMM統(tǒng)對(duì)于每個(gè)用MTDMM的若成功執(zhí)行則回否則回代。intmm_createspace(pthread_tpth_id)新始線創(chuàng)建程私空間,參為相線程線程。成返回,則回誤代碼int線程結(jié)束前釋放線程私有空間若成功執(zhí)行則返,否則回錯(cuò)誤代碼。mm_alloc(pthread_tpth_id,intsize)線程私有動(dòng)態(tài)內(nèi)分配函數(shù),參數(shù)是線程,size是申請(qǐng)大小,以字節(jié)為位若分配成功則返回分得空間的首址,類型為void*,否回。intmm_free(pthread_tpth_id,ptr)線程私有動(dòng)態(tài)內(nèi)存釋放函數(shù)參數(shù)tid是線程線程號(hào)ptr為待放內(nèi)存址通常為指針變量。若成功執(zhí)行則返回0,則回誤代碼MM(memorymanager)3.1MMIndex_list
地址01517
space*space*space*space*
publicspaceNULL
blobloblockckckblblobloocckckk
NULL、
、、、#+1
、、space*
NULL
圖動(dòng)態(tài)存儲(chǔ)管理結(jié)構(gòu)的主要數(shù)據(jù)構(gòu)組織MM主數(shù)據(jù)結(jié)構(gòu)如1示。在MM化將待的空將分部個(gè)長間表空初空空池初定義數(shù)目)在MM初始還為線程共享數(shù)據(jù)創(chuàng)建1個(gè)公存儲(chǔ)(blic),并將這個(gè)注到間引中每個(gè)初掛載定義個(gè)。當(dāng)MM第1次收到某線程(非主程)的動(dòng)態(tài)內(nèi)存配請(qǐng)求,將為該程創(chuàng)建一個(gè)對(duì)應(yīng)私有儲(chǔ)并默認(rèn)載個(gè)block后注冊(cè)到引中為線的有間當(dāng)MM到pth_id)請(qǐng)時(shí),會(huì)將該線程pth_id對(duì)的space放入空閑空間池中,同時(shí)釋放space掛載的所到空閑儲(chǔ)塊池中MM結(jié)以上的敘述,定MM下word_mm{//索引表struct
,//b
structword_space_head*
,//有當(dāng)息pthread_mutex_t////pthread_mutex_t//索引表//}word_mm,義宏定義是為了讓用戶實(shí)現(xiàn)自定大小,數(shù)量等信息,這里的數(shù)據(jù)是初始化時(shí)的默認(rèn)值:30//
spaceBLCOK_NUM100//
在池的目
義的展池block目//義是組織block部的SECTOR_SIZE128//定義的sector的單位節(jié)3//
的block目MM_HASH_FUC(tid)//HASH義索引表簡介索引表的容納式是采鏈?zhǔn)絟ash法它的作用管理所正在使用的根據(jù)定的程編號(hào)pth_id可以快速的在索表中查找到該線程對(duì)應(yīng)nit,向相應(yīng)的;然在這個(gè)space上完成線程的內(nèi)存分配與釋放請(qǐng)。索引表中含有下列tid和個(gè)指針該指指某用的頭部個(gè)用指下一個(gè)nit單元。索引的結(jié)構(gòu)tid0*1*43*-1*2*-1*......
NULLNULL圖索引的結(jié)構(gòu)圖示了運(yùn)行過程中的索引結(jié)構(gòu)中一索項(xiàng)是共space對(duì)的索引項(xiàng),這塊在MM初化的時(shí)候建立,在MM銷毀時(shí)候銷當(dāng)毀1個(gè)space時(shí),需刪除該space在索引表中對(duì)應(yīng)索引項(xiàng)引采Hash實(shí)處沖突的法用地法,由于三作,圖沒顯出這關(guān)系。索引表的定義根據(jù)上面的敘述定于索引表中的素如下:index_list_unit{unsignedlong//
該space*space;的塊用于多block*nextUnit//hash}index_list_unit,list_unit_t;_unit_tlist_index[LIST_LENGTH]在結(jié)構(gòu)體中定義的是一個(gè)行項(xiàng)結(jié)構(gòu)體的數(shù)組4.3
intmm_list_init()初始創(chuàng)索表本的是得頭的list數(shù)實(shí)體化。初化時(shí)調(diào)用此數(shù),創(chuàng)建成功回0。intmm_list_logon(utid)線程第一次申請(qǐng)內(nèi)存時(shí)候或顯示調(diào)用創(chuàng)space候注索引;參數(shù)tid是編號(hào)。該函數(shù)用get函數(shù)獲頭和的block塊動(dòng),之冊(cè)表返。intlongtid)線程結(jié)束之后,在索引表中注將tid記刷-1用space頭入池調(diào)rn將block塊還池longtid)據(jù)tid參定返型。函只是一個(gè)能數(shù)為其函使。5.1空閑空間池中由若干個(gè)空閑成這都有一個(gè)頭信息,大小零標(biāo)未用。在注索表標(biāo)記已用脫池。銷之后仍然回到該池,池的作相當(dāng)于是空閑的管理池。5.2Space數(shù)
空總閑數(shù)數(shù)
空總閑數(shù)數(shù)斥鎖
圖space空閑空間的組織結(jié)構(gòu)如圖所示,中的space都指向任何block,有要標(biāo)信。5.3Space義
Space池頭結(jié)信息下:structstructword_space*firstSpace;//
個(gè)//
錄space的pthread_mutex_t//Space
互斥鎖
//用實(shí)現(xiàn)對(duì)pace空}word_space_head,space_head_t;結(jié)點(diǎn)結(jié)構(gòu)如下:inttSize;//記錄space塊掛總存空大小(以數(shù)示intfSize;//錄space所載的空閑內(nèi)存大以塊數(shù)示structword_block//指一個(gè)block塊word_space*sNext;//指一塊Space接
int立space鏈頭鏈函得結(jié)中的實(shí)體化。創(chuàng)一個(gè)空載的頭返回指針型。在有新線程建立且space池?zé)o閑space頭時(shí)用函,回針交給引,成冊(cè)()響應(yīng)程新立求該數(shù)優(yōu)搜空池否有有返回,如果沒有調(diào)上面的函數(shù)生成一個(gè)新的;返回指向獲得的的指針intmm_space_return(space*ptr)響線程結(jié)束的注函數(shù),參數(shù)ptr指線對(duì)應(yīng)的將此塊space頭入池中。果注銷成功返回0;函數(shù)還要修改鏈頭的信息blocks6.1該池中單元block是初始化MM時(shí)候由用戶定大小單的最小儲(chǔ)元建的個(gè)數(shù)也被用戶指定。被space使管,身于己的內(nèi)存有套理式head包含一基本關(guān)block信息,如鎖互斥剩block數(shù)等。數(shù)blcok數(shù)blockblockblock
Spacepointer圖block池的據(jù)結(jié)構(gòu)組織圖是運(yùn)行過程中某一刻的態(tài),色表示已占而色的表示閑space中的指指向一個(gè)同個(gè)space的block會(huì)相互連。head引的線示是將有的閑的塊連,這做目的方便找空的塊。對(duì)block內(nèi)的構(gòu)以它部管理的方式,將第七節(jié)論
block池頭點(diǎn)如:block*//指
tSize;//記fSize;//記block
池中數(shù)塊
structword_block*ffBlock;//記錄第一pthread_mutex_t斥鎖對(duì)pace的制
fnum:k
block內(nèi)部的數(shù)據(jù)構(gòu)如右圖示,結(jié)結(jié)下
tsNum;//shortfsNum;//
該小小
//置structword_block*//向池鏈中一blockstructword_block*
//被space塊中的//下一個(gè)//在被占時(shí)指下一空閑block}word_block,block;其中sector的組
intmm_block_chead()建池函數(shù)使得結(jié)構(gòu)體mm的mm_block_head實(shí)體block*創(chuàng)建個(gè)block塊返型;初化。block*mm_block_reblock()應(yīng)space的加動(dòng),找中第個(gè)有占的block塊,回block*并且修改池信息。該函數(shù)用來展space塊大小。bool*mm_block_return(block響還塊動(dòng)作,參數(shù)是該的塊;該函數(shù)線程注銷時(shí)候由引表函調(diào),旦行,需要改針修改block池的鏈頭。intmm_block_realloc()在池中的有塊已經(jīng)被用是仍然有新的線程建立block池本身私下里用此數(shù)次拓展申請(qǐng)辟BLOCK_RENUM個(gè)塊Space7.1-sectorSector是的分配用,用于戶儲(chǔ)使用內(nèi)最小單Sector按照一定量(取決宏)被組織在個(gè)block塊中。它的小也是取于宏頭SECTOR_SIZE,單位字節(jié)。其中,前兩個(gè)字節(jié)在初始化的時(shí)候被制定,存放個(gè)r指于組織在block中(相于靜鏈表),而在被分配出去后被用戶寫覆蓋在線space對(duì)于的理對(duì)的理對(duì)于線程戶辟釋放間的內(nèi)部現(xiàn)在space配算法指的是對(duì)于用戶的局部申請(qǐng)有著最為實(shí)際和有效的內(nèi)分配算法,這個(gè)算可以改進(jìn);本次我們的算總體思是頭block為節(jié)點(diǎn)創(chuàng)s鏈以為位由block用態(tài)方組空閑sector,響應(yīng)戶的局部申請(qǐng)。curcur
space
blockblocktsizefsizesnext
bnext
bnext
sb_next
block
圖在線space的一時(shí)狀面表一:所域稱型稱spacefblockblock*block
用途指第一個(gè)掛載在上的block部shortshort
短型數(shù)大短型空閑數(shù),最大space*nextspacets_numshorttotal
注后接入space池,用于串在鏈上記錄掛在本block上的sector總數(shù)頭部
fs_numshortfreefnumshortblock*nextblocksb_nextblock*
記錄掛在本block上的sector空數(shù)記第一個(gè)空閑的號(hào)當(dāng)靜鏈鏈頭在池中續(xù)block創(chuàng)成bh鏈指下一個(gè)掛載在上的block果本block占指向鏈中下一個(gè)用----------------------block中的小分配單元,邏件curshort
短型表的對(duì)于載的構(gòu)建以用函數(shù)(參見接口),構(gòu)建完成后,可注冊(cè)再掛載,是容易的對(duì)初始化block即用mm_block_init數(shù)實(shí)現(xiàn)制是先從存中得一大小字節(jié)的間它表示頭大,加上后面所的單元大返回的指針強(qiáng)制block*,始入充block頭,地址是BYTE*p=(BYTE*)nodeBlock;所的址第個(gè)的采用強(qiáng)的方式這個(gè)cur值地,寫入。7.4分配算法7.4.1流圖我們展示了用戶的一次申請(qǐng)中實(shí)現(xiàn)的流程用Alloc(tidsize)
Locate(tid)
次?
是否logon(tid)Void*指針分法
reblock
是否
圖用戶內(nèi)存申請(qǐng)流程其中使到的函數(shù)都是上面的組件中所定過的函數(shù)些函實(shí)制意事項(xiàng)都函數(shù)介紹中說。下面的工作就是來詳細(xì)的解釋下圖6中分法7.4.2block分算法圖說block在分前經(jīng)保了本中足的間分配即block不發(fā)生溢的錯(cuò)誤分配結(jié)后block(有大存的的返給用戶分配束參看圖到之后從鏈向后查找到第個(gè)block塊的fsNum>1(表還有sector可給分配)進(jìn)行塊的分配到一個(gè)的sector,下地的cur值寫fNum頭頭空數(shù)進(jìn)行有,是個(gè)字,是SECTOR_SIZE-2個(gè),有個(gè)字節(jié)是給了?不錯(cuò),在空的,cur值個(gè)節(jié)了個(gè)一分配,這個(gè)cur值有意義,可(實(shí)上是為值,用戶拿到這個(gè)塊后寫入其數(shù)了)space釋算法釋算法的流程圖在,為看了,就以。有個(gè)參數(shù)個(gè)tid用在表中定位在有直返回;還有void*,是是的空的地。采頭法行入,定到的后鏈地址的法找到塊block指的頭個(gè)字節(jié)short*型且寫入fnum的值將m改當(dāng)回sector塊的索引號(hào),這就是頭插法還回sector。下使用況分析臨界分及選定的鎖系統(tǒng)的結(jié)以三層引(space層(對(duì)、block在線使時(shí)免不對(duì)這些線性結(jié)構(gòu)進(jìn)行search等以這結(jié)構(gòu)就是臨界資源且些界源作整存的也是說,單獨(dú)的nit或或是block都不成為臨界資源的,只有它們?cè)趯?duì)應(yīng)的線性結(jié)構(gòu)上才成為臨界資源一部分另外,(即共享區(qū))由一indexnit個(gè)及個(gè)block構(gòu),由于為所有線程共享,所其整體也為臨界資源。對(duì)臨界資源,為了防止多線程操作時(shí)出現(xiàn)問題,必須對(duì)其進(jìn)行同步、互斥處理,系采用加鎖方來實(shí)現(xiàn)互斥方考到臨資源任單獨(dú)的單元構(gòu)成界一方面考慮小粒度會(huì)帶來更大的空時(shí)間開銷以及更容易帶來死所以每個(gè)臨資源整加鎖即鎖量——block池來定block池shLock——池鎖(來鎖定spaceindex—index鎖(用來鎖定索引表);——共享區(qū)來鎖定共享區(qū)種分別設(shè)定block池結(jié)構(gòu)和池頭結(jié)中,后兩種設(shè)在結(jié)中各數(shù)定關(guān)系首,為了方便與安全,所有函數(shù)如需加鎖,則該函數(shù)保持運(yùn)行全程不解鎖,只在數(shù)將運(yùn)結(jié)束時(shí)再解鎖以下述只描述單層函數(shù)若函數(shù)調(diào)用函數(shù)加鎖況予描)于始化數(shù)運(yùn)行在序最開始,所在同時(shí)不有線程運(yùn)情發(fā)生,便不用執(zhí)行任何加鎖操作,只將有初化可塊space塊建一,所以用加鎖mm_block_reblock數(shù)需從block-pool上查并取塊要bhLock鎖。數(shù)由于需要將插block-pool,以將bhLock鎖。mm_block_realloc函于需內(nèi)存間做成block插入以展,以需要鎖。但是該函數(shù)只被reblock調(diào),不上。、mm_list_logoff、數(shù)由于要上找,以需將indexlock鎖上函數(shù)于需要在中檢索所以需要上rn函需要將插所需將shLock鎖。mm_allocmm_free在參數(shù)tid要對(duì)共享區(qū)進(jìn)行操作以需將鎖上。以是所有鎖會(huì)在何時(shí)被鎖上及解開。各函數(shù)深層對(duì)鎖的操作可以由以上描述和之的函數(shù)用關(guān)系圖來推。MTDMM代碼結(jié)文件函分布關(guān)、MTDMM系統(tǒng)的結(jié)
MTDMM文件構(gòu)
()圖統(tǒng)的文結(jié)構(gòu)圖是系統(tǒng)的致可分三個(gè)層:底層操層部控制、對(duì)外接層其中層操層直接面向內(nèi)的block操作,下:block池頭的立block池的初化block的取塊block的還塊block池的展
int(intblock*mm_block_reblock()block*rn(block*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 防雷設(shè)施安裝維護(hù)合同三篇
- 化妝品行業(yè)保安工作總結(jié)
- 兒童游樂設(shè)施設(shè)計(jì)美工工作總結(jié)
- 林業(yè)行業(yè)美工的森林保護(hù)
- 風(fēng)險(xiǎn)防范工作總結(jié)
- 【八年級(jí)下冊(cè)地理粵教版】第8章 珠江三角洲 單元測(cè)試
- 本科生畢業(yè)論文答辯記錄表
- 2025屆揚(yáng)州市高三語文(上)1月質(zhì)量調(diào)研試卷及答案解析
- 創(chuàng)新成果知識(shí)產(chǎn)權(quán)合同(2篇)
- DB33T 2188.4-2019 大型賽會(huì)志愿服務(wù)崗位規(guī)范 第4部分:禮賓接待志愿服務(wù)
- 初中必背古詩文138首
- 藍(lán)色國家科學(xué)基金4.3杰青優(yōu)青人才科學(xué)基金答辯模板
- DLT 5434-2021 電力建設(shè)工程監(jiān)理規(guī)范表格
- 2024年房屋交接確認(rèn)書
- 拓展低空經(jīng)濟(jì)應(yīng)用場景實(shí)施方案
- 北京市東城區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末生物試題【含答案解析】
- 天皰瘡臨床分期與治療方案研究
- 開放系統(tǒng)10861《理工英語(4)》期末機(jī)考真題及答案(第102套)
- 綜合技能訓(xùn)練實(shí)訓(xùn)報(bào)告學(xué)前教育
- 2024年國家能源集團(tuán)招聘筆試參考題庫含答案解析
- MOOC 管理學(xué)-鄭州輕工業(yè)大學(xué) 中國大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論