作用
在8086的實模式下,把某一段暫存器左移4位,然後與地址ADDR相加後被直接送到記憶體匯流排上,這個相加後的地址就是記憶體單元的物理地址,而程式中的這個地址就叫邏輯地址(或叫虛地址)。在80386的保護模式下,這個邏輯地址不是被直接送到記憶體匯流排,而是被送到記憶體管理單元(MMU)。MMU由一個或一組晶片組成,其功能是把邏輯地址映射為物理地址,即進行地址轉換。
地址區分
當使用80386時,我們必須區分以下三種不同的地址:
邏輯地址:機器語言指令仍用這種地址指定一個運算元的地址或一條指令的地址。這種定址方式在Intel的分段結構中表現得尤為具體,它使得MS-DOS或Windows程式設計師把程式分為若干段。每個邏輯地址都由一個段和偏移量組成。
線性地址:針對32位CPU,線性地址是一個32位的無符號整數,可以表達高達2 (4GB)的地址。通常用16進制表示線性地址,其取值範圍為0x00000000~0xffffffff。對64位CPU,線性地址是一個64位的無符號整數,可以表達高達2 。
物理地址:也就是記憶體單元的實際地址,用於晶片級記憶體單元定址。物理地址也由32位無符號整數表示。
記憶體地址類型
記憶體地址有許多類型。換句話說,一個電腦,甚至在一個程式內,可能即存在數個不同的記憶體“定址空間”。
電腦的記憶體(尤其是指主存)是由許多“記憶體地址”所組成的,每個記憶體地址都有一個“物理地址”,能供CPU(或其他設備)訪問。一般,只有如BIOS、作業系統及部分特定之公用軟體(如記憶體測試軟體)等系統軟體,能使用機器碼的運算對象或暫存器對物理地址定址,指示CPU要求記憶體控制器之類的硬體設備,使用記憶體匯流排或系統匯流排,亦或分別之控制匯流排、地址匯流排及數據匯流排,運行該程式之命令。記憶體控制器的匯流排是由數條並行的線路所組成的,每條線路表示一個比特。匯流排的寬度因此依電腦不同,決定了可定址之存儲單位數量,以及每一單位內的比特數量。
電腦程式使用記憶體地址來運行機器碼、存儲及截取數據。大多數的應用程式無法得知實際的物理地址,而是使用電腦的記憶體管理單元及作業系統的記憶體映射,為“邏輯地址”或虛擬地址定址。
MMU理解
MMU是一種硬體電路,它包含兩個部件,一個是分段部件,一個是分頁部件,在本書中,我們把它們分別叫做分段機制和分頁機制,以利於從邏輯的角度來理解硬體的實現機制。分段機制把一個邏輯地址轉換為線性地址;接著,分頁機制把一個線性地址轉換為物理地址。
另見
•記憶體管理
•位元組序
•記憶體管理單元(MMU)
•標籤頁表
•記憶體保護
•記憶體區塊
•低級語言