在存儲器里以字節(jié)為單位存儲信息,為正確地存放或取得信息,每一個字節(jié)單元給以一個唯一的存儲器地址,稱為物理地址(Physical Address),又叫實際地址或絕對地址。
地址從0開始編號,順序地每次加1,因此存儲器的物理地址空間是呈線性增長的。它是用二進制數來表示的,是無符號整數,書寫格式為十六進制數。它是出現(xiàn)在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終結果。用于內存芯片級的單元尋址,與處理器和CPU連接的地址總線相對應。在計算機科學中,物理地址(英語:physical address),也叫實地址(real address)、二進制地址(binary address),它是在地址總線上,以電子形式存在的,使得數據總線可以訪問主存的某個特定存儲單元的內存地址。在和虛擬內存的計算機中,物理地址這個術語多用于區(qū)分虛擬地址。尤其是在使用內存管理單元(MMU)轉換內存地址的計算機中,虛擬和物理地址分別指在經MMU轉換之前和之后的地址。在計算機網絡中,物理地址有時又是MAC地址的同義詞。這個地址實際上是用于數據鏈路層,而不是如它名字所指的物理層上的。
在實地址方式下,物理地址是通過段地址乘以16加上偏移地址得到的。而16位的段地址乘以16等同于左移4位二進制位,這樣變成20位的段基地址,最后段基地址加上段內偏移地址即可得到物理地址。20位物理地址計算方法如下:物理地址=段地址*16d+偏移地址。
根據計算機體系的不同,對內存的不對齊的訪問對計算機的性能可能會有所損害。例如,像Intel 8086這種數據總線為16位的計算機,對偶數地址的訪問會更有效率。在那種情況下,獲取一個16位的值只要讀一次內存以及在數據總線上傳送一次數據。顯然,如果那16位的值儲存在奇數地址上,處理器實際上要讀兩次內存,即,一次用于讀存儲在低地址的部分,另一次讀存儲在高地址的部分;兩次都要把讀到的數據丟棄一半。
要保證多個應用程序同時處于內存中并且不互相影響,則需要解決兩個問題:保護和重定位。我們來看一個原始的對前者的解決辦法:給內存塊標記上一個保護鍵,并且比較執(zhí)行進程的鍵和其訪問的每個內存字的保護鍵。然而,這種方法本身并沒有解決后一個問題,雖然這個問題可以通過在程序被裝載時重定位程序來解決,但這是一個緩慢且復雜的解決方法。一個更好的辦法是創(chuàng)造一個新的內存抽象:地址空間。就像進程的概念創(chuàng)造了一類抽象的CPU以運行程序一樣,地址空間為程序創(chuàng)造了一種抽象的內存。地址空間是一個進程可用于尋址內存的一套地址集合。每個進程都有一個自己的地址空間,并且這個地址空間獨立于其他進程的地址空間(除了在一些特殊情況下進程需要共享它們的地址空間外)。地址空間的概念非常通用,并且在很多場合中出現(xiàn)。隨著數量的增長,空間變得越來越不夠用了,從而導致需要使用更多位數。地址空間可以不是數字的?;ヂ?lián)網域名也是地址空間。這個地址空間是由所有包含2~63個字符并且后面跟著字符串組成的,組成這些字符串的字符可以是字母、數字和連字符。
物理地址 (physical address): 放在尋址總線上的地址。放在尋址總線上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據總線中傳輸。如果是寫,電路根據這個地址每位的值就將相應地址的物理內存中放入數據總線上的內容。物理內存是以字節(jié)(8位)為單位編址的。虛擬地址 (virtual address): CPU啟動保護模式后,程序運行在虛擬地址空間中。注意,并不是所有的“程序”都是運行在虛擬地址中。CPU在啟動的時候是運行在實模式的,內核在初始化頁表之前并不使用虛擬地址,而是直接使用物理地址的。