www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > strongerHuang
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容 轉(zhuǎn)自:LiteOS物聯(lián)網(wǎng)操作系統(tǒng) 本文主要介紹內(nèi)存的基本概念以及操作系統(tǒng)的內(nèi)存管理算法。 一、內(nèi)存的基本概念 內(nèi)存是計(jì)算機(jī)系統(tǒng)中除了處理器以外最重要的資源,用于存儲(chǔ)當(dāng)前正在執(zhí)行的程序和數(shù)據(jù)。內(nèi)存是相對(duì)于CPU來(lái)說(shuō)的,CPU

關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容

轉(zhuǎn)自:LiteOS物聯(lián)網(wǎng)操作系統(tǒng)

本文主要介紹內(nèi)存的基本概念以及操作系統(tǒng)的內(nèi)存管理算法。


一、內(nèi)存的基本概念

內(nèi)存是計(jì)算機(jī)系統(tǒng)中除了處理器以外最重要的資源,用于存儲(chǔ)當(dāng)前正在執(zhí)行的程序和數(shù)據(jù)。內(nèi)存是相對(duì)于CPU來(lái)說(shuō)的,CPU可以直接尋址的存儲(chǔ)空間叫做內(nèi)存,CPU需要通過(guò)驅(qū)動(dòng)才能訪問(wèn)的叫做外存。


二、ROM&RAM&Flash

內(nèi)存一般采用半導(dǎo)體存儲(chǔ)單元,分為只讀存儲(chǔ)器(ROM,Read Only Memory)、隨機(jī)存儲(chǔ)器(RAM,Random Access Memory)ROM一般只能讀取不能寫入,掉電后其中的數(shù)據(jù)也不會(huì)丟失。RAM既可以從中讀取也可以寫入,但是掉電后其中的數(shù)據(jù)會(huì)丟失。內(nèi)存一般指的就是RAM。

ROM在嵌入式系統(tǒng)中一般用于存儲(chǔ)BootLoader以及操作系統(tǒng)或者程序代碼或者直接當(dāng)硬盤使用。近年來(lái)閃存(Flash)已經(jīng)全面代替了ROM在嵌入式系統(tǒng)中的地位,它結(jié)合了ROMRAM的長(zhǎng)處,不僅具備電子可擦除可編程的特性,而且斷電也不會(huì)丟失數(shù)據(jù),同時(shí)可以快速讀取數(shù)據(jù)。


三、兩類內(nèi)存管理方式
內(nèi)存管理模塊管理系統(tǒng)的內(nèi)存資源,它是操作系統(tǒng)的核心模塊之一。 主要包括內(nèi)存的初始化、分配以及釋放。

從分配內(nèi)存是否連續(xù),可以分為兩大類。

  • 連續(xù)內(nèi)存管理

為進(jìn)程分配的內(nèi)存空間是連續(xù)的,但這種分配方式容易形成內(nèi)存碎片(碎片是難以利用的空閑內(nèi)存,通常是小內(nèi)存),降低內(nèi)存利用率。連續(xù)內(nèi)存管理主要分為單一連續(xù)內(nèi)存管理和分區(qū)式內(nèi)存管理兩種
  • 非連續(xù)內(nèi)存管理

將進(jìn)程分散到多個(gè)不連續(xù)的內(nèi)存空間中,可以減少內(nèi)存碎片,內(nèi)存使用率更高。如果分配的基本單位是頁(yè),則稱為分頁(yè)內(nèi)存管理;如果基本單位是段,則稱為分段內(nèi)存管理。

當(dāng)前的操作系統(tǒng),普遍采用非連續(xù)內(nèi)存管理方式。不過(guò)因?yàn)榉峙淞6容^大,對(duì)于內(nèi)存較小的嵌入式系統(tǒng),一般采用連續(xù)內(nèi)存管理。本文主要對(duì)嵌入式系統(tǒng)中常用的連續(xù)內(nèi)存管理的分區(qū)式內(nèi)存管理進(jìn)行介紹。


四、分區(qū)式內(nèi)存管理
分區(qū)式內(nèi)存管理分為固定分區(qū)和動(dòng)態(tài)分區(qū)

  • 固定分區(qū)

    事先就把內(nèi)存劃分為若干個(gè)固定大小的區(qū)域 。分區(qū)大小既可以相等也可以不等。固定分區(qū)易于實(shí)現(xiàn),但是會(huì)造成分區(qū)內(nèi)碎片浪費(fèi),而且分區(qū)總數(shù)固定,限制了可以并發(fā)執(zhí)行的進(jìn)程數(shù)量。
  • 動(dòng)態(tài)分區(qū)

根據(jù)進(jìn)程的實(shí)際需要,動(dòng)態(tài)地給進(jìn)程分配所需內(nèi)存。


五、動(dòng)態(tài)分區(qū)內(nèi)存管理
運(yùn)作機(jī)制

動(dòng)態(tài)分區(qū)管理一般采用空閑鏈表法,即基于一個(gè)雙向鏈表來(lái)保存空閑分區(qū)。對(duì)于初始狀態(tài),整個(gè)內(nèi)存塊都會(huì)被作為一個(gè)大的空閑分區(qū)加入到空閑鏈表中。當(dāng)進(jìn)程申請(qǐng)內(nèi)存時(shí),將會(huì)從這個(gè)空閑鏈表中找到一個(gè)大小滿足要求的空閑分區(qū)。如果分區(qū)大于所需內(nèi)存,則從該分區(qū)中拆分出需求大小的內(nèi)存交給進(jìn)程,并將此拆分出的內(nèi)存從空閑鏈表中移除,剩下的內(nèi)存仍然是一個(gè)掛在空閑鏈表中的空閑分區(qū)。

數(shù)據(jù)結(jié)構(gòu)

空閑鏈表法有多種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),這里介紹一種較為簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。每個(gè)空閑分區(qū)的數(shù)據(jù)結(jié)構(gòu)中包含分區(qū)的大小,以及指向前一個(gè)分區(qū)和后一個(gè)分區(qū)的指針,這樣就能將各個(gè)空閑分區(qū)鏈接成一個(gè)雙向鏈表。

內(nèi)存分配算法
  • First Fit(首次適應(yīng)算法)

First Fit要求空閑分區(qū)鏈表以地址從小到大的順序鏈接。分配內(nèi)存時(shí),從鏈表的第一個(gè)空閑分區(qū)開始查找,將最先能夠滿足要求的空閑分區(qū)分配給進(jìn)程。

  • Next Fit(循環(huán)首次適應(yīng)算法)

Next Fit由First Fit算法演變而來(lái)。分配內(nèi)存時(shí),從上一次剛分配過(guò)的空閑分區(qū)的下一個(gè)開始查找,直至找到能滿足要求的空閑分區(qū)。查找時(shí)會(huì)采用循環(huán)查找的方式,即如果直到鏈表最后一個(gè)空閑分區(qū)都不能滿足要求,則返回到第一個(gè)空閑分區(qū)開始查找。
  • Best Fit(最佳適應(yīng)算法)

從所有空閑分區(qū)中找出能滿足要求的、且大小最小的空閑分區(qū)。為了加快查找速度,Best Fit算法會(huì)把所有空閑分區(qū)按其容量從小到大的順序鏈接起來(lái),這樣第一次找到的滿足大小要求的內(nèi)存必然是最小的空閑分區(qū)。
  • Worst Fit(最壞適應(yīng)算法)

從所有空閑分區(qū)中找出能滿足要求的、且大小最大的空閑分區(qū)。Worst Fit算法按其容量從大到小的順序鏈接所有空閑分區(qū)。
  • Two LevelSegregated Fit(TLSF)

使用兩層鏈表來(lái)管理空閑內(nèi)存,將空閑分區(qū)大小進(jìn)行分類 ,每一類用一個(gè)空閑鏈表表示,其中的空閑內(nèi)存大小都在某個(gè)特定值 或者某個(gè)范圍內(nèi)。 這樣存在多個(gè)空閑鏈表,所以又用一個(gè)索引鏈表來(lái)管理這些空閑鏈表,該表的每一項(xiàng)都對(duì)應(yīng)一種空閑鏈表,并記錄該類空閑鏈表的表頭指針。

圖中,第一層鏈表將空閑內(nèi)存塊的大小根據(jù)2的冪進(jìn)行分類。第二層鏈表是具體的每一類空閑內(nèi)存塊按照一定的范圍進(jìn)行線性分段。比如25這一類,以238分為4個(gè)內(nèi)存區(qū)間【25,25+8),【25+8,25+16),【25+16,25+24),【25+2425+32);216這一類,以214分為4個(gè)小區(qū)間【216,216+214),【216+214,216+2*214),【216+2*214,216+3*214),【216+3*214,216+4*214)。同時(shí)為了快速檢索到空閑塊,每一層鏈表都有一個(gè)bitmap用于標(biāo)記對(duì)應(yīng)的鏈表中是否有空閑塊,比如第一層bitmap3010,表示25這一類內(nèi)存區(qū)間有空閑塊。對(duì)應(yīng)的第二層bitmap0100表示【25+16,25+24)這個(gè)區(qū)間有空閑塊,即下面的52Byte。
  • Buddysystems(伙伴算法)
Segregated Fit算法的變種,具有更好的內(nèi)存拆分和回收合并效率?;锇樗惴ㄓ泻芏喾N類,比如BinaryBuddies,F(xiàn)ibonacci Buddies等。Binary Buddies是最簡(jiǎn)單也是最流行的一種,將所有空閑分區(qū)根據(jù)分區(qū)的大小進(jìn)行分類,每一類都是具有相同大小的空閑分區(qū)的集合,使用一個(gè)空閑雙向鏈表表示。BinaryBuddies中所有的內(nèi)存分區(qū)都是2的冪次方。
因?yàn)闊o(wú)論是已分配的或是空閑的分區(qū),其大小均為 2 的冪次方,即使進(jìn)程申請(qǐng)的內(nèi)存小于分配給它的內(nèi)存塊,多余的內(nèi)存也不會(huì)再拆分出來(lái)給其他進(jìn)程使用,這樣就容易造成內(nèi)部碎片。
當(dāng)進(jìn)程申請(qǐng)一塊大小為n的內(nèi)存時(shí)的分配步驟為:

1、計(jì)算一個(gè)i值,使得2i-1<n≤2i

2、在空閑分區(qū)大小為2i的空閑鏈表中查找

3、如果找到空閑塊,則分配給進(jìn)程

4、如果2i的空閑分區(qū)已經(jīng)耗盡,則在分區(qū)大小為2i+1的空閑鏈表中查找

5、如果存在2i+1的空閑分區(qū),則將此空閑塊分為相等的兩個(gè)分區(qū),這兩分區(qū)就是一對(duì)伙伴,其中一塊分配給進(jìn)程,另一塊掛到分區(qū)大小為2i的空閑鏈表中

6、如果2i+1的空閑分區(qū)還是不存在,則繼續(xù)查找大小為2i+2的空閑分區(qū)。如果找到,需要進(jìn)行兩次拆分。第一次拆分為兩塊大小為2i+1的分區(qū),一塊分區(qū)掛到大小為2i+1的空閑鏈表中,另一塊分區(qū)繼續(xù)拆分為兩塊大小為2i的空閑分區(qū),一塊分配給進(jìn)程,另一塊掛到大小為2i的空閑鏈表中

7、如果2i+2的空閑分區(qū)也找不到,則繼續(xù)查找2i+3,以此類推

內(nèi)存回收時(shí),如果待回收的內(nèi)存塊與空閑鏈表中的一塊內(nèi)存互為伙伴,則將它們合并為一塊更大的內(nèi)存塊,如果合并后的內(nèi)存塊在空閑鏈表中還有伙伴,則繼續(xù)合并到不能合并為止,并將合并后的內(nèi)存塊掛到對(duì)應(yīng)的空閑鏈表中。

下面的表格對(duì)上面6種算法的優(yōu)缺點(diǎn)進(jìn)行了比較:
內(nèi)存算法
優(yōu)點(diǎn)
缺點(diǎn)
First Fit 高地址空間大空閑塊被保留 低地址空間被不斷拆分,造成碎片;每次都從第一個(gè)空閑分區(qū)開始查找,增加了查找時(shí)的系統(tǒng)開銷
Next Fit 空閑分區(qū)分布比較均勻,算法開銷小 缺乏大內(nèi)存空閑塊
Best Fit 用最小內(nèi)存滿足要求,保留大內(nèi)存空閑塊 每次分配后所拆分出來(lái)的剩余空閑內(nèi)存總是最小的,造成許多小碎片,算法開銷大
Worst Fit 每次分配后所拆分出來(lái)的剩余空閑內(nèi)存仍較大,減少小碎片產(chǎn)生 缺乏大內(nèi)存空閑塊,算法開銷大
TLSF 查找效率高,時(shí)間復(fù)雜度小,碎片問(wèn)題表現(xiàn)良好 內(nèi)存回收時(shí)算法復(fù)雜,系統(tǒng)開銷大
Buddy systems 內(nèi)部碎片比較嚴(yán)重 外部碎片較少


免責(zé)聲明:本文轉(zhuǎn)自LiteOS物聯(lián)網(wǎng)操作系統(tǒng),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。

推薦閱讀:

ST-LINK Utility查看內(nèi)核運(yùn)行狀態(tài)

C語(yǔ)言中幾種特殊標(biāo)準(zhǔn)定義和用法

C語(yǔ)言 volatile 關(guān)鍵字在編譯優(yōu)化過(guò)程中有何作用


關(guān)注 微信公眾號(hào)『strongerHuang』,后臺(tái)回復(fù)“1024”查看更多內(nèi)容,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉