虛擬地址、線性地址和物理地址的轉換

虛擬地址、線性地址和物理地址的轉換

一、             虛擬地址

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

二、             虛擬內存

在現在操作系統中,都使用了MMU的存儲管理技術,而MMU管理的地址是虛擬地址,虛擬地址=邏輯地址=[段選擇子][線形地址],利用段選擇子找到描述符。虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術的系統使得大型程序的編寫變得更容易,對真正的物理內存(例如RAM)的使用也更有效率。

有時我們也把邏輯地址稱爲虛擬地址。因爲和虛擬內存空間的概念類似,邏輯地址也是和實際物理內存容量無關的。邏輯地址和物理地址的差距0xC0000000,是由於虛擬地址->線性地址->物理地址映射正好差這個值。這個值是由操作系統指定的

三、             線性地址

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

四、             物理地址

物理地址 (physical address): 放在尋址總線上的地址。放在尋址總線上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據總線中傳輸。如果是寫,電路根據這個地址每位的值就將相應地址的物理內存中放入數據總線上的內容。物理內存是以字節(8位)爲單位編址的。

五、             地址轉換

完整的內存管理,包含保護和地址變換兩個關鍵部分。80386的工作模式包括實地址模式和虛地址模式(保護模式)。Linux主要工作在保護模式下。 分段機制在保護模式下,80386虛地址空間可達16K個段,每段大小可變,最大達4GB。

提供保護措施可以防止一個任務訪問另一個任務或者系統的內存區域。地址變換讓操作系統在給任務分配內存時具有靈活性。爲了減少確定地址變換所需要的信息,變換或映射通常是以內存塊作爲操作單位的。80X86從邏輯地址到物理地址變換中經過了兩個階段。第一階段使用分段機制把程序的邏輯地址變換成處理器可尋址內存空間(稱爲線性地址空間)中的地址。第二階段的分頁機制把線性地址轉換成物理地址。第一階段的分段變換機制是必須使用的,但是第二階段的分頁機制是可選擇的。如果沒有開啓分頁機制,那麼分段機制產生的線性地址空間就直接映射到處理器的物理地址空間上。

分段分頁機制如下圖所示:

1 分段機制:

分段提供了隔絕各個代碼、數據和堆棧區域的機制,因此多個程序(任務)可以運行在同一個處理器上而不會互相干擾。分段機制把處理器可尋址的線性地址空間劃分成一些較小的稱爲段的受保護地址空間區域。爲了定位指定段中的一個字節,程序必須提供一個邏輯地址,邏輯地址包括一個段選擇符和一個偏移量,段選擇符是一個段的唯一標識,同時還提供了段描述符表中一個數據結構的偏移量。

線性地址空間與物理地址空間具有相同的結構。相對於兩維的邏輯地址空間來說,它們兩者都是一維地址空間。虛擬地址空間可以包含最多16K個段,而每個端最長可達4GB,所以虛擬地址空間容量達到64TB2^46)。線性地址空間和物理地址空間都是4GB2^32)。實際上,如果禁用分頁機制,線性地址空間就是物理地址空間。

每個段有三個參數定義:

1)段基地址:指定段在線性地址空間中的開始地址,對應於段中偏移0處。

2)段限長:是虛擬地址空間中,最大可用偏移位置,定義了段的長度。

3)段屬性:指定段的特性。例如是否可讀、可寫、段的特權等級等。

爲了把邏輯地址轉換成一個線性地址,處理器會執行以下操作(如下圖):

1)使用段選擇符中的偏移值(段索引)在GDTLDT表中定位相應的短描述符。(僅當一個新的段選擇符加載到段寄存器中才需要這一步)

2)利用段描述符檢驗段的訪問權限和範圍,以確保該段是可以訪問的並且偏移量位於段界限內。

3)把段描述符中取得的段機制加到偏移量上,最後形成線性地址。

2、分頁機制

分頁機制支持虛擬存儲技術。在使用虛擬存儲的環境中,大容量的線性地址空間需要使用小塊的物理內存以及某些外部存儲空間來模擬。使用分頁時,每個端被劃分爲頁面(通常每頁4KB),頁面存儲與物理內存或硬盤上,操作系統通過維護一個頁目錄和一些頁表來留意這些頁表信息。

邏輯地址、線性地址和物理地址之間的變換過程如下圖所示:

 

 

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