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

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

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

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

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

麥辣雞腿堡 ? 來(lái)源:TrustZone ? 作者:TrustZone ? 2023-10-30 17:34 ? 次閱讀

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

頁(yè)表基地址寄存器中存放著一級(jí)頁(yè)表的基地址。

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

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

二級(jí)頁(yè)表的頁(yè)表項(xiàng)里存放有 4KB 頁(yè)的物理基地址,加上最后的VA 12位,因此處理器就完成了頁(yè)表的查詢和翻譯工作。(將整個(gè)4MB分成了4096份256份4KB) (這就是為什么內(nèi)存越大,頁(yè)表項(xiàng)也得越大,不然頁(yè)表項(xiàng)的內(nèi)存就變大的) (表項(xiàng)存的是基地址,而虛擬內(nèi)存放的都是索引)

圖片

圖 7.4 所示為 4KB 映射的一級(jí)頁(yè)表的表項(xiàng),bit[1:0]表示一個(gè)頁(yè)映射的表項(xiàng),bit[31:10]指向二級(jí)頁(yè)表的物理基地址。

4KB是2^12

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

這里還是討論32位

一級(jí)頁(yè)表4KB頁(yè)表--》4GB/4KB---》2^20個(gè)頁(yè)表項(xiàng)---》32位地址4Byte--》那么這個(gè)頁(yè)表需要4MB的連續(xù)內(nèi)存

下圖展示兩個(gè)進(jìn)程以及各自的頁(yè)表和物理內(nèi)存的對(duì)應(yīng)關(guān)系圖,這里假定頁(yè)大小是4K,32位地址總線進(jìn)程地址空間大小為(2^32)4G,這時(shí)候頁(yè)表項(xiàng)有 4G /4K = 1048576個(gè),每個(gè)頁(yè)表項(xiàng)為一個(gè)地址,占用4字節(jié),1048576 * 4(B) /1024(M) =4M,也就是說(shuō)一個(gè)程序啥都不干,頁(yè)表大小就得占用4M。

如果每個(gè)頁(yè)表項(xiàng)都存在對(duì)應(yīng)的映射地址那也就算了,但是,絕大部分程序僅僅使用了幾個(gè)頁(yè),也就是說(shuō),只需要幾個(gè)頁(yè)的映射就可以了,如下圖,進(jìn)程1的頁(yè)表,只用到了0,1,1024三個(gè)頁(yè),剩下1048573頁(yè)表項(xiàng)是空的,這就造成了巨大的浪費(fèi),為了避免內(nèi)存浪費(fèi),計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)人員想出了一個(gè)方案,多級(jí)頁(yè)表。

圖片

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

一級(jí)頁(yè)表占用= 1024 * 4 B= 4K,

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

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

我們來(lái)看下兩級(jí)頁(yè)表為啥能夠節(jié)省這么大的內(nèi)存空間,相比于上圖單級(jí)頁(yè)表中一對(duì)一的關(guān)系,兩級(jí)頁(yè)表中的一級(jí)頁(yè)表項(xiàng)是一對(duì)多的關(guān)系,這里是1:1024,這樣就需要 1048576 / 1024 = 1024 個(gè)一級(jí)頁(yè)表項(xiàng)。相當(dāng)于把上圖的單級(jí)頁(yè)表分成1024份。一級(jí)頁(yè)表項(xiàng)PTE0表示虛擬地址頁(yè) 0 1023,PTE1表示虛擬地址頁(yè)10242047。

如果對(duì)應(yīng)的1024個(gè)虛擬地址頁(yè)存在任意一個(gè)真實(shí)的映射,則一級(jí)頁(yè)表項(xiàng)指向一個(gè)二級(jí)頁(yè)表項(xiàng),二級(jí)頁(yè)表項(xiàng)和虛擬地址頁(yè)一一對(duì)應(yīng),在上圖中,進(jìn)程1的虛擬頁(yè)0,1,1024存在映射,0,1虛擬頁(yè)屬于這里的PTE0,1024屬于PTE1。一級(jí)頁(yè)表項(xiàng)中如果為null,表示對(duì)應(yīng)的1024個(gè)虛擬頁(yè)沒(méi)有使用,所以就不需要二級(jí)頁(yè)表了,節(jié)省了空間。

當(dāng)然,如果虛擬地址頁(yè)完全映射的話,多級(jí)頁(yè)表的占用=一級(jí)頁(yè)表項(xiàng)(1024 * 4B) + 二級(jí)頁(yè)表項(xiàng)(1024 * 1024 * 4B) = 4M +4K,比單級(jí)映射多了4K,不過(guò)這種情況基本上沒(méi)有可能,因?yàn)檫M(jìn)程的地址空間很少有完全映射的情況。正是因?yàn)槭s了大量未映射的頁(yè)表項(xiàng)使得頁(yè)表的空間大幅減少。

圖片

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

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

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

因?yàn)閺奈锢韮?nèi)存層面一層一層的提到最上層的時(shí)候,也方便我們對(duì)于這個(gè)虛擬地址的組成:

一級(jí)頁(yè)表索引+二級(jí)頁(yè)表索引+VA(每次頁(yè)表的內(nèi)容都是下一基的基地址) (這個(gè)圖片稍微有點(diǎn)理想,一般都是4096 + 256的組合,而不是1014 +
1024的組合,不過(guò)大概這個(gè)道理就行)

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

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

    關(guān)注

    68

    文章

    19169

    瀏覽量

    229155
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5322

    瀏覽量

    120019
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11230

    瀏覽量

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

    關(guān)注

    8

    文章

    3002

    瀏覽量

    73887
  • 物理地址
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6241
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙內(nèi)核源碼分析:物理地址的映射

    到不同的實(shí)際物理內(nèi)存空間上。CPU只知道虛擬地址,向虛擬地址要數(shù)據(jù),但在其保護(hù)模式下很悲催地址信號(hào)在路上被MMU攔截了,MMU把
    的頭像 發(fā)表于 11-03 10:28 ?2063次閱讀

    操作系統(tǒng)中的邏輯地址物理地址

    本文是關(guān)于操作系統(tǒng)中邏輯地址物理地址之間的區(qū)別。計(jì)算機(jī)操作系統(tǒng)中的內(nèi)存使用兩種不同類型的地址物理地址
    發(fā)表于 09-14 14:26 ?3894次閱讀

    虛擬內(nèi)存管理的地址是怎么分配的

    看書(shū)時(shí)看到了linux的虛擬內(nèi)存管理:中間有用戶虛擬地址物理地址,總線地址,內(nèi)核邏輯地址,內(nèi)核虛擬地址
    發(fā)表于 05-22 05:45

    PIC32在編寫(xiě)匯編程序和自定義鏈接器文件時(shí)位置地址物理地址還是虛擬地址

    我對(duì)物理韻文的虛擬內(nèi)存地址有點(diǎn)困惑。1。在編寫(xiě)匯編程序和自定義鏈接器文件時(shí),您在鏈接器中寫(xiě)入的位置地址物理地址還是虛擬地址?2。當(dāng)在組裝構(gòu)
    發(fā)表于 11-07 11:30

    【HarmonyOS】虛擬地址<->物理地址是如何映射的

    到不同的實(shí)際物理內(nèi)存空間上。CPU只知道虛擬地址,向虛擬地址要數(shù)據(jù),但在其保護(hù)模式下很悲催地址信號(hào)在路上被MMU攔截了,MMU把
    發(fā)表于 11-03 16:20

    物理內(nèi)存虛擬內(nèi)存之間的轉(zhuǎn)換

    內(nèi)存操作:涉及到了物理內(nèi)存虛擬內(nèi)存之間的轉(zhuǎn)換,需要用到兩個(gè)函數(shù): ioremap 和 iounmap。ioremap :函 數(shù) 用 于 獲
    發(fā)表于 12-17 06:48

    虛擬內(nèi)存物理地址有哪些區(qū)別

    在很久以前,還沒(méi)有虛擬內(nèi)存概念的時(shí)候,程序?qū)ぶ酚玫亩际?b class='flag-5'>物理地址。程序能尋址的范圍是有限的,這取決于CPU的地址線條數(shù)。比如在32位平臺(tái)下,尋址的范圍是2^32也就是4G。并且這是固定的,如果沒(méi)有
    發(fā)表于 12-17 07:34

    物理地址虛擬地址轉(zhuǎn)換步驟

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址轉(zhuǎn)換虛擬地址,因?yàn)長(zhǎng)inux使能了MMU,所以我們?cè)贚inux上不能直接操作物理地址。MMU使能了...
    發(fā)表于 12-24 07:42

    如何定義虛擬內(nèi)存

    虛擬內(nèi)存中。這是通過(guò)地址轉(zhuǎn)換完成的。圖4. 虛擬地址映射到虛擬物理
    發(fā)表于 04-11 10:20

    Linux虛擬內(nèi)存物理內(nèi)存的深刻分析

    ;vmalloc()的內(nèi)存分配原理與用戶態(tài)的內(nèi)存分配相似,都是通過(guò)連續(xù)的虛擬內(nèi)存來(lái)訪問(wèn)離散的物理內(nèi)存,并且
    發(fā)表于 05-31 08:00

    RT-Thread smart內(nèi)存虛擬地址物理地址轉(zhuǎn)換是一個(gè)什么樣的流程

    以rt-malloc為例,該函數(shù)在三個(gè)地方定義 slab.c memheap.c mem.c 從哪里可以看出來(lái)申請(qǐng)的是虛擬內(nèi)存地址而不是物理內(nèi)存地址,以全志F133 而在board.c 里面
    發(fā)表于 10-19 10:41

    用戶態(tài)得到虛擬地址對(duì)應(yīng)的物理地址

    一般我們不需要從用戶態(tài)得到進(jìn)程虛擬地址對(duì)應(yīng)的物理地址,因?yàn)橐话銇?lái)說(shuō)用戶進(jìn)程是完全不關(guān)心物理地址的。
    的頭像 發(fā)表于 10-10 14:10 ?2480次閱讀
    用戶態(tài)得到<b class='flag-5'>虛擬地址</b>對(duì)應(yīng)的<b class='flag-5'>物理地址</b>

    鴻蒙內(nèi)核中虛擬地址物理地址之間是如何映射的

    虛擬地址(VA):?就是線性地址?鴻蒙內(nèi)存部分全是VA的身影?是由編譯器和鏈接器在定位程序時(shí)分配的,每個(gè)應(yīng)用程序都使用相同的虛擬內(nèi)存地址空間,而這些
    發(fā)表于 11-19 14:45 ?9次下載
    鴻蒙內(nèi)核中<b class='flag-5'>虛擬地址</b>與<b class='flag-5'>物理地址</b>之間是如何映射的

    Linux虛擬地址空間和物理地址空間的關(guān)系

    很多人接觸Linux的內(nèi)存管理是從malloc()這個(gè)C語(yǔ)言庫(kù)函數(shù)開(kāi)始,也是從那時(shí)開(kāi)始就知道了虛擬內(nèi)存的概念。但很多人可能并不知道虛擬地址是如何轉(zhuǎn)換
    的頭像 發(fā)表于 10-08 11:40 ?1128次閱讀
    Linux<b class='flag-5'>虛擬地址</b>空間和<b class='flag-5'>物理地址</b>空間的關(guān)系

    Linux虛擬地址物理地址轉(zhuǎn)換過(guò)程

    虛擬地址物理地址轉(zhuǎn)換過(guò)程 虛擬地址物理地址都被劃分了兩部分: 虛擬地址
    的頭像 發(fā)表于 10-08 11:45 ?1854次閱讀
    Linux<b class='flag-5'>虛擬地址</b>到<b class='flag-5'>物理地址</b><b class='flag-5'>轉(zhuǎn)換</b>過(guò)程