當前位置:
首頁 > 知識 > 操作系統 內存地址(邏輯地址、線性地址、物理地址)概念

操作系統 內存地址(邏輯地址、線性地址、物理地址)概念

邏輯地址(Logical Address) 是指由程序產生的與段相關的偏移地址部分。例如,你在進行C語言指針編程中,可以讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,它是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel 保護模式下程序執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全一樣)。應用程序員僅需與邏輯地址打交道,而分段和分頁機制對您來說是完全透明的,僅由系統編程人員涉及。應用程序員雖然自己可以直接操作內存,那也只能在操作系統給你分配的內存段操作。

線性地址(Linear Address) 是邏輯地址到物理地址變換之間的中間層。程序代碼會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那麼線性地址可以再經變換以產生一個物理地址。若沒有啟用分頁機制,那麼線性地址直接就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方即32根地址匯流排定址)。

物理地址(Physical Address) 是指出現在CPU外部地址匯流排上的定址物理內存的地址信號,是地址變換的最終結果地址。如果啟用了分頁機制,那麼線性地址會使用頁目錄和頁表中的項變換成物理地址。如果沒有啟用分頁機制,那麼線性地址就直接成為物理地址了。

虛擬內存(Virtual Memory) 是指計算機呈現出要比實際擁有的內存大得多的內存量。因此它允許程序員編製並運行比實際系統擁有的內存大得多的程序。這使得許多大型項目也能夠在具有有限內存資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓一列火車從上海開到北京。你只需要足夠長的鐵軌(比如說3公里)就可以完成這個任務。採取的方法是把後面的鐵軌立刻鋪到火車的前面,只要你的操作足夠快並能滿足要求,列車就能象在一條完整的軌道上運行。這也就是虛擬內存管理需要完成的任務。在Linux 0.11內核中,給每個程序(進程)都劃分了總容量為64MB的虛擬內存空間。因此程序的邏輯地址範圍是0x0000000到0x4000000。

有時我們也把邏輯地址稱為虛擬地址。因為與虛擬內存空間的概念類似,邏輯地址也是與實際物理內存容量無關的。

邏輯地址與物理地址的「差距」是0xC0000000,是由於虛擬地址->線性地址->物理地址映射正好差這個值。這個值是由操作系統指定的。

虛擬地址到物理地址的轉化方法是與體系結構相關的。一般來說有分段、分頁兩種方式。以現在的x86 cpu為例,分段分頁都是支持的。Memory Mangement Unit負責從虛擬地址到物理地址的轉化。邏輯地址是段標識+段內偏移量的形式,MMU通過查詢段表,可以把邏輯地址轉化為線性地址。如果cpu沒有開啟分頁功能,那麼線性地址就是物理地址;如果cpu開啟了分頁功能,MMU還需要查詢頁表來將線性地址轉化為物理地址:

邏輯地址 ----(段表)---> 線性地址 — (頁表)—> 物理地址

不同的邏輯地址可以映射到同一個線性地址上;不同的線性地址也可以映射到同一個物理地址上;所以是多對一的關係。另外,同一個線性地址,在發生換頁以後,也可能被重新裝載到另外一個物理地址上。所以這種多對一的映射關係也會隨時間發生變化。

---------------------

作者:weixin_34150830

原文:https://blog.csdn.net/weixin_34150830/article/details/85121978

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

操作系統 內存地址(邏輯地址、線性地址、物理地址)概念

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Crunch團隊分享SpringCloud微服務的使用經驗
探索SpringMVC4中靜態資源的訪問鏈路

TAG:程序員小新人學習 |