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

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

3天內不再提示

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

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-08 11:45 ? 次閱讀

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

虛擬地址和物理地址都被劃分了兩部分:

圖片

虛擬地址由虛擬頁面號VPN和虛擬地址偏移VA offset兩部分組成。同樣,物理地址由物理頁幀號PFN和物理地址偏移PA offset兩部分組成。

虛擬地址轉換成物理地址時,需要將VPN轉成PFN。PA offset通常就是VA offset。

所以物理地址 = PFN + VA offset

這里的核心就是VPN到PFN的映射,而VPN到PFN的映射關系是通過頁表記錄。就是說,頁表存儲了VPN和PFN的映射關系,MMU根據VPN,在頁表中找到PFN,再把PFN和VA offset相加,就得到了物理地址,從而將虛擬地址轉為物理地址。

這里要區(qū)分一下,頁表存儲了VA到PA的映射關系,所以說找到頁表就找到了物理地址。但是這個頁表是軟件提供的,MMU只負責將虛擬地址翻譯成物理地址,翻譯的依據就是頁表,MMU本身不負責創(chuàng)建頁表。所以說,在開啟MMU之前,系統(tǒng)就要提前建立好虛擬地址到物理地址的映射關系,然后保存到頁表中,這樣開啟MMU時,MMU才能正確找到對應的物理地址。

頁表在哪

頁表都存儲在物理內存中, MMU將虛擬地址轉換為物理地址,需要訪問物理內存中對應的頁表。

實際上,頁表通常就是用一個數組來表示。

這里可能會一些疑問:

疑問:放到物理內存,每次轉換都要訪問內存,速度不慢嗎?

答:慢。怎么解決呢?如果有cache是不是就很快了?是的,這塊cache就叫TLB。

疑問:都放到物理內存,占用物理內存空間不大嗎?

答:大,怎么解決?多級頁表+缺頁異常!多級頁表可以減少內存占用,而通常只需將一級頁表存儲到物理內存,查找的時候,找不到二級頁表,觸發(fā)一個缺頁異常,這時再分配頁表,從而節(jié)省內存。

關于頁表放到物理內存的問題,涉及到cache和其他的一些知識,內容很多且比較復雜,暫時不深究,知道頁表是放在內存中的即可。

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

    關注

    87

    文章

    11161

    瀏覽量

    208462
  • 內存
    +關注

    關注

    8

    文章

    2942

    瀏覽量

    73728
  • MMU
    MMU
    +關注

    關注

    0

    文章

    91

    瀏覽量

    18236
收藏 人收藏

    評論

    相關推薦

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

    本文是關于操作系統(tǒng)中邏輯地址物理地址之間的區(qū)別。計算機操作系統(tǒng)中的內存使用兩種不同類型的地址;物理地址是內存的實際地址,如RAM,
    發(fā)表于 09-14 14:26 ?3784次閱讀

    請問ARM虛擬地址 物理地址 加載地址 運行地址的聯系是什么?

    簡單的理解:ARM的加載地址即程序在Flash的存儲位置。運行地址即內存中運行時的位置。虛擬地址物理地址在MMU中映射,那么這四者之間的聯系是什么?
    發(fā)表于 04-25 03:16

    為什么MMU的地址映射中物理地址會跳變?

    關于MMU的地址映射,32位的cpu有4G的虛擬地址空間,將它分為4096個小塊,每個小塊是1M,用描述符進行虛擬地址物理地址之間關系的建立。問題在上圖中,進行0xA0000000
    發(fā)表于 08-22 05:45

    linux虛擬地址如何轉物理地址

    linux虛擬地址物理地址
    發(fā)表于 05-13 09:31

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

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

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

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

    linux kernel實現物理地址虛擬地址空間的切換方法

    1、arm linux 臨時頁表的建立linux kernel的主要特點之一就是運行在虛擬地址空間上,但是怎么才能實現物理地址
    發(fā)表于 05-13 10:21

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

    ,rt_system_heap_init(RT_HW_HEAP_BEGIN,RT_HW_HEAP_END);RT_HW_HEAP_BEGIN RT_HW_HEAP_END 兩個是物理地址。所以我實在理解不了虛擬地址
    發(fā)表于 10-19 10:41

    用戶態(tài)得到虛擬地址對應的物理地址

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

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

    內存空間上。CPU只知道虛擬地址,向虛擬地址要數據,但在其保護模式下很悲催地址信號在路上被MMU攔截了,MMU把虛擬地址換成了物理地址,從而
    發(fā)表于 11-19 14:45 ?9次下載
    鴻蒙內核中<b class='flag-5'>虛擬地址</b>與<b class='flag-5'>物理地址</b>之間是如何映射的

    虛擬地址物理地址等眾多地址及MMU相關知識

    虛擬地址物理地址等眾多地址及MMU相關知識先聊聊存儲器STM32單片機存儲器關于編譯器生成的文件數據在存儲器上的存儲結構物理地址、虛擬地址、
    發(fā)表于 12-08 12:36 ?12次下載
    <b class='flag-5'>虛擬地址</b><b class='flag-5'>物理地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關知識

    虛擬地址翻譯物理地址的流程有哪些呢?

    現代的操作系統(tǒng)將可執(zhí)行文件加載后,創(chuàng)建了進程,進程中每一條指令和數據都被分配了一個虛擬地址,CPU獲取到這個虛擬地址后,需要翻譯成內存的物理地址后,才能訪問指令和數據
    的頭像 發(fā)表于 08-14 10:30 ?1099次閱讀
    <b class='flag-5'>虛擬地址</b>翻譯<b class='flag-5'>物理地址</b>的流程有哪些呢?

    Linux系統(tǒng)為什么需要引入虛擬地址

    ,這 4GB 的內存空間按照 3:1 的比例進行分配,其中用戶進程享有 3G 的空間,而內核獨自享有剩下的1G 空間,如下所示: 虛擬地址會通過硬件MMU(內存管理單元)映射到實際的物理地址空間中,建立虛擬地址
    的頭像 發(fā)表于 10-07 17:28 ?856次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)為什么需要引入<b class='flag-5'>虛擬地址</b>

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

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

    linux系統(tǒng)查看物理地址

    Linux系統(tǒng)中,訪問和查看物理地址是一個非常重要的任務,因為它提供了對硬件設備的直接訪問。本文將詳細介紹如何在Linux系統(tǒng)中查看物理地址,包括不同的方法和工具,以及如何解釋和使用
    的頭像 發(fā)表于 11-16 16:47 ?3085次閱讀