色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

虛擬內存到物理地址的轉換

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

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

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

處理器根據虛擬地址的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) (這就是為什么內存越大,頁表項也得越大,不然頁表項的內存就變大的) (表項存的是基地址,而虛擬內存放的都是索引)

圖片

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

4KB是2^12

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

這里還是討論32位

一級頁表4KB頁表--》4GB/4KB---》2^20個頁表項---》32位地址4Byte--》那么這個頁表需要4MB的連續內存

下圖展示兩個進程以及各自的頁表和物理內存的對應關系圖,這里假定頁大小是4K,32位地址總線進程地址空間大小為(2^32)4G,這時候頁表項有 4G /4K = 1048576個,每個頁表項為一個地址,占用4字節,1048576 * 4(B) /1024(M) =4M,也就是說一個程序啥都不干,頁表大小就得占用4M。

如果每個頁表項都存在對應的映射地址那也就算了,但是,絕大部分程序僅僅使用了幾個頁,也就是說,只需要幾個頁的映射就可以了,如下圖,進程1的頁表,只用到了0,1,1024三個頁,剩下1048573頁表項是空的,這就造成了巨大的浪費,為了避免內存浪費,計算機系統開發人員想出了一個方案,多級頁表。

圖片

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

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

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

總共的占用情況是 12K,相比一級頁表 4M,節省了99.7%的內存占用。

我們來看下兩級頁表為啥能夠節省這么大的內存空間,相比于上圖單級頁表中一對一的關系,兩級頁表中的一級頁表項是一對多的關系,這里是1:1024,這樣就需要 1048576 / 1024 = 1024 個一級頁表項。相當于把上圖的單級頁表分成1024份。一級頁表項PTE0表示虛擬地址頁 0 1023,PTE1表示虛擬地址頁10242047。

如果對應的1024個虛擬地址頁存在任意一個真實的映射,則一級頁表項指向一個二級頁表項,二級頁表項和虛擬地址頁一一對應,在上圖中,進程1的虛擬頁0,1,1024存在映射,0,1虛擬頁屬于這里的PTE0,1024屬于PTE1。一級頁表項中如果為null,表示對應的1024個虛擬頁沒有使用,所以就不需要二級頁表了,節省了空間。

當然,如果虛擬地址頁完全映射的話,多級頁表的占用=一級頁表項(1024 * 4B) + 二級頁表項(1024 * 1024 * 4B) = 4M +4K,比單級映射多了4K,不過這種情況基本上沒有可能,因為進程的地址空間很少有完全映射的情況。正是因為省卻了大量未映射的頁表項使得頁表的空間大幅減少。

圖片

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

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

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

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

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

那幾個特殊的位是內存的屬性。這個后面再補充。這個是ARM硬件架構上針對安全內存、設備內存的一些位。

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

    關注

    68

    文章

    19343

    瀏覽量

    230229
  • 寄存器
    +關注

    關注

    31

    文章

    5357

    瀏覽量

    120637
  • Linux
    +關注

    關注

    87

    文章

    11319

    瀏覽量

    209832
  • 內存
    +關注

    關注

    8

    文章

    3034

    瀏覽量

    74137
  • 物理地址
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6257
收藏 人收藏

    評論

    相關推薦

    鴻蒙內核源碼分析:物理地址的映射

    到不同的實際物理內存空間上。CPU只知道虛擬地址,向虛擬地址要數據,但在其保護模式下很悲催地址信號在路上被MMU攔截了,MMU把
    的頭像 發表于 11-03 10:28 ?2119次閱讀

    操作系統中的邏輯地址物理地址

    本文是關于操作系統中邏輯地址物理地址之間的區別。計算機操作系統中的內存使用兩種不同類型的地址物理地址
    發表于 09-14 14:26 ?4069次閱讀

    虛擬內存管理的地址是怎么分配的

    看書時看到了linux的虛擬內存管理:中間有用戶虛擬地址物理地址,總線地址,內核邏輯地址,內核虛擬地址
    發表于 05-22 05:45

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

    我對物理韻文的虛擬內存地址有點困惑。1。在編寫匯編程序和自定義鏈接器文件時,您在鏈接器中寫入的位置地址物理地址還是虛擬地址?2。當在組裝構
    發表于 11-07 11:30

    物理內存虛擬內存之間的轉換

    內存操作:涉及到了物理內存虛擬內存之間的轉換,需要用到兩個函數: ioremap 和 iounmap。ioremap :函 數 用 于 獲
    發表于 12-17 06:48

    虛擬內存物理地址有哪些區別

    在很久以前,還沒有虛擬內存概念的時候,程序尋址用的都是物理地址。程序能尋址的范圍是有限的,這取決于CPU的地址線條數。比如在32位平臺下,尋址的范圍是2^32也就是4G。并且這是固定的,如果沒有
    發表于 12-17 07:34

    物理地址虛擬地址轉換步驟

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址轉換虛擬地址,因為Linux使能了MMU,所以我們在Linux上不能直接操作物理地址。MMU使能了...
    發表于 12-24 07:42

    如何定義虛擬內存

    虛擬內存中。這是通過地址轉換完成的。圖4. 虛擬地址映射到虛擬物理
    發表于 04-11 10:20

    Linux虛擬內存物理內存的深刻分析

    ;vmalloc()的內存分配原理與用戶態的內存分配相似,都是通過連續的虛擬內存來訪問離散的物理內存,并且
    發表于 05-31 08:00

    RT-Thread smart內存虛擬地址物理地址轉換是一個什么樣的流程

    以rt-malloc為例,該函數在三個地方定義 slab.c memheap.c mem.c 從哪里可以看出來申請的是虛擬內存地址而不是物理內存地址,以全志F133 而在board.c 里面
    發表于 10-19 10:41

    用戶態得到虛擬地址對應的物理地址

    一般我們不需要從用戶態得到進程虛擬地址對應的物理地址,因為一般來說用戶進程是完全不關心物理地址的。
    的頭像 發表于 10-10 14:10 ?2521次閱讀
    用戶態得到<b class='flag-5'>虛擬地址</b>對應的<b class='flag-5'>物理地址</b>

    鴻蒙內核中虛擬地址物理地址之間是如何映射的

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

    Linux虛擬地址空間和物理地址空間的關系

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

    Linux虛擬地址物理地址轉換過程

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

    虛擬內存不足如何解決 虛擬內存物理內存的區別

    虛擬內存不足的解決方案 虛擬內存不足是計算機用戶經常遇到的問題,尤其是在運行大型軟件或多任務處理時。以下是一些解決虛擬內存不足問題的方法: 增加物理
    的頭像 發表于 12-04 09:14 ?470次閱讀
    主站蜘蛛池模板: 国产精品欧美久久久久天天影视 | 亚洲女初尝黑人巨磁链接| 国产成人精品视频| 喜马拉雅听书免费版| 久久精品国产亚洲AV蜜臀| a级销魂美女| 婷婷综合亚洲爱久久| 久久人人爽人人片AV人成| 哺乳期妇女挤奶水36d| 亚洲精品久久一区二区三区四区| 免费观看成人www精品视频在线| 高傲教师麻麻被同学调教123| 亚洲精品高清中文字幕完整版| 毛茸茸womansex| 国产精品无码人妻99999| 在线观看永久免费网址| 日本孕妇大胆孕交| 久久嫩草影院网站| 国产不卡视频在线| 最新国产在线视频| 无码骚夜夜精品| 美女挑战50厘米长的黑人| 国产女人乱人伦精品一区二区| 99福利影院| 亚洲精品AV无码永久无码| 欧美人妇无码精品久久| 精品日韩视频| 国产精品成人在线播放| 97色伦图片97色伦图影院久久| 性色香蕉AV久久久天天网| 全部老头和老太XXXXX| 久久国产露脸老熟女熟69| 国产精品VIDEOS麻豆TUBE| 99影视久久电影网久久看影院 | 99久久免费精品| 亚洲精品久久久久久蜜臀| 青青在线视版在线播放| 久久 这里只精品 免费| 国产精品一区二区欧美视频| 成人性生交片无码免费看| 中文字幕亚洲第一|