RM新时代网站-首页

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

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

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

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

如意 ? 來(lái)源:Linux學(xué)習(xí) ? 作者:佚名 ? 2020-08-28 11:04 ? 次閱讀

內(nèi)存使用場(chǎng)景

out of memory 的時(shí)代過(guò)去了嗎?no,內(nèi)存再充足也不可任性使用。

1、內(nèi)存的使用場(chǎng)景

page 管理

slab(kmalloc、內(nèi)存池)

用戶(hù)態(tài)內(nèi)存使用(malloc、relloc 文件映射、共享內(nèi)存)

程序的內(nèi)存 map(棧、堆、code、data)

內(nèi)核和用戶(hù)態(tài)的數(shù)據(jù)傳遞(copy_from_user、copy_to_user)

內(nèi)存映射(硬件寄存器、保留內(nèi)存)

DMA 內(nèi)存

2、用戶(hù)態(tài)內(nèi)存分配函數(shù)

alloca 是向棧申請(qǐng)內(nèi)存,因此無(wú)需釋放

malloc 所分配的內(nèi)存空間未被初始化,使用 malloc() 函數(shù)的程序開(kāi)始時(shí)(內(nèi)存空間還沒(méi)有被重新分配) 能正常運(yùn)行,但經(jīng)過(guò)一段時(shí)間后(內(nèi)存空間已被重新分配) 可能會(huì)出現(xiàn)問(wèn)題

calloc 會(huì)將所分配的內(nèi)存空間中的每一位都初始化為零

realloc 擴(kuò)展現(xiàn)有內(nèi)存空間大小

a) 如果當(dāng)前連續(xù)內(nèi)存塊足夠 realloc 的話(huà),只是將 p 所指向的空間擴(kuò)大,并返回 p 的指針地址。這個(gè)時(shí)候 q 和 p 指向的地址是一樣的

b) 如果當(dāng)前連續(xù)內(nèi)存塊不夠長(zhǎng)度,再找一個(gè)足夠長(zhǎng)的地方,分配一塊新的內(nèi)存,q,并將 p 指向的內(nèi)容 copy 到 q,返回 q。并將 p 所指向的內(nèi)存空間刪除

3、內(nèi)核態(tài)內(nèi)存分配函數(shù)

函數(shù)分配原理最大內(nèi)存其他_get_free_pages直接對(duì)頁(yè)框進(jìn)行操作4MB適用于分配較大量的連續(xù)物理內(nèi)存kmem_cache_alloc基于 slab 機(jī)制實(shí)現(xiàn)128KB適合需要頻繁申請(qǐng)釋放相同大小內(nèi)存塊時(shí)使用kmalloc基于 kmem_cache_alloc 實(shí)現(xiàn)128KB最常見(jiàn)的分配方式,需要小于頁(yè)框大小的內(nèi)存時(shí)可以使用vmalloc建立非連續(xù)物理內(nèi)存到虛擬地址的映射物理不連續(xù),適合需要大內(nèi)存,但是對(duì)地址連續(xù)性沒(méi)有要求的場(chǎng)合dma_alloc_coherent基于_alloc_pages 實(shí)現(xiàn)4MB適用于 DMA 操作ioremap實(shí)現(xiàn)已知物理地址到虛擬地址的映射適用于物理地址已知的場(chǎng)合,如設(shè)備驅(qū)動(dòng)alloc_bootmem在啟動(dòng) kernel 時(shí),預(yù)留一段內(nèi)存,內(nèi)核看不見(jiàn)小于物理內(nèi)存大小,內(nèi)存管理要求較高

4、malloc 申請(qǐng)內(nèi)存

調(diào)用 malloc 函數(shù)時(shí),它沿 free_chuck_list 連接表尋找一個(gè)大到足以滿(mǎn)足用戶(hù)請(qǐng)求所需要的內(nèi)存塊

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

free_chuck_list 連接表的主要工作是維護(hù)一個(gè)空閑的堆空間緩沖區(qū)鏈表

如果空間緩沖區(qū)鏈表沒(méi)有找到對(duì)應(yīng)的節(jié)點(diǎn),需要通過(guò)系統(tǒng)調(diào)用 sys_brk 延伸進(jìn)程的??臻g

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

5、缺頁(yè)異常

通過(guò) get_free_pages 申請(qǐng)一個(gè)或多個(gè)物理頁(yè)面

換算 addr 在進(jìn)程 pdg 映射中所在的 pte 地址

將 addr 對(duì)應(yīng)的 pte 設(shè)置為物理頁(yè)面的首地址

系統(tǒng)調(diào)用:Brk—申請(qǐng)內(nèi)存小于等于 128kb,do_map—申請(qǐng)內(nèi)存大于 128kb

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

6、用戶(hù)進(jìn)程訪(fǎng)問(wèn)內(nèi)存分析

用戶(hù)態(tài)進(jìn)程獨(dú)占虛擬地址空間,兩個(gè)進(jìn)程的虛擬地址可相同

在訪(fǎng)問(wèn)用戶(hù)態(tài)虛擬地址空間時(shí),如果沒(méi)有映射物理地址,通過(guò)系統(tǒng)調(diào)用發(fā)出缺頁(yè)異常

缺頁(yè)異常陷入內(nèi)核,分配物理地址空間,與用戶(hù)態(tài)虛擬地址建立映射

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

7、共享內(nèi)存

1) 原理

它允許多個(gè)不相關(guān)的進(jìn)程去訪(fǎng)問(wèn)同一部分邏輯內(nèi)存

兩個(gè)運(yùn)行中的進(jìn)程之間傳輸數(shù)據(jù),共享內(nèi)存將是一種效率極高的解決方案

兩個(gè)運(yùn)行中的進(jìn)程共享數(shù)據(jù),是進(jìn)程間通信的高效方法,可有效減少數(shù)據(jù)拷貝的次數(shù)

Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存使用場(chǎng)景

2) shm 接口

shmget 創(chuàng)建共享內(nèi)存

shmat 啟動(dòng)對(duì)該共享內(nèi)存的訪(fǎng)問(wèn),并把共享內(nèi)存連接到當(dāng)前進(jìn)程的地址空間

shmdt 將共享內(nèi)存從當(dāng)前進(jìn)程中分離
責(zé)編AJX

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

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209326
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3019

    瀏覽量

    74003
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6801

    瀏覽量

    123283
  • DNA
    DNA
    +關(guān)注

    關(guān)注

    0

    文章

    243

    瀏覽量

    31026
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    linux是實(shí)時(shí)系統(tǒng)還是分時(shí)操作系統(tǒng)

    大家平時(shí)玩單片機(jī)基本上對(duì)于μC/OS、FreeRTOS、ThreadX這些操作系統(tǒng)非常熟悉了,他們都屬于實(shí)時(shí)操作系統(tǒng)(RTOS),在工業(yè)領(lǐng)域比較廣泛;然而對(duì)于linux這樣的基于時(shí)間片劃分的非實(shí)時(shí)
    的頭像 發(fā)表于 11-11 11:43 ?421次閱讀

    嵌入式 Linux 操作系統(tǒng)配置

    隨著物聯(lián)網(wǎng)(IoT)和智能設(shè)備的快速發(fā)展,嵌入式系統(tǒng)在各個(gè)領(lǐng)域扮演著越來(lái)越重要的角色。Linux因其開(kāi)源、靈活和穩(wěn)定的特性,成為嵌入式系統(tǒng)的首選操作系統(tǒng)。 1. 硬件選擇 在配置嵌入式
    的頭像 發(fā)表于 11-06 10:22 ?333次閱讀

    linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點(diǎn)及組成

    Linux操作系統(tǒng)安裝步驟 Linux操作系統(tǒng)是一種開(kāi)源的操作系統(tǒng),它以其穩(wěn)定性、安全性和靈活性而聞名。以下是安裝
    的頭像 發(fā)表于 10-21 11:24 ?533次閱讀

    嵌入式linux開(kāi)發(fā)板怎么操作

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái)。它通常包括一個(gè)處理器、內(nèi)存、存儲(chǔ)器、輸入/輸出接口等硬件組件,以及一
    的頭像 發(fā)表于 09-02 09:09 ?371次閱讀

    Linux操作系統(tǒng)份額創(chuàng)歷史新高,逼近4.5%里程碑

    在最新的全球操作系統(tǒng)市場(chǎng)份額報(bào)告中,市調(diào)機(jī)構(gòu)StatCounter于8月27日發(fā)布了令人矚目的數(shù)據(jù):2024年7月,Linux系統(tǒng)實(shí)現(xiàn)了歷史性的飛躍,其市場(chǎng)份額首次逼近4.5%的關(guān)口,達(dá)到了4.44%的新高。這一成就標(biāo)志著
    的頭像 發(fā)表于 08-27 17:05 ?825次閱讀

    RTOS與Linux有什么區(qū)別

    RTOS(Real-Time Operating System,實(shí)時(shí)操作系統(tǒng))與Linux是兩種在不同應(yīng)用場(chǎng)景下發(fā)揮重要作用的操作系統(tǒng),它們?cè)谠O(shè)計(jì)理念、功能特性、應(yīng)
    的頭像 發(fā)表于 08-20 16:05 ?3447次閱讀

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

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

    工業(yè)實(shí)時(shí)操作系統(tǒng)對(duì)比:鴻道Intewell跟rt-linux有啥區(qū)別

    Intewell和RT-Linux是兩種不同的實(shí)時(shí)操作系統(tǒng)(RTOS),它們具有各自獨(dú)特的特點(diǎn)和優(yōu)勢(shì)。以下是Intewell操作系統(tǒng)的一些關(guān)鍵特性,以及與RT-Linux的比較:
    的頭像 發(fā)表于 07-03 10:00 ?518次閱讀
    工業(yè)實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>對(duì)比:鴻道Intewell跟rt-<b class='flag-5'>linux</b>有啥區(qū)別

    研華工控機(jī)用什么系統(tǒng)?Windows與Linux操作系統(tǒng)的較量

    兩大主流操作系統(tǒng),各自具有獨(dú)特的優(yōu)勢(shì)和應(yīng)用場(chǎng)景。本文將幫助你更好地理解它們的特點(diǎn),并做出明智的選擇。下面就隨蘇州研訊電子科技有限公司一起來(lái)看看吧。 Windows系統(tǒng) 提到Windows系統(tǒng)
    的頭像 發(fā)表于 06-14 14:38 ?687次閱讀
    研華工控機(jī)用什么<b class='flag-5'>系統(tǒng)</b>?Windows與<b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>的較量

    AURIX3G可以使用Linux操作系統(tǒng)嗎?

    即使在 AURIX3G 中,也可以使用 Linux 操作系統(tǒng)嗎?
    發(fā)表于 05-22 07:12

    服務(wù)器操作系統(tǒng)有幾種?

    操作系統(tǒng)細(xì)分化有許多,下邊給大伙兒詳細(xì)介紹的是至少的這種:CentOS 1、CentOS 5.6 2、CentOS 6.4 在Linux網(wǎng)絡(luò)服務(wù)器電腦操作系統(tǒng)下,CentOS是應(yīng)用場(chǎng)景
    發(fā)表于 03-29 16:59

    Linux操作系統(tǒng)上的射頻測(cè)試模式應(yīng)用指南

    電子發(fā)燒友網(wǎng)站提供《Linux操作系統(tǒng)上的射頻測(cè)試模式應(yīng)用指南.pdf》資料免費(fèi)下載
    發(fā)表于 02-19 09:39 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>上的射頻測(cè)試模式應(yīng)用指南

    linux和windows的區(qū)別 linux系統(tǒng)一般用來(lái)干嘛

    Linux和Windows是兩種不同的操作系統(tǒng),有著不同的設(shè)計(jì)理念和用途。本文將對(duì)Linux和Windows的區(qū)別進(jìn)行詳細(xì)分析,并介紹Linux系統(tǒng)
    的頭像 發(fā)表于 02-05 14:06 ?942次閱讀

    Linux操作系統(tǒng)中如何按下PCIe的復(fù)位鍵

    Linux操作系統(tǒng)中,看如何按下PCIe的復(fù)位鍵
    的頭像 發(fā)表于 01-20 09:31 ?1568次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統(tǒng)</b>中如何按下PCIe的復(fù)位鍵
    RM新时代网站-首页