虛擬位址 線性位址 邏輯位址

2021-06-27 10:11:38 字數 1502 閱讀 8593

邏輯位址(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通過查詢段表,可以把邏輯位址轉化為線性位址

邏輯位址 ----(段表)---> 線性位址 — (頁表)—> 實體地址

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

實體地址 虛擬位址 邏輯位址 線性位址

實際計算機的物理記憶體的位址,為32位或者64位。常見的記憶體條就是一類ram 隨機儲存儲存器,特點就是加電狀態下可任意讀寫,斷電後資訊消失 現代os都提供一技術 虛擬記憶體 virtual memory 它可以使給使用者錯覺好像自己在使用比實際物理記憶體大得多的記憶體,實際上通過對映把虛擬記憶體的...

實體地址 虛擬位址 線性位址以及邏輯位址

是記憶體中的記憶體單元實際位址,是記憶體中每個記憶體單元的編號,這個編號是順序排好的,實體地址的大小決定了記憶體中有多少個記憶體單元,實體地址的大小由位址匯流排的位寬決定。虛擬位址是cpu保護模式下的乙個概念,保護模式是80286系列和之後的x86相容cpu操作模式,在cpu引導完作業系統核心後,作...

關於虛擬位址,線性位址,邏輯位址還有實體地址的區分

本文主要是參考linux0.11核心的32位位址區分,不過於現階段的64位位址區分差別不太大,理解linux0.11,有助於理解現階段的64位體系下位址的概念。注意x86體系是小端存放資料 理位址上 如果開啟分頁機制,還需要經過分頁才能對應上實體地址 虛擬地 位址所剩下的位址就是邏輯位址。應用程式設...