最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

物理內(nèi)存組織結(jié)構(gòu)與模型

2022-08-02 21:30 作者:補給站Linux內(nèi)核  | 我要投稿

內(nèi)存管理在內(nèi)核中占據(jù)著舉足輕重的地位,畢竟它是用來處理處理器和內(nèi)存之間的協(xié)作的,而后兩者都是計算機中最為重要的資源。內(nèi)存管理的目標就是高效合理的使用物理內(nèi)存,不造成浪費。

1. 體系結(jié)構(gòu)


在計算機發(fā)展初期,如上圖,CPU通過總線訪問整個地址空間,這是一種簡單經(jīng)濟的方式,可以盡可能使用內(nèi)存。但是這個系統(tǒng)本身也存在伸縮性的問題,因為總線的寬度是有限的,這也限制了處理器的數(shù)量。如果添加CPU,會引起以下兩個問題

CPU增加,每個節(jié)點的可用帶寬會減少 CPU增加,總線長度會增加,進而增加了延遲 于是有了下面的系統(tǒng),如下圖,其中北橋芯片離CPU最近,在CPU與顯卡(PCIE/AGP)、內(nèi)存(DRAM)等建立通信接口,處理高速信號。南橋則負責一些I/O設備,通常速度相對前者不高。比如PCI、磁盤(IDE/SATA)、USB等。


目前管理物理內(nèi)存的方法主要有以下兩種

1.1 一致內(nèi)存訪問(Uniform Memory Access,UMA)

也稱為對稱多處理器(SMP) 內(nèi)存以連續(xù)的方式組織起來,每個CPU訪問各個內(nèi)存區(qū)都一樣快。CPU通過系統(tǒng)總線(前端總線)連到北橋(其中包含內(nèi)存控制器),與內(nèi)存之間的通信必然經(jīng)過北橋。IO控制器也連到北橋,IO必須通過北橋才能到達CPU。可以增加多個總線或者內(nèi)存通道增加帶寬。不過總的來將,UMA的這種伸縮性是有限的。

【文章福利】小編推薦自己的Linux內(nèi)核技術交流群:【891587639】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ?


1.2 非一致內(nèi)存訪問(Non-Unit Memory Access,NUMA)

每個CPU是平等的(系統(tǒng)啟動初始化除外),都有本地內(nèi)存,離著最近訪問速度最快。各個CPU之間通過總線連接,支持對其他CPU的訪問。如下圖,CPU不再共享北橋,而是獨有一個內(nèi)存控制器。


  1. 內(nèi)存模型 從處理器的角度看物理內(nèi)存分布,內(nèi)存管理子系統(tǒng)支持下面三種內(nèi)存模型

平坦內(nèi)存(Flat Memory):內(nèi)存的物理地址空間連續(xù),不存在空洞。如果物理地址空間不連續(xù),那要額外的分配頁來處理這些空洞,顯然這種情況下是低效的。 不連續(xù)內(nèi)存(Discontiguous Memory):如果物理地址空間存在空洞,相對平坦內(nèi)存能高效處理 稀疏內(nèi)存(Space Memory):物理地址空間存在空洞,并且支持熱拔插。

  1. 三級結(jié)構(gòu) 在NUMA,CPU被劃分為多個節(jié)點(node), 每個CPU對應一個本地物理內(nèi)存, 即一個CPU-node對應一個內(nèi)存node。 內(nèi)存管理系統(tǒng)通過節(jié)點(node),內(nèi)存域(zone)、頁幀(page)三級結(jié)構(gòu)描述物理內(nèi)存。首先,內(nèi)存劃分為節(jié)點,每個節(jié)點關聯(lián)一個CPU。各個節(jié)點又劃分為內(nèi)存域,各個內(nèi)存域都關聯(lián)了一個數(shù)組,用來組織屬于該內(nèi)存域的物理頁。UMA被當作只有一個NUMA的系統(tǒng)。

3.1 內(nèi)存節(jié)點

各個內(nèi)存節(jié)點保存在一個單鏈表中,供內(nèi)核遍歷。

3.2 內(nèi)存域

3.2.1 內(nèi)存區(qū)域類型

ZONE_DMA,直接內(nèi)存訪問,某些設備不能直接訪問內(nèi)存的,則需要DMA區(qū)域。 ZONE_DMA32,64位系統(tǒng),紀要支持直接訪問16MB以下的內(nèi)存設備,又要支持直接訪問4GB以下內(nèi)存的32位設備,需要使用此區(qū)域 ZONE_NORMAL,普通區(qū)域,直接映射到內(nèi)核虛擬地址空間的內(nèi)存區(qū)域,也稱線性映射區(qū)域 ZONE_HIGHMEM, 高端內(nèi)存區(qū)域,32位系統(tǒng)的產(chǎn)物,內(nèi)核地址空間只有1GB,于是就分出了低端內(nèi)存區(qū)域+高端內(nèi)存區(qū)域,高端內(nèi)存區(qū)域通過動態(tài)映射用來擴展內(nèi)存。 ZONE_MOVABLE,可移動區(qū)域,用來避免內(nèi)存碎片 ZONE_DEVICE,設備區(qū)域,為了支持持久內(nèi)存熱拔插而增加的內(nèi)存區(qū)域

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

3.3 頁幀(物理頁)

頁幀是系統(tǒng)內(nèi)存中的最小單位,每個頁都會對應有一個struct page的實例。一般位4KB。對應內(nèi)核結(jié)構(gòu)是struct page,里面有很多聯(lián)合體,這樣寫的原因是為了節(jié)省內(nèi)存。



物理內(nèi)存組織結(jié)構(gòu)與模型的評論 (共 條)

分享到微博請遵守國家法律
宁明县| 永泰县| 西峡县| 汉沽区| 黔西| 长岭县| 云霄县| 云梦县| 会昌县| 崇信县| 丘北县| 平潭县| 乐陵市| 大同县| 孟州市| 徐汇区| 合山市| 巴青县| 上林县| 班玛县| 芒康县| 苏尼特左旗| 盘山县| 萍乡市| 洪湖市| 兰州市| 读书| 河东区| 阜康市| 枣庄市| 晋州市| 承德县| 炉霍县| 天水市| 乌审旗| 囊谦县| 元氏县| 麦盖提县| 洮南市| 宁国市| 清河县|