女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

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

奈因PCB電路板設(shè)計 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2021-08-14 14:39 ? 次閱讀

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

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

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

二、ROM&RAM&Flash

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

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

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

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

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

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

當(dāng)前的操作系統(tǒng),普遍采用非連續(xù)內(nèi)存管理方式。不過因為分配粒度較大,對于內(nèi)存較小的嵌入式系統(tǒng),一般采用連續(xù)內(nèi)存管理。本文主要對嵌入式系統(tǒng)中常用的連續(xù)內(nèi)存管理的分區(qū)式內(nèi)存管理進行介紹。

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

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

動態(tài)分區(qū)根據(jù)進程的實際需要,動態(tài)地給進程分配所需內(nèi)存。

五、動態(tài)分區(qū)內(nèi)存管理運作機制

動態(tài)分區(qū)管理一般采用空閑鏈表法,即基于一個雙向鏈表來保存空閑分區(qū)。對于初始狀態(tài),整個內(nèi)存塊都會被作為一個大的空閑分區(qū)加入到空閑鏈表中。當(dāng)進程申請內(nèi)存時,將會從這個空閑鏈表中找到一個大小滿足要求的空閑分區(qū)。

如果分區(qū)大于所需內(nèi)存,則從該分區(qū)中拆分出需求大小的內(nèi)存交給進程,并將此拆分出的內(nèi)存從空閑鏈表中移除,剩下的內(nèi)存仍然是一個掛在空閑鏈表中的空閑分區(qū)。

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

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

內(nèi)存分配算法First Fit(首次適應(yīng)算法)First Fit要求空閑分區(qū)鏈表以地址從小到大的順序鏈接。分配內(nèi)存時,從鏈表的第一個空閑分區(qū)開始查找,將最先能夠滿足要求的空閑分區(qū)分配給進程。

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

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

Worst Fit算法按其容量從大到小的順序鏈接所有空閑分區(qū)。Two LevelSegregated Fit(TLSF)使用兩層鏈表來管理空閑內(nèi)存,將空閑分區(qū)大小進行分類,每一類用一個空閑鏈表表示,其中的空閑內(nèi)存大小都在某個特定值或者某個范圍內(nèi)。這樣存在多個空閑鏈表,所以又用一個索引鏈表來管理這些空閑鏈表,該表的每一項都對應(yīng)一種空閑鏈表,并記錄該類空閑鏈表的表頭指針。

第一層鏈表將空閑內(nèi)存塊的大小根據(jù)2的冪進行分類。第二層鏈表是具體的每一類空閑內(nèi)存塊按照一定的范圍進行線性分段。比如25這一類,以23即8分為4個內(nèi)存區(qū)間【25,25+8),【25+8,25+16),【25+16,25+24),【25+24,25+32);

216這一類,以214分為4個小區(qū)間【216,216+214),【216+214,216+2*214),【216+2*214,216+3*214),【216+3*214,216+4*214)。同時為了快速檢索到空閑塊。

每一層鏈表都有一個bitmap用于標記對應(yīng)的鏈表中是否有空閑塊,比如第一層bitmap后3位010,表示25這一類內(nèi)存區(qū)間有空閑塊。對應(yīng)的第二層bitmap為0100表示【25+16,25+24)這個區(qū)間有空閑塊,即下面的52Byte。Buddysystems(伙伴算法)

Segregated Fit算法的變種,具有更好的內(nèi)存拆分和回收合并效率。伙伴算法有很多種類,比如BinaryBuddies,F(xiàn)ibonacci Buddies等。Binary Buddies是最簡單也是最流行的一種,將所有空閑分區(qū)根據(jù)分區(qū)的大小進行分類,每一類都是具有相同大小的空閑分區(qū)的集合,使用一個空閑雙向鏈表表示。

BinaryBuddies中所有的內(nèi)存分區(qū)都是2的冪次方。因為無論是已分配的或是空閑的分區(qū),其大小均為 2 的冪次方,即使進程申請的內(nèi)存小于分配給它的內(nèi)存塊,多余的內(nèi)存也不會再拆分出來給其他進程使用,這樣就容易造成內(nèi)部碎片。當(dāng)進程申請一塊大小為n的內(nèi)存時的分配步驟為:

1、計算一個i值,使得2i-1《n≤2i

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

3、如果找到空閑塊,則分配給進程

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

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

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

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

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

編輯:jq

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

    關(guān)注

    68

    文章

    11033

    瀏覽量

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

    關(guān)注

    4

    文章

    578

    瀏覽量

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

    關(guān)注

    8

    文章

    1391

    瀏覽量

    116758
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7626

    瀏覽量

    90154

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

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

收藏 人收藏

    評論

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

    Linux系統(tǒng)中通過預(yù)留物理內(nèi)存實現(xiàn)ARM與FPGA高效通信的方法

    在嵌入式系統(tǒng)開發(fā)中,ARM 和 FPGA 之間的通信可以使用 ARM 側(cè)的 DDR 作為通道。由于 FPGA 也可以直接訪問到 ARM 側(cè) DDR,但 DDR 作為共享通信時,就不能被操作系統(tǒng)內(nèi)存
    的頭像 發(fā)表于 04-16 13:42 ?524次閱讀
    Linux<b class='flag-5'>系統(tǒng)</b>中通過預(yù)留物理<b class='flag-5'>內(nèi)存</b>實現(xiàn)ARM與FPGA高效通信的方法

    hyper v 內(nèi)存,hyper v 內(nèi)存設(shè)置的操作步驟和方法是什么?

    造成資源浪費,影響宿主機及其他虛擬機的性能。因此,掌握Hyper-V內(nèi)存設(shè)置的操作步驟和方法,對于高效使用虛擬機十分關(guān)鍵。下面就為大家詳細介紹。 ? ?Windows系統(tǒng)下的操作步驟
    的頭像 發(fā)表于 01-24 15:22 ?490次閱讀
    hyper v <b class='flag-5'>內(nèi)存</b>,hyper v <b class='flag-5'>內(nèi)存</b>設(shè)置的<b class='flag-5'>操作</b>步驟和方法是什么?

    虛擬內(nèi)存和云計算的關(guān)系

    虛擬內(nèi)存是一種計算機系統(tǒng)內(nèi)存管理技術(shù),它通過將物理內(nèi)存與磁盤空間結(jié)合起來,使得應(yīng)用程序可以訪問比物理內(nèi)
    的頭像 發(fā)表于 12-04 09:50 ?433次閱讀

    Linux下如何管理虛擬內(nèi)存 使用虛擬內(nèi)存時的常見問題

    在Linux系統(tǒng)中,虛擬內(nèi)存管理操作系統(tǒng)內(nèi)核的一個重要功能,負責(zé)管理物理內(nèi)存和磁盤上的交換空間
    的頭像 發(fā)表于 12-04 09:19 ?1228次閱讀

    虛擬內(nèi)存對計算機性能的影響

    在現(xiàn)代計算機系統(tǒng)中,內(nèi)存管理是確保系統(tǒng)高效運行的關(guān)鍵因素之一。虛擬內(nèi)存技術(shù)作為內(nèi)存
    的頭像 發(fā)表于 12-04 09:17 ?3172次閱讀

    什么是虛擬內(nèi)存分頁 Windows系統(tǒng)虛擬內(nèi)存優(yōu)化方法

    虛擬內(nèi)存分頁概述 在Windows操作系統(tǒng)中,虛擬內(nèi)存是通過分頁機制實現(xiàn)的。分頁允許系統(tǒng)內(nèi)存中的數(shù)據(jù)移動到硬盤上,以便為當(dāng)前運行的程序騰出
    的頭像 發(fā)表于 12-04 09:16 ?1266次閱讀

    虛擬內(nèi)存的作用和原理 如何調(diào)整虛擬內(nèi)存設(shè)置

    虛擬內(nèi)存,也稱為虛擬內(nèi)存管理或頁面文件,是計算機操作系統(tǒng)中的一種內(nèi)存管理技術(shù)。它允許
    的頭像 發(fā)表于 12-04 09:13 ?1991次閱讀

    如何優(yōu)化RAM內(nèi)存使用

    :使用任務(wù)管理器查看當(dāng)前運行的程序和服務(wù),關(guān)閉那些不需要的。 禁用啟動程序 :減少開機啟動項,只保留必要的程序。 2. 優(yōu)化操作系統(tǒng)設(shè)置 調(diào)整虛擬內(nèi)存 :合理設(shè)置虛擬內(nèi)存,避免過多占
    的頭像 發(fā)表于 11-11 09:58 ?1236次閱讀

    如何檢測電腦的RAM內(nèi)存

    和評估電腦的RAM內(nèi)存呢? 1. 通過操作系統(tǒng)檢測RAM 1.1 Windows系統(tǒng) 在Windows操作系統(tǒng)中,有幾種方法可以查看RAM信息: 任務(wù)
    的頭像 發(fā)表于 11-11 09:51 ?2157次閱讀

    內(nèi)存模組n/a怎么解決?

    提高計算機的性能。內(nèi)存模組通常以模塊形式存在,可以安裝在主板上的內(nèi)存插槽中。 1.2 內(nèi)存模組n/a問題的表現(xiàn) 當(dāng)內(nèi)存模組出現(xiàn)n/a問題時,計算機可能無法正常識別或使用
    的頭像 發(fā)表于 10-14 10:44 ?1993次閱讀

    Windows管理內(nèi)存的三種主要方式

    Windows操作系統(tǒng)提供了多種方式來管理內(nèi)存,以確保系統(tǒng)資源的有效利用和性能的優(yōu)化。以下是關(guān)于Windows管理
    的頭像 發(fā)表于 10-12 17:09 ?2188次閱讀

    前端總線與內(nèi)存頻率怎么配

    前端總線(FSB)與內(nèi)存頻率的配合是確保計算機系統(tǒng)穩(wěn)定運行并發(fā)揮最佳性能的關(guān)鍵因素之一。以下是對前端總線與內(nèi)存頻率配合關(guān)系的介紹: 一、前端總線與內(nèi)存頻率的
    的頭像 發(fā)表于 10-12 09:10 ?766次閱讀

    反射內(nèi)存卡驅(qū)動的安裝介紹

    反射內(nèi)存卡驅(qū)動的安裝通常遵循以下一般步驟,但具體過程可能因產(chǎn)品型號和操作系統(tǒng)的不同而有所差異:?1.準備工作 - 確認您的操作系統(tǒng)版本和體系結(jié)構(gòu)(32 位或 64 位)。 - 從反射內(nèi)存
    發(fā)表于 09-14 09:16 ?0次下載

    內(nèi)存時鐘和內(nèi)存條有什么不同

    在探討內(nèi)存時鐘(Memory Clock)和內(nèi)存條(Memory Module)的不同時,我們首先需要明確這兩個概念的基本定義和它們在計算機系統(tǒng)中的角色。以下是對這兩個
    的頭像 發(fā)表于 09-04 11:45 ?3028次閱讀

    操作系統(tǒng)內(nèi)存布局介紹

    32位操作系統(tǒng)內(nèi)存布局很經(jīng)典,很多書籍都是以32位系統(tǒng)為例子去講解的。32位的系統(tǒng)可訪問的地址空間為4GB,用戶空間為1GB ~ 3GB,內(nèi)核空間為3GB ~ 4GB。
    的頭像 發(fā)表于 08-07 15:47 ?770次閱讀
    <b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>內(nèi)存</b>布局介紹