freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mocor平臺內(nèi)存管理介紹及案例分析(已修改)

2025-01-21 04:23 本頁面
 

【正文】 MOCOR平臺內(nèi)存管理介紹及案例分析 主講人: GSM_FAE 保密信息 . 2 2022/2/6 MOCOR平臺內(nèi)存管理介紹 ?MOCOR內(nèi)存管理的基本架構(gòu) ?ThreadX的內(nèi)存管理 ?MOCOR的內(nèi)存管理 ?MOCOR內(nèi)存 bug實例分析 保密信息 . 3 2022/2/6 MOCOR內(nèi)存管理的基本架構(gòu) ? 一般的嵌入式系統(tǒng)中最基本的內(nèi)存管理方案有兩種 —— 靜態(tài)分配和動態(tài)分配。 ? 靜態(tài)分配是指在編譯或鏈接時將程序所需的內(nèi)存空間分配好。采用這種分配方案的內(nèi)存段,其大小一般在編譯時就能夠確定。靜態(tài)分配比較簡單,一般不需要特殊的管理。 ? 動態(tài)分配是指系統(tǒng)運(yùn)行時根據(jù)需要動態(tài)地分配內(nèi)存,為實現(xiàn)動態(tài)分配,系統(tǒng)里需要有一套完善的管理機(jī)制。本文中所指的內(nèi)存管理,就是指動態(tài)分配內(nèi)存的管理。 保密信息 . 4 2022/2/6 MOCOR內(nèi)存管理的基本架構(gòu) MOCOR內(nèi)存管理體系的一個大致的調(diào)用層次如下圖所示: 物 理 內(nèi) 存字 節(jié) 池塊 池M M I A P Ps t a t i c多 個 不 同 s i z e 的 塊 池b a s e a p p接 口B L O C K M E M保密信息 . 5 2022/2/6 MOCOR內(nèi)存管理的基本架構(gòu) ? 從可用的內(nèi)存資源的角度,還可以得到下面的一個內(nèi)存分配圖。 保密信息 . 6 2022/2/6 MOCOR平臺內(nèi)存管理介紹 ?MOCOR內(nèi)存管理的基本架構(gòu) ?ThreadX的內(nèi)存管理 ?MOCOR的內(nèi)存管理 ?MOCOR內(nèi)存 bug實例分析 保密信息 . 7 2022/2/6 ThreadX的內(nèi)存管理 ?內(nèi)存字節(jié)池( BTYE POOL) ?內(nèi)存塊池( BLOCK POOL) 保密信息 . 8 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池( BTYE POOL) 保密信息 . 9 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 ?: ? 內(nèi)存字節(jié)池是一個連續(xù)的內(nèi)存塊。在字節(jié)池中,內(nèi)存的分配以字節(jié)為單位,任意大小的內(nèi)存都可以在字節(jié)池上分配(受限于內(nèi)存的容量)。 ? 內(nèi)存字節(jié)池類似于 C語言里的堆 (heap),所以,字節(jié)池我們也可以把它叫做字節(jié)堆,代碼里我們也可以看到創(chuàng)建的字節(jié)池通常以 heap來命名。但與一般意義上的堆的不同在于, ThreadX里的字節(jié)池可以有多個, MOCOR平臺也是利用了這一特性,根據(jù)不同的需求而創(chuàng)建了多個 heap。 ? 每一個字節(jié)池都有一個相應(yīng)的字節(jié)池控制塊,通常是一個全局結(jié)構(gòu)??刂茐K包括對內(nèi)存池的定義和狀態(tài),比如內(nèi)存池的名字,可用的字節(jié)數(shù)等。該結(jié)構(gòu)的定義如下: 保密信息 . 10 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 保密信息 . 11 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 ?: ? 從字節(jié)池中分配內(nèi)存類似于 C語言的 malloc調(diào)用,該調(diào)用返回所需內(nèi)存的數(shù)量(以字節(jié)為單位)。分配的原則是“首次符合”原則,就是說,當(dāng)?shù)谝粋€空閑內(nèi)存塊的大小滿足需求時,就從該內(nèi)存塊分配內(nèi)存,然后將該內(nèi)存塊的剩余內(nèi)存轉(zhuǎn)換成一個新塊。字節(jié)池在初始狀態(tài)下,只有一個空閑塊,以后隨著隨著分配的進(jìn)行,內(nèi)存塊會隨之增多。 ? 除了上述的分配原則之外,字節(jié)池里還定義了一個值 BYTE_POOL_SLIP_SIZE。這是在代碼里實現(xiàn)指定的一個具體數(shù)值,在分配內(nèi)存時,如果要分配的內(nèi)存大小大于這一數(shù)值,則從字節(jié)池的底部開始分配。采用這種分配方式是為了減少內(nèi)存碎片的產(chǎn)生,盡量把大內(nèi)存的分配區(qū)域和小內(nèi)存的分配區(qū)域分開。目前系統(tǒng)里定義的BYTE_POOL_SLIP_SIZE為 80K。 保密信息 . 12 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 ?: ? 以一個分配了兩次的字節(jié)池為例,在內(nèi)存中的情況如下: 下 一 塊 內(nèi) 存 的 地 址控 制 塊 的 地 址已 分 配 的 內(nèi) 存下 一 塊 內(nèi) 存 的 地 址空 閑 標(biāo) 志 : 0 x F F F F E E E E U L空 閑 內(nèi) 存結(jié) 束 標(biāo) 志 塊控 制 塊下 一 塊 內(nèi) 存 的 地 址控 制 塊 的 地 址已 分 配 的 內(nèi) 存保密信息 . 13 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 ? 注意: ? 首先要注意的問題是碎片,一個字節(jié)池可能有 2022字節(jié)的可用空間,但不保證一定能分配到 2022字節(jié)的連續(xù)空間,內(nèi)存池對連續(xù)字節(jié)的數(shù)量不做保證。 ? 分配一塊內(nèi)存所需要的時間跟分配內(nèi)存的大小,字節(jié)池中的碎片數(shù)等因素有關(guān),如果字節(jié)池有 2022字節(jié)的空閑塊,花多長時間找到這塊內(nèi)存也是沒有保證的。因此,在時間要求苛刻的任務(wù)中應(yīng)避免使用字節(jié)池。 ? 字節(jié)池不能在中斷函數(shù)里使用,也不能在 timer回調(diào)函數(shù)里使用。 保密信息 . 14 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 思考: ? 假定系統(tǒng)中有一個內(nèi)存字節(jié)池,并且已經(jīng)從中分配了幾次內(nèi)存。當(dāng)內(nèi)存池中還有 500字節(jié)的剩余內(nèi)存時,應(yīng)用程序申請 200字節(jié)的內(nèi)存,在什么情況下,這樣的申請不能滿足? 保密信息 . 15 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池( BLOCK POOL) 保密信息 . 16 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 ?: ? 內(nèi)存塊池也是一個連續(xù)的字節(jié)塊,但它是由一定數(shù)量的固定 szie的內(nèi)存塊組成的。因此,從一個內(nèi)存塊池中分配出的內(nèi)存總是固定大小的。 ? 相比字節(jié)池,內(nèi)存塊池的兩個主要優(yōu)勢是: ? 沒有碎片。因為內(nèi)存塊池是固定 size的塊構(gòu)成,所以沒有碎片的產(chǎn)生。 ? 分配和釋放的速度很快。所需的時間相當(dāng)于簡單的鏈表操作,分配時不需要搜索整個內(nèi)存塊列表,它總是使用鏈表頭部的內(nèi)存塊來分配。 ? 內(nèi)存塊池的主要缺點是缺乏靈活性。固定尺寸既是它的優(yōu)點也是它的缺點。如果一個內(nèi)存塊池的尺寸足夠大,可以滿足用戶最極限的內(nèi)存分配需求,那么,這個內(nèi)存塊池上分配許多不同尺寸的內(nèi)存會導(dǎo)致嚴(yán)重的內(nèi)存浪費(fèi)。一種解決辦法是同時創(chuàng)建幾個不同的內(nèi)存塊池,每個內(nèi)存塊池分別容納不同尺寸的內(nèi)存塊。目前 MOCOR平臺就是這樣做的,具體我們后面再討論。 ? 同字節(jié)池一樣,內(nèi)存塊池也有一個控制塊結(jié)構(gòu),其中有該內(nèi)存塊的相關(guān)信息,該結(jié)構(gòu)如下: 保密信息 . 17 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 保密信息 . 18 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 ?: ? 內(nèi)存塊池中分配內(nèi)存是非常快的,主要得益于內(nèi)存塊池中的所有空閑內(nèi)存塊組成一個鏈表 (即上面結(jié)構(gòu)中的 tx_block_pool_available_list)。每次分配時只需要取鏈表頭即可,無須遍歷內(nèi)存塊池來找到空閑塊。 保密信息 . 19 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 ?:
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1