国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux內存管理 | 四、物理地址空間設計模型

這篇具有很好參考價值的文章主要介紹了Linux內存管理 | 四、物理地址空間設計模型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)
我的圈子: 高級工程師聚集地
我是董哥,高級嵌入式軟件開發(fā)工程師,從事嵌入式Linux驅動開發(fā)和系統(tǒng)開發(fā),曾就職于世界500強企業(yè)!
創(chuàng)作理念:專注分享高質量嵌入式文章,讓大家讀有所得!
Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

前面幾篇文章,主要講解了虛擬內存空間的布局和管理,下面同步來聊聊物理內存空間的布局和管理。

順便介紹一下 我的圈子:高級工程師聚集地,期待大家的加入。

1、物理內存

什么是物理內存?

我們平時聊的內存,也叫隨機訪問存儲器(random-access memory),也叫RAM

RAM分為兩類:

  • SRAM:靜態(tài)RAM,其主要用于CPU高速緩存 L1Cache,L2Cache,L3Cache,其特點是訪問速度快,訪問速度為 1 - 30 個時鐘周期,但是容量小,造價高。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

  • DRAM:動態(tài)RAM,其主要用于我們常說的主存上,其特點的是訪問速度慢(相對高速緩存),訪問速度為 50 - 200 個時鐘周期,但是容量大,造價便宜些(相對高速緩存)。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

DRAM經(jīng)過組合起來,就作為我們的計算機內存,也是物理內存。

?

2、物理內存訪問模型

上面介紹了物理內存的基本組成,那么CPU是如何訪問物理內存的呢?

對于CPU訪問物理內存,Linux提供了兩種架構:UMA(Uniform Memory Access)一致內存訪問,NUMA(Non-Uniform Memory Access)非一致內存訪問。

2.1 UMA

UMA架構下,多核處理器中的多個CPU,位于總線的一側,所有的內存條組成的物理內存位于總線的另一側。

所有的CPU訪問內存都要經(jīng)過總線,并且距離都是一樣的,所以在UMA架構下,所有CPU具有相同的訪問特性,即對內存的訪問具有相同的速度。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

2.2 NUMA

這種架構,系統(tǒng)中的各個處理器都有本地內存,處理器與處理器之間也通過總線連接,以便于其他處理器對本地內存的訪問。

UMA不同的是,處理器訪問本地內存的速度要快于對其他處理器本地內存的訪問。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

3、物理內存組織模型

內存頁是物理內存管理中最小單位,有時也成為頁幀(Page Frame)。

內核對物理內存劃分為一頁一頁的連續(xù)的內存塊,每頁大小4KB,并且使用struct page結構體來表示頁結構,其中封裝了每個頁的狀態(tài)信息,包括:組織結構,使用信息,統(tǒng)計信息等。

page結構體較為復雜,我們后續(xù)再深入了解。

?

3.1 FLATMEM平坦內存模型

FLATMEM即:flat memory model。

我們把物理內存想象成它是由連續(xù)的一頁一頁的塊組成的,我們從0開始對物理頁編號,這樣每個物理頁都會有頁號。

由于物理地址是連續(xù)的,頁也是連續(xù)的,每個頁大小也是一樣的。因而對于任何一個地址,只要直接除一下每頁的大小,很容易直接算出在哪一頁。

如果是這樣,整個物理內存的布局就非常簡單、易管理,這就是最經(jīng)典的平坦內存模型(Flat Memory Model)。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

如上圖,平坦內存模型中,內核使用一個mem_map的全局數(shù)組,來組織所有劃分出來的物理內存頁,下標由PFN表示。

在平坦內存模型下 ,page_to_pfnpfn_to_page 的計算邏輯就非常簡單,本質就是基于 mem_map 數(shù)組進行偏移操作。

#ifndef ARCH_PFN_OFFSET
#define ARCH_PFN_OFFSET		(0UL)
#endif

#if defined(CONFIG_FLATMEM)
#define __pfn_to_page(pfn) (mem_map + ((pfn)-ARCH_PFN_OFFSET))
#define __page_to_pfn(page) ((unsigned long)((page)-mem_map) + ARCH_PFN_OFFSET)
#endif

ARCH_PFN_OFFSETPFN 的起始偏移量。

?

3.2 DISCONTIGMEM 不連續(xù)內存模型

DISCONTIGMEM即:discontiguous memory model。

我們早期內核使用的是FLATMEM模型,該模型對于較小的,連續(xù)的物理空間是方便使用的,但是當物理內存不連續(xù)時,使用mem_map管理,就會出現(xiàn)空洞,這會浪費mem_map數(shù)組本身占用的內存空間。

對于NUMA訪問內存模型,物理內存分布就是不連續(xù)的,為了有效管理,DISCONTIGMEM 不連續(xù)內存模型出現(xiàn)了。

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

在不連續(xù)的物理內存中,DISCONTIGMEM不連續(xù)內存模型,將物理內存分成了一個個的node,然后每個node管理一塊連續(xù)的物理內存,連續(xù)的物理內存仍然使用FLATMEM平坦內存模型來管理,從而避免了內存空洞的浪費。

我們可以看出 DISCONTIGMEM 非連續(xù)內存模型其實就是 FLATMEM 平坦內存模型的一種擴展。

DISCONTIGMEM是個稍縱即逝的內存模型,在SPARSEMEM出現(xiàn)后即被完全替代。

?

3.3 SPARSEMEM稀疏內存模型

隨著內存技術的發(fā)展,內核可以支持物理內存的熱插拔了(像我們的內存條,可以直接插入拔出),這樣不連續(xù)物理內存已然稱為常態(tài)。

SPARSEMEM稀疏內存模型的核心思想就是對粒度更小的連續(xù)內存塊進行精細的管理,用于管理連續(xù)內存塊的單元被稱作 section 。

物理頁大小為 4k 的情況下, section 的大小為 128M ,物理頁大小為 16k 的情況下, section 的大小為 512M。

?

在內核中,使用struct mem_section結構體表示SPARSEMEM模型中的section

struct mem_section {
	unsigned long section_mem_map;
        ...
}
  • 每個mem_section管理一片小的,物理內存連續(xù)的區(qū)域,并且支持對該區(qū)域的offline/online狀態(tài)

  • 所有的mem_section都保存在一個全局數(shù)組中

整體的框架如下:

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)

SPARSEMEM 稀疏內存模型下 page_to_pfnpfn_to_page 的計算邏輯又發(fā)生了變化。

#if defined(CONFIG_SPARSEMEM)
/*
 * Note: section's mem_map is encoded to reflect its start_pfn.
 * section[i].section_mem_map == mem_map's address - start_pfn;
 */
#define __page_to_pfn(pg)					\
({	const struct page *__pg = (pg);				\
	int __sec = page_to_section(__pg);			\
	(unsigned long)(__pg - __section_mem_map_addr(__nr_to_section(__sec)));	\
})

#define __pfn_to_page(pfn)				\
({	unsigned long __pfn = (pfn);			\
	struct mem_section *__sec = __pfn_to_section(__pfn);	\
	__section_mem_map_addr(__sec) + __pfn;		\
})
#endif
  • page_to_pfn 的轉換中,首先需要通過 page_to_section 根據(jù) struct page 結構定位到 mem_section 數(shù)組中具體的 section 結構。然后在通過 section_mem_map 定位到具體的 PFN。
  • pfn_to_page 的轉換中,首先需要通過 __pfn_to_section 根據(jù) PFN 定位到 mem_section 數(shù)組中具體的 section 結構。然后在通過 PFNsection_mem_map 數(shù)組中定位到具體的物理頁 Page 。

?

4、總結

以上,我們先對物理內存空間有一個基礎的了解,明白物理內存空間的內存訪問模型和組織模型,下面我們再詳細介紹物理內存空間的布局和管理。

點贊+關注,永遠不迷路文章來源地址http://www.zghlxwxcb.cn/news/detail-721218.html

Linux內存管理 | 四、物理地址空間設計模型,Linux內存管理,1024程序員節(jié),Linux驅動開發(fā),Linux內存管理,內存管理,Linux內核開發(fā)
歡迎關注 公號&星球【嵌入式藝術】,董哥原創(chuàng)!

到了這里,關于Linux內存管理 | 四、物理地址空間設計模型的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 2.3.1操作系統(tǒng)-存儲管理:頁式存儲、邏輯地址、物理地址、物理地址邏輯地址之間的地址關系、頁面大小與頁內地址長度的關系、缺頁中斷、內存淘汰規(guī)則

    2.3.1操作系統(tǒng)-存儲管理:頁式存儲、邏輯地址、物理地址、物理地址邏輯地址之間的地址關系、頁面大小與頁內地址長度的關系、缺頁中斷、內存淘汰規(guī)則

    在存儲管理當中,操作系統(tǒng)會負責將外存的一些文件調入到內存當中,以便給CPU調用,如果調用的內容不在內存當中,那么會產(chǎn)生一種中斷,叫做缺頁中斷。然后從外存調數(shù)據(jù),調完數(shù)據(jù)再返回,接著訪問之前的斷點部分。 在調用的過程當中,如果是一個幾十G的文件,調入

    2024年02月03日
    瀏覽(26)
  • 吃透進程地址空間,理清OS內存管理機制

    吃透進程地址空間,理清OS內存管理機制

    Hello,大家好。本文要給大家?guī)淼氖怯嘘PLinux中的進程地址空間的講解 首先我們來看著一張圖,相信有學習過 C/C++內存管理 的同學一定可以清楚下面的這張圖。知道內存中劃分了很多的區(qū)域,包括 棧區(qū)、堆區(qū)、靜態(tài)區(qū)、只讀常量區(qū)、代碼段、共享區(qū)等等 。 但是呢卻不知道

    2024年02月08日
    瀏覽(20)
  • HBase(18):表空間設計之ROWKEY設計原則

    1 HBase官方的設計原則 1.1 避免使用遞增行鍵/時序數(shù)據(jù) 如果ROWKEY設計的都是按照順序遞增(例如:時間戳),這樣會有很多的數(shù)據(jù)寫入時,負載都在一臺機器上。我們盡量應當將寫入大壓力均衡到各個RegionServer 1.2 避免ROWKEY和列的長度過大 在HBase中,要訪問一個Cell(單元格)

    2024年02月12日
    瀏覽(18)
  • 【Linux】進程地址空間(帶你認清內存的本質)

    【Linux】進程地址空間(帶你認清內存的本質)

    ??? ??????? 歡迎來到小林的博客!! ?????????博客主頁:??小林愛敲代碼 ?????????博客專欄:??Linux之路 ?????????社區(qū) :?? 進步學堂 ?????????歡迎關注:??點贊??收藏??留言 我們在學習C語言的時候,應該都知道這

    2024年02月07日
    瀏覽(24)
  • ACE通信設計空間指導

    通信是網(wǎng)絡應用程序設計的基礎。本章就通信設計空間做了領域分析,介紹了網(wǎng)絡應用程序之間互相作用的規(guī)則、形式和抽象層次。 本章我們將討論一下設計空間: 所謂協(xié)議,就是一組規(guī)則,用來指定“控制信息”和“數(shù)據(jù)信息”如何在通信實體(譬如,在網(wǎng)絡計算環(huán)境內部

    2024年02月10日
    瀏覽(19)
  • HBase(15):表結構設計之名稱空間

    1 說明 在一個項目中,需要使用HBase保存多張表,這些表會按照業(yè)務域來劃分 為了方便管理,不同的業(yè)務域以名稱空間(namespace)來劃分,這樣管理起來會更加容易 類似于Hive中的數(shù)據(jù)庫,不同的數(shù)據(jù)庫下可以放不同類型的表 HBase默認的名稱空間是「default」,默認情況下,創(chuàng)建

    2024年02月14日
    瀏覽(20)
  • 3維空間下按平面和圓柱面上排版設計

    AR空間中將若干平面窗口排列在指定平面或圓柱體面上 平面排版思路 指定平面方向向量layout_centre ,平面上的一點作為排版版面的中心layout_position

    2024年02月13日
    瀏覽(24)
  • 一分鐘圖情論文:《關于圖書館空間嗅覺設計的探討》

    嗅覺設計是空間設計的一環(huán),探討嗅覺設計在圖書館空間領域內的應用,可以為圖書館空間建設提供新思路,雖然現(xiàn)在國內的空間嗅覺設計從理論指導到實際運行還未完全成熟,但優(yōu)秀的嗅覺設計為公共文化空間所帶來的積極、正面的影響不容忽視。吳夢菲在《關于圖書館空

    2024年02月02日
    瀏覽(27)
  • 基于微信小程序的考研空間站的設計與實現(xiàn)

    隨著互聯(lián)網(wǎng)發(fā)展速度的加快,各行各業(yè)都在考慮利用互聯(lián)網(wǎng)管理信息,微信小程序應用也憑借特有的開放性、開源性等優(yōu)點被人們青睞。而目前,國內考研學生數(shù)量持續(xù)大幅增長,對考研信息平臺和相關輔導機構的需求也每日劇增,線下考研輔導機構與考生之間并不能很好的

    2024年02月01日
    瀏覽(22)
  • Diffie-Hellman協(xié)議中間人攻擊方法及協(xié)議改進(網(wǎng)絡空間安全實踐與設計)

    Diffie-Hellman協(xié)議中間人攻擊方法及協(xié)議改進(網(wǎng)絡空間安全實踐與設計)

    資源下載地址:https://download.csdn.net/download/sheziqiong/85628255 資源下載地址:https://download.csdn.net/download/sheziqiong/85628255 第一階段:Diffie-Hellman 協(xié)議的實現(xiàn) 客戶端與服務器之間通過 TCP Socket 通信; 客戶端與服務器之間通過 Diffie-Hellman 協(xié)議協(xié)商出對稱密鑰; 客戶端使用協(xié)商出的對

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包