精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

內存的基本概念以及操作系統的內存管理算法

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

本文主要介紹內存的基本概念以及操作系統的內存管理算法

一、內存的基本概念

內存是計算機系統中除了處理器以外最重要的資源,用于存儲當前正在執行的程序和數據。內存是相對于CPU來說的,CPU可以直接尋址的存儲空間叫做內存,CPU需要通過驅動才能訪問的叫做外存。

二、ROM&RAM&Flash

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

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

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

從分配內存是否連續,可以分為兩大類。

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

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

當前的操作系統,普遍采用非連續內存管理方式。不過因為分配粒度較大,對于內存較小的嵌入式系統,一般采用連續內存管理。本文主要對嵌入式系統中常用的連續內存管理的分區式內存管理進行介紹。

四、分區式內存管理分區式內存管理分為固定分區和動態分區。固定分區

事先就把內存劃分為若干個固定大小的區域。分區大小既可以相等也可以不等。固定分區易于實現,但是會造成分區內碎片浪費,而且分區總數固定,限制了可以并發執行的進程數量。

動態分區根據進程的實際需要,動態地給進程分配所需內存。

五、動態分區內存管理運作機制

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

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

數據結構

空閑鏈表法有多種數據結構實現,這里介紹一種較為簡單的數據結構。每個空閑分區的數據結構中包含分區的大小,以及指向前一個分區和后一個分區的指針,這樣就能將各個空閑分區鏈接成一個雙向鏈表。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10825

    瀏覽量

    211151
  • ROM
    ROM
    +關注

    關注

    4

    文章

    562

    瀏覽量

    85676
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1367

    瀏覽量

    114531
  • 計算機
    +關注

    關注

    19

    文章

    7421

    瀏覽量

    87718

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

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何優化RAM內存使用

    :使用任務管理器查看當前運行的程序和服務,關閉那些不需要的。 禁用啟動程序 :減少開機啟動項,只保留必要的程序。 2. 優化操作系統設置 調整虛擬內存 :合理設置虛擬內存,避免過多占
    的頭像 發表于 11-11 09:58 ?175次閱讀

    如何檢測電腦的RAM內存

    和評估電腦的RAM內存呢? 1. 通過操作系統檢測RAM 1.1 Windows系統 在Windows操作系統中,有幾種方法可以查看RAM信息: 任務
    的頭像 發表于 11-11 09:51 ?206次閱讀

    內存模組n/a怎么解決?

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

    Windows管理內存的三種主要方式

    Windows操作系統提供了多種方式來管理內存,以確保系統資源的有效利用和性能的優化。以下是關于Windows管理
    的頭像 發表于 10-12 17:09 ?413次閱讀

    前端總線與內存頻率怎么配

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

    內存時鐘和內存條有什么不同

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

    操作系統內存布局介紹

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

    探秘嵌入式操作系統中的內存管理算法

    內存一般采用半導體存儲單元,分為只讀存儲器(ROM,Read Only Memory)、隨機存儲器(RAM,Random Access Memory)ROM一般只能讀取不能寫入,掉電后其中的數據也不會丟失。
    發表于 04-28 12:33 ?754次閱讀
    探秘嵌入式<b class='flag-5'>操作系統</b>中的<b class='flag-5'>內存</b><b class='flag-5'>管理算法</b>

    系統內存和運行內存的區別

    系統內存和運行內存都是計算機中重要的概念,它們在計算機的存儲和運行方面起著不可或缺的作用。雖然它們與計算機存儲和運行息息相關,但是它們具有不同的功能和實現方式。接下來我將詳細介紹
    的頭像 發表于 01-15 16:32 ?3114次閱讀

    Linux內核內存管理架構解析

    內存管理系統可能是linux內核中最為復雜的一個子系統,其支持的功能需求眾多,如頁面映射、頁面分配、頁面回收、頁面交換、冷熱頁面、緊急頁面、頁面碎片
    的頭像 發表于 01-04 09:24 ?635次閱讀
    Linux內核<b class='flag-5'>內存</b><b class='flag-5'>管理</b>架構解析

    FreeRTOS內存機制詳解

    FreeRTOS是一種實時操作系統,它提供了多種內存分配方式,包括動態內存分配和靜態內存分配。
    的頭像 發表于 12-31 16:49 ?2549次閱讀
    FreeRTOS<b class='flag-5'>內存</b>機制詳解

    段式存儲管理和頁式存儲管理的區別

    段式存儲管理和頁式存儲管理操作系統中兩種常見的內存管理技術,它們在物理內存的分配和
    的頭像 發表于 12-30 17:17 ?4607次閱讀
    段式存儲<b class='flag-5'>管理</b>和頁式存儲<b class='flag-5'>管理</b>的區別

    單片機操作系統有哪些

    單片機操作系統(RTOS)是一種專門設計用于單片機的操作系統,它可以提供任務調度、內存管理、設備驅動等功能,幫助程序員更高效地開發嵌入式系統
    的頭像 發表于 12-08 16:18 ?4922次閱讀

    jvm內存模型和內存結構

    內存模型是指Java程序在運行時,JVM對內存空間的組織和管理方式。它包括了線程私有的部分和線程共享的部分。 線程私有部分 線程私有部分主要包含了棧(Stack)和程序計數器(Program Counter Register)。
    的頭像 發表于 12-05 11:08 ?894次閱讀

    為什么使用top命令時,Redis還是占了很多內存

    實際上,這是因為,當數據刪除后,Redis 釋放的內存空間會由內存分配器管理,并不會立即返回給操作系統。所以,操作系統仍然會記錄著給 Red
    的頭像 發表于 12-01 09:25 ?615次閱讀
    為什么使用top命令時,Redis還是占了很多<b class='flag-5'>內存</b>?