地址空間

地址空間

存儲地址空間是指對存儲器編碼(編碼地址)的範圍。所謂編碼就是對每一個物理存儲單元(一個位元組)分配一個號碼,通常叫作“編址”。分配一個號碼給一個存儲單元的目的是為了便於找到它,完成數據的讀寫,這就是所謂的“定址”(所以,有人也把地址空間稱為定址空間)。

導讀


在計算機中,每個設備以及進程都被分配了一個地址空間。處理器的地址空間由其地址匯流排以及寄存器決定。地址空間可以分為Flat——表示起始空間位置為0;或者Segmented——表示空間位置由偏移量決定。在某些系統中,可以進行地址空間的類型轉換。至於IP地址空間,IPV4協議並沒有預見到IP地址的需求量如此之大,32位的地址空間已經無法滿足需求了。因此,開發了IPV6協議,支持128位的地址空間。

物理地址暴露帶來的問題

把物理地址暴露給進程會帶來下面幾個嚴重問題。第一,如果用戶程序可以定址內存的每個位元組,它們就可以很容易地(故意地或偶然地)破壞操作系統,從而使系統慢慢地停止運行(除非有特殊的硬體進行保護,如IBM 360的鎖鍵模式)。即使在只有一個用戶進程運行的情況下,這個問題也是存在的。第二,使用這種模型,想要同時(如果只有一個CPU就輪流執行)運行多個程序是很困難的。在個人計算機上,同時打開幾個程序是很常見的(一個文字處理器,一個郵件程序,一個網路瀏覽器,其中一個當前正在工作,其餘的在按下滑鼠的時候才會被激活)。在系統中沒有對物理內存的抽象的情況下,很難做到上述情景,因此,我們需要其他辦法。

地址空間的概念


要保證多個應用程序同時處於內存中並且不互相影響,則需要解決兩個問題:保護和重定位。我們來看一個原始的對前者的解決辦法,它曾被用在IBM 360上:給內存塊標記上一個保護鍵,並且比較執行進程的鍵和其訪問的每個內存字的保護鍵。然而,這種方法本身並沒有解決后一個問題,雖然這個問題可以通過在程序被裝載時重定位程序來解決,但這是一個緩慢且複雜的解決方法。
一個更好的辦法是創造一個新的內存抽象:地址空間。就像進程的概念創造了一類抽象的CPU以運行程序一樣,地址空間為程序創造了一種抽象的內存。地址空間是一個進程可用於定址內存的一套地址集合。每個進程都有一個自己的地址空間,並且這個地址空間獨立於其他進程的地址空間(除了在一些特殊情況下進程需要共享它們的地址空間外)。
地址空間的概念非常通用,並且在很多場合中出現。比如電話號碼,在美國和很多其他國家,一個本地電話號碼通常是一個7位的數字。因此,電話號碼的地址空間是從0 000 000到9 999 999,雖然一些號碼並沒有被使用,比如以000開頭的號碼。隨著手機、數據機和傳真機數量的增長,這個空間變得越來越不夠用了,從而導致需要使用更多位數的號碼。Pentium的I/O埠的地址空間從0到16 383。IPv4的地址是32位的數字,因此它們的地址空間從0到2(也有一些保留數字)。
地址空間可以不是數字的。一套“.com”的網際網路域名也是地址空間。這個地址空間是由所有包含2~63個字元並且後面跟著“.com”的字元串組成的,組成這些字元串的字元可以是字母、數字和連字元。到現在你應該已經明白地址空間的概念了。它是很簡單的。

物理存儲器和地址空間

物理存儲器和存儲地址空間是兩個不同的概念。但是由於這兩者有十分密切的關係,而且兩者都用B、KB、MB、GB來度量其容量大小,因此容易產生認識上的混淆。初學者弄清這兩個不同的概念,有助於進一步認識主存儲器和用好主存儲器。
物理存儲器是指實際存在的具體存儲器晶元。如主板上裝插的主存條和裝載有系統的BIOS的ROM晶元,顯示卡上的顯示RAM晶元和裝載顯示BIOS的ROM晶元,以及各種適配卡上的RAM晶元和ROM晶元都是物理存儲器。
地址空間的大小和物理存儲器的大小並不一定相等。舉個例子來說明這個問題:某層樓共有17個房間,其編號為801~817。這17個房間是物理的,而其地址空間採用了三位編碼,其範圍是800~899共100個地址,可見地址空間是大於實際房間數量的。
對於386以上檔次的微機,其地址匯流排為32位,因此地址空間可達2的32次方,即4GB。但實際上我們所配置的物理存儲器通常只有1MB、2MB、4MB、8MB、16MB、32MB等,遠小於地址空間所允許的範圍。

IPv6提供無限地址空間

簡單地說,IPv6就是下一代網際網路協議。現有的網際網路是在IPv4的基礎上運行的,隨著網際網路的迅速發展,IPv4定義的有限地址(IP地址)空間將被耗盡,必將影響網際網路的進一步發展。IPv4採用32位地址長度,只有大約43億個地址,估計在2009~2010年間將被分配完畢。IPv6重新定義地址空間,採用128位地址長度,幾乎可以不受限制地提供地址,保守估計IPv6實際可分配的地址,整個地球每平方米面積上就可分配1000多個地址。
除了地址空間巨大之外,IPv6還具有這幾方面的優勢:無狀態自動配置,網路更加安全,服務質量更好。
無狀態自動配置。IPv6的另一個基本特性是它支持無狀態和有狀態兩種地址自動配置的方式,無狀態地址自動配置方式是獲得地址的關鍵。在這種方式下,IPv6通過鄰居發現機制能為主機自動配置介面地址和預設路由器信息,使得從網際網路到最終用戶之間的連接不經過用戶干預就能夠快速建立起來。
網路更加安全。IPv6要求強制實施網際網路安全協議IPSec,並已將其標準化。IPSec支持驗證頭AH協議、封裝安全性載荷ESP協議和密鑰交換IKE協議,這3種協議將是未來Internet的安全標準。驗證頭協議用於保證數據的一致性,封裝安全性載荷協議用於保證數據的保密性和數據的一致性。在IPv6包中,AH和ESP都是擴展報頭,可以同時使用,也可以單獨使用其中一個。IPv6協議內置安全機制,並已經標準化,它支持對企業網的無縫遠程訪問。
服務質量更好。IPv6能提供不同水平的服務,這主要由於IPv6報頭中新增加了欄位、業務級別和流標記。有了它們,在傳輸過程中,中間的各節點就可以識別和分開處理任何IP地址流。儘管對這個流標記的準確應用還沒有制定出有關標準,但將來它會用於基於服務級別的新計費系統。IPv6還支持“時時在線”連接,防止服務中斷以及提高網路性能方面。
雖然IPv6具有如此多的優點,但也有許多不足之處,從IPv4到IPv6 的演進也是一個逐漸演進的過程,而不是徹底改變的過程。要實現全球IPv6互聯,仍需要一段時間。