虛擬地址到物理地址的映射

虛擬地址和物理地址
=========================================

    CPU通過地址來訪問內存中的單元,地址有虛擬地址和物理地址之分,如果CPU沒有MMU(Memory Management Unit, 內存管理單元),或者有MMU但沒有啓用,CPU核在取指令或訪問內存時發出的地址將
直接傳到CPU芯片的外部地址引腳上,直接被內存芯片(以下稱爲物理內存,以便與虛擬內存區分)接收,
這稱爲物理地址(Physical Address, 以下簡稱PA),如下圖所示:
圖1. 物理地址示意圖



    如果CPU啓用了MMU,CPU核發出的地址將被MMU截獲,從CPU到MMU的地址稱爲虛擬地址(Virtual Address, 以下簡稱VA),而MMU將這個地址翻譯成另一個地址發到CPU芯片的外部地址引腳上,也就是將
虛擬地址映射成物理地址,如下圖所示:
圖2. 虛擬地址示意圖



    MMU將虛擬地址映射到物理地址是以頁(Page)爲單位的,對於32位CPU通常一頁爲4K。例如,虛擬地址 0xB7001000~0xB7001FFF是一個頁,可能被MMU映射到物理地址0x2000~0x2FFF, 物理內存中的一個物理頁面也稱爲一個頁框(Page Frame)

    Datasheet中介紹各種寄存器時,所附帶的地址就是物理地址。

    既然虛擬地址最終要轉換爲物理地址,那麼爲何還需要虛擬地址呢?
      虛擬地址提供了權限檢查功能:比如我們設置虛擬地址和物理地址之間的映射關係時,可以設置某塊地址是隻讀的,只寫的,只有CPU處於管理模式時才能訪問等。這些功能可以讓系統的內核,用戶程序的運行空間相互獨立:用戶程序即使出錯,也無法破壞內核;用戶程序A崩潰了,也無法影響到用戶程序B。

 

當開啓分段分頁機制時,典型的x86尋址過程爲

 

            

        內存尋址的工作是由Linux內核和MMU共同完成的,其中Linux內核負責cr3,gdtr等寄存器的設置,頁表的維護,頁面的管理,MMU則進行具體的映射工作。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章