在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Linux內(nèi)存管理學習筆記

Linux閱碼場 ? 來源:CSDN博主安全-Hkcoco ? 2023-10-30 14:14 ? 次閱讀

1、硬件角度

大家都曾經(jīng)看過那個紙上打孔,記錄數(shù)據(jù)的圖片。

后來都知道出現(xiàn)了內(nèi)存器,我們執(zhí)行指令分為加載+運行。

最開始的程序運行時只能跑一個進程的,那就不需要復雜的內(nèi)存管理,把我弄到固定的位置,然后這片區(qū)域都是我的。而且有多大的內(nèi)存我就用多大的,一旦我進程想用的內(nèi)存比擁有的物理內(nèi)存大的時候,崩了就完事了。

特點:單進程 單操作系統(tǒng) 直接使用物理內(nèi)存

這樣的問題隨著時代的發(fā)展問題就來了。

問題一 :單進程用不完資源那不是浪費?

問題二 :我要是物理內(nèi)存不夠,又沒錢升級硬件怎么辦?

問題三 :因為我的軟件直接操作接觸的物理內(nèi)存,這個和硬件靠的太近,我們都知道移植性就查了?

隨著發(fā)展單進程肯定是不符合要求的,那么怎么辦?多進程(腦子里先把進程調(diào)度的事情放下,focu內(nèi)存方面)。

多進程之間的這個內(nèi)存怎么處理,總不能讓騰訊的數(shù)據(jù)訪問到快播的吧,想象你正在看劇,突然內(nèi)容變成了學習內(nèi)容,怕怕。為了解決這個問題,在操作系統(tǒng)編譯的時候主存劃分了很多的靜態(tài)分區(qū)。有進程的時候,你就看看哪里能放下你,你去那里待著。

于是問題又來了

1、程序大小那不是必須和分區(qū)匹配,起碼不能比分區(qū)小

2、這個進程的數(shù)目那就是固定了啊,那不是買電腦還得多一個電腦能跑多少個進程的參數(shù)

3、地址空間固定,進程不能膨脹啊。(想想咱們平時LOL,不運行的時候幾個G,運行起來幾百個,那肯肯定是玩不了了)

4、進程之間的邊界真的能控制的很好嗎?現(xiàn)在這么完備的內(nèi)存管理下還經(jīng)常出現(xiàn)內(nèi)存踩踏時間。

解決方法就是前輩們整了個動態(tài)的分區(qū),就是給操作系統(tǒng)整一個分區(qū),剩下的有進程時,需要多大分割多大。這樣一整,敏感的你就知道了,分割多了,那不是內(nèi)存的這個空洞就多了,碎片就多了,那咋整呢。得規(guī)整內(nèi)存,只能遷移進程了,遷移進程你不可能做,只能操作系統(tǒng)了,而這個過程很消耗時間(自己磁盤整理過的都知道哈),需要大量數(shù)據(jù)的換入換出。尤其是在進程運行的時候內(nèi)存不夠了,然后你得去遷移,等個一個小時,電腦我都想砸了。

遷移只有這個進程的位置也變了,這個尋址方式就算是相對尋址,那個相對的對象總是絕對的,因此程序編寫你就說頭疼不。(兩數(shù)之和已經(jīng)夠頭疼了,還有心情去管理內(nèi)存重定位)

同時當這個程序是惡意的,那我不是就可以為所欲為,因為大家都是直接對應的物理內(nèi)存,我偏不去我該去的地方,我就在你工作的時候來騷擾你一下,你就說怕不怕。

于是這幾個問題:

內(nèi)存保護、內(nèi)存運行重定位、使用效率低下無法忍受懶惰是催促科技進步的源動力

1、解決辦法 level1 - 分段機制

為了解決進程間內(nèi)存保護的問題,提出了虛擬內(nèi)存。通過增加一層虛擬內(nèi)存,進程訪問虛擬內(nèi)存,虛擬內(nèi)存由操作系統(tǒng)映射到物理內(nèi)存。對于進程來說它就不需要關(guān)系實際的物理地址,當訪問到?jīng)]有映射的物理內(nèi)存時,操作系統(tǒng)會捕捉到這個微法操作。同時進程是使用的虛擬內(nèi)存,因為程序也具有移植性但是啊進程就算是操作虛擬內(nèi)存但是最后也是映射到物理內(nèi)存,如果給進程映射的物理內(nèi)存不夠的時候,那還是得遷移。換出到磁盤進行遷移,粒度是整個進程,這么大的io肯定很漫長。想想一個程序中的數(shù)據(jù),在不斷的運行使用的只有那么一部分,于是把常用的放在內(nèi)存,不常用的放在磁盤中。那么換入換出的就是那么一少部分數(shù)據(jù)。然后這里就創(chuàng)建了更細的粒度–分頁機制想想為什么你的電腦內(nèi)存條才8個G卻能跑幾十G的游戲。

2、解決辦法 level2 - 分頁機制

現(xiàn)在我們知道分頁粒度很細。進程的虛擬地址、硬件的物理地址都按照分頁的粒度。常用的代碼和數(shù)據(jù)以頁留在內(nèi)存,不常用的去磁盤,這樣就節(jié)省了物理內(nèi)存(內(nèi)存那么貴)進程的虛擬內(nèi)存頁通過CPU的硬件單元映射到物理內(nèi)存頁物理頁稱為物理頁面或者頁幀進程空間的虛擬頁面稱為虛擬頁操作系統(tǒng)為了管控這些物理頁面,給頁幀創(chuàng)建了編號頁幀號 PFN現(xiàn)在的頁表常見的4KB最常見,還有16K、64K。在某些特點的場景下,比如那種超大服務(wù)器系統(tǒng)TB量級,可能頁面是M或者G級別。

到這里就說說那個CPU的硬件單元

其實雖然什么不想做的事情都扔給操作系統(tǒng),但是做人不能這么狗,尤其是內(nèi)存管理這么嚴重的事情,還有就是安全性(我這樣認為),于是用過CPU的硬件單元–MMU來管控這個內(nèi)存的映射。

66494840-76d4-11ee-939d-92fbcf53809c.jpg

ARM處理器的內(nèi)存管理單元包括TLB和Table Walk Unit兩個部件。

TLB是一塊高速緩存,用于緩存頁表轉(zhuǎn)換的結(jié)果,從而減少內(nèi)存訪問的時間。就拿緩存的概念去理解。當TLB 沒有,miss了。那我就只能去內(nèi)存的轉(zhuǎn)換頁表中獲取這個映射的結(jié)果,獲取到對應的物理地址后再將我的虛擬地址換成物理地址去最終的目的地查看學習資料。(有沒有中玩游戲闖關(guān)的感覺)

當然不是說有個這個玩意就什么不用做了。

一個完整的頁表翻譯和查找的過程叫作頁表查詢(Translation Table Walk),頁表查詢的過程由硬件自動完成,但是頁表的維護需要軟件來完成。

頁表查詢是一個相對耗時的過程,理想的狀態(tài)是TLB里緩存有頁表轉(zhuǎn)換的相關(guān)信息。當TLB未命中時,才會去查詢頁表,并且開始讀入頁表的內(nèi)容。(要是這個TLB整大點,不是可以加快,不考慮錢的話)

因此頁表的維護是軟件的,所以在Linux內(nèi)核內(nèi)存的學習中,后面會有內(nèi)存初始化,創(chuàng)建頁表這些東西。

3、虛擬內(nèi)存到物理地址的轉(zhuǎn)換

上面那個圖里面,如果是TLBs命中后就直接拿到了物理地址,去兌換獎品,但是miss掉以后,那就得走Table Walk Uint就是得頁表轉(zhuǎn)換,VA–>PA(V:虛擬 P:物理 A:地址)

整個流程瞅瞅?

6653e5fc-76d4-11ee-939d-92fbcf53809c.jpg

處理器根據(jù)頁表基地址控制寄存器TTBCR和虛擬地址來判斷使用哪個頁表基地址寄存器,是TTBR0還是TTBR1。(一個基值是內(nèi)核的,一個用戶態(tài)的)

頁表基地址寄存器中存放著一級頁表的基地址。

處理器根據(jù)虛擬地址的bit[31:20]作為索引值()4K頁表,在一級頁表中找到頁表項。一級頁表一共有4 096個頁表項。

第一級頁表的表項中存放有二級頁表的物理基地址。處理器將虛擬地址的 bit[19:12]作為索引值,在二級頁表中找到相應的頁表項。二級頁表有256個頁表項(2^12 * 2^8 * 4kb(2^12)==》32位)。

二級頁表的頁表項里存放有 4KB 頁的物理基地址,加上最后的VA 12位,因此處理器就完成了頁表的查詢和翻譯工作。

(將整個4MB分成了4096份* 256份*4KB)
(這就是為什么內(nèi)存越大,頁表項也得越大,不然頁表項的內(nèi)存就變大的)
(表項存的是基地址,而虛擬內(nèi)存放的都是索引)

665ea906-76d4-11ee-939d-92fbcf53809c.jpg

圖 7.4 所示為 4KB 映射的一級頁表的表項,bit[1:0]表示一個頁映射的表項,bit[31:10]指向二級頁表的物理基地址。

4KB是2^12

64位的ARM 一般常用的是48,那么只剩36位(其他的位干啥了呢,記住這個問題哈哈哈)

這里還是討論32位

66713292-76d4-11ee-939d-92fbcf53809c.png

下圖展示兩個進程以及各自的頁表和物理內(nèi)存的對應關(guān)系圖,這里假定頁大小是4K,32位地址總線進程地址空間大小為(2^32)4G,這時候頁表項有 4G / 4K = 1048576個,每個頁表項為一個地址,占用4字節(jié),1048576 * 4(B) /1024(M) = 4M,也就是說一個程序啥都不干,頁表大小就得占用4M。如果每個頁表項都存在對應的映射地址那也就算了,但是,絕大部分程序僅僅使用了幾個頁,也就是說,只需要幾個頁的映射就可以了,如下圖,進程1的頁表,只用到了0,1,1024三個頁,剩下的1048573頁表項是空的,這就造成了巨大的浪費,為了避免內(nèi)存浪費,計算機系統(tǒng)開發(fā)人員想出了一個方案,多級頁表。

6674d168-76d4-11ee-939d-92fbcf53809c.png

我們先看下圖,這是一個兩級頁表,對應上圖中的進程1。先計算下兩級頁表的內(nèi)存占用情況。

一級頁表占用= 1024 * 4 B= 4K,

2級頁表占用 = (1024 * 4 B) * 2 = 8K。

總共的占用情況是 12K,相比一級頁表 4M,節(jié)省了99.7%的內(nèi)存占用。

我們來看下兩級頁表為啥能夠節(jié)省這么大的內(nèi)存空間,相比于上圖單級頁表中一對一的關(guān)系,兩級頁表中的一級頁表項是一對多的關(guān)系,這里是1:1024, 這樣就需要 1048576 / 1024 = 1024 個一級頁表項。相當于把上圖的單級頁表分成1024份。一級頁表項PTE0表示虛擬地址頁01023,PTE1表示虛擬地址頁10242047。如果對應的1024個虛擬地址頁存在任意一個真實的映射,則一級頁表項指向一個二級頁表項,二級頁表項和虛擬地址頁一一對應,在上圖中,進程1的虛擬頁0,1,1024存在映射,0,1虛擬頁屬于這里的PTE0,1024屬于PTE1。一級頁表項中如果為null,表示對應的1024個虛擬頁沒有使用,所以就不需要二級頁表了,節(jié)省了空間。當然,如果虛擬地址頁完全映射的話,多級頁表的占用=一級頁表項(1024 * 4B) + 二級頁表項(1024 1024 4B) = 4M + 4K,比單級映射多了4K,不過這種情況基本上沒有可能,因為進程的地址空間很少有完全映射的情況。正是因為省卻了大量未映射的頁表項使得頁表的空間大幅減少。

66892172-76d4-11ee-939d-92fbcf53809c.png

其實這個差異就是我以前一來就把全部的虛擬頁表和物理頁表建立了映射關(guān)系,那我這個頁表就需要4M。

現(xiàn)在我將這個4M的頁表分成了1024份,需要幾份就申請創(chuàng)建幾份頁表,而不是一來就把所有的頁表都和物理頁面掛上鉤。

然后分成了這1024個,我需要在抽象一層4kb的頁表去指向這1024個頁表各自的基地址。

因為從物理內(nèi)存層面一層一層的提到最上層的時候,也方便我們對于這個虛擬地址的組成:

一級頁表索引+二級頁表索引+VA(每次頁表的內(nèi)容都是下一基的基地址)

(這個圖片稍微有點理想,一般都是4096 + 256的組合,而不是1014 + 1024的組合,不過大概這個道理就行)

那幾個特殊的位是內(nèi)存的屬性。這個后面再補充。這個是ARM硬件架構(gòu)上針對安全內(nèi)存、設(shè)備內(nèi)存的一些位。

審核編輯:湯梓紅

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

    關(guān)注

    87

    文章

    11479

    瀏覽量

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

    關(guān)注

    37

    文章

    7113

    瀏覽量

    125116
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3825

    瀏覽量

    82569
  • 內(nèi)存管理
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    14510

原文標題:Linux內(nèi)存管理宏觀篇(一):不同角度去看內(nèi)存(硬件)

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

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

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個非常復雜的過程,主要分成兩個大的部分:內(nèi)核的
    的頭像 發(fā)表于 05-11 17:54 ?6471次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>詳解

    內(nèi)存管理學習筆記分享

    物理內(nèi)存分配設(shè)計有兩個重要的評價維度。一方面,物理內(nèi)存分配器要追求更高的內(nèi)存資源利用率,即盡可能減少資源浪費。另一方面,物理內(nèi)存分配器要追求更好的性能,主要是盡可能降低分配延遲和節(jié)約C
    的頭像 發(fā)表于 01-06 14:53 ?1997次閱讀

    SGS管理學

    `SGS管理學院`
    發(fā)表于 08-26 15:15

    《深入理解LINUX內(nèi)存管理學習筆記

    《深入理解LINUX內(nèi)存管理學習筆記1
    發(fā)表于 11-07 10:20

    賽思互動:管理學最重要的八大定理

    管理學第二原理必須回答的的問題,這也就是意志強度定理。 意志強度定理界定的是意志強度發(fā)展變化的規(guī)律,這規(guī)律直接表現(xiàn)為“兩個正比”關(guān)系。可為什么會存在這樣“兩個正比”關(guān)系?這還得補充說明一下人的行為
    發(fā)表于 08-08 09:21

    郝健Linux內(nèi)存管理學習筆記分享

    郝健 Linux內(nèi)存管理學習筆記-第3節(jié)課
    發(fā)表于 06-10 08:55

    Linux內(nèi)存管理學習筆記-第2節(jié)課

    郝健 Linux內(nèi)存管理學習筆記-第2節(jié)課
    發(fā)表于 06-11 15:56

    關(guān)于stm32內(nèi)存架構(gòu)的分析和理解

    #stm32內(nèi)存架構(gòu)及管理##計算機內(nèi)存管理學習stm32內(nèi)存管理的時候有些云里霧里,網(wǎng)上也看了
    發(fā)表于 01-20 06:13

    UCOSIII任務(wù)管理學習筆記

    UCOSIII 系統(tǒng)(STM32任務(wù)管理學習筆記UCOSIII 系統(tǒng)學習筆記一、UCOSIII 任務(wù)
    發(fā)表于 02-14 07:37

    管理學基礎(chǔ)期末試卷

    2004年1月“開放本科”管理學基礎(chǔ)期末試卷.doc2004年7月“開放本科”管理學基礎(chǔ)期末試卷.doc
    發(fā)表于 03-15 23:40 ?14次下載

    西安交通大學管理學院項目時間管理

    西安交通大學管理學院項目時間管理:6.1進度計劃6.2進度控制6.1.1項目時間管理的內(nèi)容6.1.2項目時間管理的方法項目時間管理定義&nb
    發(fā)表于 05-07 21:17 ?0次下載

    蠶業(yè)生產(chǎn)經(jīng)營管理學教學大鋼

    蠶業(yè)生產(chǎn)經(jīng)營管理學教學大鋼:蠶業(yè)生產(chǎn)經(jīng)營管理學》教學大鋼課程名稱:蠶業(yè)生產(chǎn)經(jīng)營管理學            
    發(fā)表于 06-25 23:23 ?24次下載

    管理學院提升教學效能質(zhì)量實施辦法

    管理學院提升教學效能質(zhì)量實施辦法 壹、 實施目的:為提升本校教學效能,增進學生學習成效,共構(gòu)致遠團體榮譽與研究氛圍,并達到教學正常化之目標。
    發(fā)表于 01-30 15:03 ?5次下載

    臺灣體育運動管理學會優(yōu)良論文評選獎勵辦法

    臺灣體育運動管理學會優(yōu)良論文評選獎勵辦法壹、主旨一、 提升國內(nèi)運動管理相關(guān)學術(shù)論文之質(zhì)量。二、 增加本會辦理學術(shù)研討會及出版刊物稿件之質(zhì)量。三、 鼓勵本
    發(fā)表于 02-01 15:12 ?12次下載

    致遠管理學院提升教學效能質(zhì)量實施辦法.

    致遠管理學院提升教學效能質(zhì)量實施辦法. 壹、 貳、 實施目的:為提升本校教學效能,增進學生學習成效,共構(gòu)致遠團體榮譽與研究氛圍,并達到教學正常化之目標。
    發(fā)表于 02-01 15:14 ?13次下載
    主站蜘蛛池模板: 中文字幕一区二区三区免费视频 | 好黄好猛好爽好痛的视频 | 97久久天天综合色天天综合色hd | 久久毛片视频 | 亚洲美女啪啪 | 狠狠色综合久久久久尤物 | 操碰视频在线观看 | 国产精品九九久久一区hh | 欧美一级鲁丝片 | 干中文字幕 | 国产福利不卡一区二区三区 | 色.www| 搜索黄色录像 | 自偷自拍亚洲欧美清纯唯美 | 欧美人与物另类 | 一区二区三区四区视频在线观看 | 日本.www| 全免费一级午夜毛片 | 亚洲综合丁香婷婷六月香 | 国模一区二区三区私啪啪 | 狠狠色噜噜狠狠狠狠91 | 操视频网站| 四虎精品影院2022 | 亚洲精品视频专区 | 四虎国产精品视频免费看 | 天天干天天拍天天射 | 婷婷精品视频 | 日本大片免费一级 | 美女被免网站在线视频 | h视频在线观看免费网站 | 久久久久免费 | 五月婷婷六月天 | 亚洲男人的天堂成人 | 男人cao女人视频在线观看 | 大色综合色综合资源站 | 午夜影音 | 三级三级三级网站网址 | 色哥网站 | 亚洲人成人网毛片在线播放 | 加勒比日本在线 | 久久精品人人做人人看 |