哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

奈因PCB電路板設(shè)計(jì) ? 來(lái)源:小麥大叔 ? 作者:小麥大叔 ? 2021-08-14 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文主要介紹內(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é)合了ROM和RAM的長(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這一類,以23即8分為4個(gè)內(nèi)存區(qū)間【25,25+8),【25+8,25+16),【25+16,25+24),【25+24,25+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)的鏈表中是否有空閑塊,比如第一層bitmap后3位010,表示25這一類內(nèi)存區(qū)間有空閑塊。對(duì)應(yīng)的第二層bitmap為0100表示【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)的空閑鏈表中。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11320

    瀏覽量

    225783
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    579

    瀏覽量

    89348
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1400

    瀏覽量

    120957
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7835

    瀏覽量

    93435

原文標(biāo)題:教你一招:如何在MCU上高效地管理內(nèi)存?

文章出處:【微信號(hào):pcbgood,微信公眾號(hào):奈因PCB電路板設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LuatOS的內(nèi)存分配機(jī)制

    不同 LuatOS 硬件平臺(tái)在內(nèi)存布局上存在差異,Lua 運(yùn)行內(nèi)存、系統(tǒng)內(nèi)存與 PSRAM 擴(kuò)展內(nèi)存的分配方式各有區(qū)別。部分型號(hào)將
    的頭像 發(fā)表于 04-16 12:37 ?46次閱讀
    LuatOS的<b class='flag-5'>內(nèi)存</b>分配機(jī)制

    DDR5內(nèi)存斷崖式下跌或引發(fā)踩踏式拋貨?

    內(nèi)存
    芯廣場(chǎng)
    發(fā)布于 :2026年03月30日 15:35:23

    MangoTree Halo Ultra「全新PXI」,標(biāo)配自動(dòng)糾錯(cuò)內(nèi)存#

    內(nèi)存
    芒果樹數(shù)字
    發(fā)布于 :2026年03月06日 15:59:34

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    在 Linux 內(nèi)核中,內(nèi)存管理是整個(gè)系統(tǒng)穩(wěn)定運(yùn)行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的核心機(jī)制,更是驅(qū)動(dòng)開
    的頭像 發(fā)表于 02-10 16:58 ?3712次閱讀
    Linux內(nèi)核伙伴<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>內(nèi)存</b>申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    曙光云發(fā)布“HME內(nèi)存聚變技術(shù)”

    了顛覆性解決方案——正式推出“HME內(nèi)存聚變引擎”(Hyper-Memory Engine),以獨(dú)家軟件技術(shù),打破傳統(tǒng)云架構(gòu)中算力成本與DRAM內(nèi)存容量的剛性捆綁。 這一技術(shù)的推出,實(shí)現(xiàn)了云計(jì)算底層架構(gòu)的代際跨越。曙光云研發(fā)團(tuán)隊(duì)突破傳統(tǒng)
    的頭像 發(fā)表于 02-08 16:26 ?6.1w次閱讀

    【「Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配

    管理的核心,它將內(nèi)存組織成固定大小的邏輯單元,稱為頁(yè)。頁(yè)大小是由MMU確定的,操作系統(tǒng)無(wú)法修改它。市面上處理器可支持多頁(yè)大小的,常見(jiàn)的有4KB,16KB和64KB的頁(yè)大小,操作系統(tǒng)可以
    發(fā)表于 01-16 20:05

    操作系統(tǒng)體系結(jié)構(gòu)

    內(nèi)核。   大內(nèi)核系統(tǒng)操作系統(tǒng)的主要功能模塊都作為一個(gè)緊密聯(lián)系的整體運(yùn)行在核心態(tài),從而為應(yīng)用提供高性能的系統(tǒng)服務(wù)。因?yàn)楦?b class='flag-5'>管理模塊之間共享信息,能有效利用相互之間的有效特性,所以具
    發(fā)表于 01-15 08:19

    操作系統(tǒng)的發(fā)展及分類

    ,就形成了多道批處理操作系統(tǒng)。該系統(tǒng)把用戶提交的作業(yè)成批地送入計(jì)算機(jī)內(nèi)存,然后由作業(yè)調(diào)度程序自動(dòng)地選擇作業(yè)運(yùn)行。   優(yōu)點(diǎn)是資源利用率高,多道程序共享計(jì)算機(jī)資源,從而使各種資源得到充分利用;
    發(fā)表于 01-15 08:00

    操作系統(tǒng)運(yùn)行機(jī)制

    計(jì)算機(jī)系統(tǒng)中,通常CPU執(zhí)行兩種不同性質(zhì)的程序:一種是操作系統(tǒng)內(nèi)核程序;另一種是用戶自編程序或系統(tǒng)外層的應(yīng)用程序。對(duì)操作系統(tǒng)而言,這兩種程序的作用不同,前者是后者的
    發(fā)表于 01-15 07:12

    rk基于linux/android內(nèi)存管理

    一、內(nèi)存分布 ? U-Boot 由前級(jí) Loader 加載到 CONFIG_SYS_TEXT_BASE 地址,初始化時(shí)會(huì)探明當(dāng)前系統(tǒng)的總內(nèi)存容 量, 32 位平臺(tái)上認(rèn)為最大 4GB 可用(但是不影響
    的頭像 發(fā)表于 12-15 10:42 ?277次閱讀
    rk基于linux/android<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>

    單片機(jī)的操作系統(tǒng)

    RTX ?:ARM官方推薦,與CMSIS-RTOS標(biāo)準(zhǔn)兼容,支持時(shí)間片輪轉(zhuǎn)調(diào)度,適合汽車電子等硬實(shí)時(shí)任務(wù)。 ? ? 都江堰操作系統(tǒng)(djyos) ?:事件驅(qū)動(dòng)型內(nèi)核,適用于高并發(fā)場(chǎng)景。 ? 選擇時(shí)需結(jié)合硬件資源(如CPU類型、內(nèi)存大?。┖烷_發(fā)需求(實(shí)時(shí)性、網(wǎng)絡(luò)支持等
    發(fā)表于 11-14 06:18

    嵌入式實(shí)時(shí)操作系統(tǒng)的特點(diǎn)

    的時(shí)間限制內(nèi)完成,而軟實(shí)時(shí)任務(wù)對(duì)時(shí)間限制更靈活。 任務(wù)調(diào)度和優(yōu)先級(jí):實(shí)時(shí)嵌入式操作系統(tǒng)通過(guò)任務(wù)調(diào)度器來(lái)管理和分配任務(wù),通常采用優(yōu)先級(jí)調(diào)度算法,確保高優(yōu)先級(jí)的實(shí)時(shí)任務(wù)得到及時(shí)處理。 中斷處理:實(shí)時(shí)嵌入式
    發(fā)表于 11-13 06:30

    RusT-Thread:基于Rust面向資源受限嵌入式設(shè)備的操作系統(tǒng)的實(shí)踐 | 技術(shù)集結(jié)

    摘要隨著物聯(lián)網(wǎng)和嵌入式系統(tǒng)的發(fā)展,實(shí)時(shí)操作系統(tǒng)(RTOS)的安全性和性能需求日益提高。傳統(tǒng)基于C語(yǔ)言的RTOS在內(nèi)存安全和并發(fā)控制方面存在局限,容易導(dǎo)致緩沖區(qū)溢出、數(shù)據(jù)競(jìng)爭(zhēng)等問(wèn)題。本項(xiàng)目以
    的頭像 發(fā)表于 11-07 17:37 ?7024次閱讀
    RusT-Thread:基于Rust面向資源受限嵌入式設(shè)備的<b class='flag-5'>操作系統(tǒng)</b>的實(shí)踐 | 技術(shù)集結(jié)

    靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作庫(kù):優(yōu)化內(nèi)存管理的利器

    在C語(yǔ)言開發(fā)中,高效的內(nèi)存管理是提升程序性能的關(guān)鍵。ZBUFF作為一款靈活高效的內(nèi)存數(shù)據(jù)操作庫(kù),通過(guò)優(yōu)化內(nèi)存分配與釋放機(jī)制,為開發(fā)者提供了更
    的頭像 發(fā)表于 08-14 18:01 ?806次閱讀
    靈活高效ZBUFF — C<b class='flag-5'>內(nèi)存</b>數(shù)據(jù)<b class='flag-5'>操作</b>庫(kù):優(yōu)化<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的利器

    揭秘LuatOS:實(shí)時(shí)操作系統(tǒng)RTOS核心庫(kù)的關(guān)鍵技術(shù)剖析!

    電機(jī)控制、傳感器采集等實(shí)時(shí)數(shù)據(jù)處理場(chǎng)景。 在LuatOS開發(fā)中, 用于實(shí)時(shí)操作系統(tǒng)(RTOS)相關(guān)功能的核心庫(kù) ——提供了定時(shí)器管理、系統(tǒng)控制、內(nèi)存監(jiān)控、路徑配置等底層
    的頭像 發(fā)表于 05-21 16:02 ?771次閱讀
    揭秘LuatOS:實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>RTOS核心庫(kù)的關(guān)鍵技術(shù)剖析!
    安图县| 苏州市| 乐东| 通化县| 牙克石市| 宁河县| 昆明市| 湖北省| 阿拉善右旗| 雷州市| 柳河县| 墨竹工卡县| 沈丘县| 综艺| 攀枝花市| 大田县| 甘德县| 明光市| 盐池县| 芜湖市| 盐源县| 霸州市| 舞阳县| 民乐县| 石台县| 成都市| 凤山市| 永康市| 荆门市| 华蓥市| 和静县| 满城县| 海门市| 怀集县| 马龙县| 德令哈市| 鸡西市| 万载县| 武胜县| 合作市| 灵寿县|