地址空間檢視原始碼討論檢視歷史
![]() |
地址空間(address space)表示任何一個計算機實體所占用的內存大小。比如外設、文件、服務器[1]或者一個網絡計算機。地址空間包括物理空間以及虛擬空間。
導讀
存儲器抽象
在計算機中,每個設備以及進程都被分配了一個地址空間。處理器的地址空間由其地址總線以及寄存器決定。地址空間可以分為Flat——表示起始空間位置為0;或者Segmented——表示空間位置由偏移量決定。在一些系統中,可以進行地址空間的類型轉換。至於IP地址空間,IPV4協議並沒有預見到IP地址的需求量如此之大,32位的地址空間已經無法滿足需求了。因此,開發了IPV6協議,支持128位的地址空間。
暴露問題
把物理地址暴露給進程會帶來下面幾個嚴重問題。第一,如果用戶程序可以尋址內存的每個字節,它們就可以很容易地(故意地或偶然地)破壞操作系統,從而使系統慢慢地停止運行。即使在只有一個用戶進程運行的情況下,這個問題也是存在的。第二,使用這種模型,想要同時(如果只有一個CPU就輪流執行)運行多個程序是很困難的。在個人計算機上,同時打開幾個程序是很常見的(一個文字處理器,一個郵件程序,一個網絡瀏覽器,其中一個當前正在工作,其餘的在按下鼠標的時候才會被激活)。在系統中沒有對物理[2]內存的抽象的情況下,很難做到上述情景,因此,我們需要其他辦法。
概念
要保證多個應用程序同時處於內存中並且不互相影響,則需要解決兩個問題:保護和重定位。我們來看一個原始的對前者的解決辦法:給內存塊標記上一個保護鍵,並且比較執行進程的鍵和其訪問的每個內存字的保護鍵。然而,這種方法本身並沒有解決後一個問題,雖然這個問題可以通過在程序被裝載時重定位程序來解決,但這是一個緩慢且複雜的解決方法。
一個更好的辦法是創造一個新的內存抽象:地址空間。就像進程的概念創造了一類抽象的CPU以運行程序一樣,地址空間為程序創造了一種抽象的內存。地址空間是一個進程可用於尋址內存的一套地址集合。每個進程都有一個自己的地址空間,並且這個地址空間獨立於其他進程的地址空間(除了在一些特殊情況下進程需要共享它們的地址空間外)。
地址空間的概念非常通用,並且在很多場合中出現。隨着數量的增長,空間變得越來越不夠用了,從而導致需要使用更多位數。
地址空間可以不是數字的。互聯網域名也是地址空間。這個地址空間是由所有包含2~63個字符並且後面跟着字符串組成的,組成這些字符串的字符可以是字母、數字和連字符。
物理地址與虛擬地址
物理地址(physical address):放在尋址總線上的地址。放在尋址總線上,如果是讀,電路根據這個地址每位的值就將相應地址的物理內存中的數據放到數據總線中傳輸。如果是寫,電路根據這個地址每位的值就將相應地址的物理內存中放入數據總線上的內容。物理內存是以字節(8位)為單位編址的。
虛擬地址(virtual address):CPU啟動保護模式後,程序運行在虛擬地址空間中。注意,並不是所有的「程序」都是運行在虛擬地址中。CPU在啟動的時候是運行在實模式的,內核在初始化頁表之前並不使用虛擬地址,而是直接使用物理地址的。
和地址空間
物理存儲器和存儲地址空間是兩個不同的概念。但是由於這兩者有十分密切的關係,而且兩者都用B、KB、MB、GB來度量其容量大小,因此容易產生認識上的混淆,弄清這兩個不同的概念,有助於進一步認識主存儲器和用好主存儲器。
物理存儲器是指實際存在的具體存儲器芯片。如主板上裝插的主存條和裝載有系統的BIOS的ROM芯片,顯示卡上的顯示RAM芯片和裝載顯示BIOS的ROM芯片,以及各種適配卡上的RAM芯片和ROM芯片都是物理存儲器。
存儲地址空間是指對存儲器編碼(編碼地址)的範圍。所謂編碼就是對每一個物理存儲單元(一個字節)分配一個號碼,通常叫作「編址」。分配一個號碼給一個存儲單元的目的是為了便於找到它,完成數據的讀寫,這就是所謂的「尋址」(所以,有人也把地址空間稱為尋址空間)。
CPU在操控物理存儲器的時候,把物理存儲器都當作內存來對待,把它們總的看作一個由若干存儲單元組成的邏輯存儲器,這個邏輯存儲器就是我們所說的內存地址空間。
有的物理存儲器被看作一個由若干存儲單元組成的邏輯存儲器,每個物理存儲器在這個邏輯存儲器中占有一個地址段,即一段地址空間。CPU在這段地址空間中讀寫數據,實際上就是在相對應的物理存儲器中讀寫數據。
地址空間的大小和物理存儲器的大小並不一定相等。舉個例子來說明這個問題:某層樓共有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還具有這幾方面的優勢:無狀態自動配置,網絡更加安全,服務質量更好。
參考文獻
- ↑ 服務器是什麼?服務器的作用與用途 ,搜狐,2023-04-08
- ↑ 常見七種傳感器介紹,其中屬物理傳感器應用最廣泛 ,搜狐,2017-06-16