一、前言
以前的程式,都是直接執行在物理記憶體上的,即程式在執行時訪問的位址都是實體地址。這種方式帶來的問題就是:如何把有限的物理記憶體分配給這麼多程式使用呢?
與此同時,這種記憶體分配策略也帶來幾個問題:
(1)程式間的位址不隔離,惡意程式可能會藉此損壞正常程式的資料。
(2)記憶體使用效率低,由於記憶體大小有限,當剩餘的記憶體不夠裝載接下來要執行的程式的時候,正在執行的程式需要暫停換出到磁碟,以空出足夠的記憶體來,等它執行完了再換回來。這樣大量的資料進進出出,導致記憶體的使用效率非常低下。
(3)程式執行的位址不確定,程式在裝載執行時,都需要占用記憶體上的一塊空間,這個空間的位置是不確定的。但是,程式在編寫時,很多資料或是指令跳轉時的目標位址都是確定的,這個問題給程式的編寫帶來不小的問題。
所以,為了解決以上的三個問題,增加了中間層——虛擬位址,提供了一種間接訪問物理記憶體的訪問方法。
二、虛擬位址
為了解決上述的幾個問題,虛擬位址就出現了。為了隔離每個程式,每乙個程式都有自己的位址空間、cpu(當然,只是看起來是這樣),每乙個程式都可以不用管其他的程式,就像它佔據了整個計算機。
1.位址空間
(1) 實體地址空間
實體地址空間是實實在在存在於計算機中的,它和位址空間的位址長度有關。如果計算機是32位的,即計算機的位址匯流排有32條,那麼物理空間就有4gb。4gb的物理空間中,只有記憶體的512mb有效,其他的是外存部分。
(2) 虛擬位址空間
虛擬位址空間其實是人為想象出來的位址空間,這個位址空間的大小有cpu的位數(硬體的定址空間大小)決定,32位cpu的虛擬位址空間大小為4gb,64位cpu的虛擬位址空間大小為17179869184gb(看起來很大了吧,可是以後或許還有更大的,因為在32位時人們就覺得「夠了」...)。
每乙個程序都有自己的虛擬位址空間,這樣使得每乙個程序都只能訪問自己的位址空間而互不影響。
當程序在訪問自己的虛擬位址空間時,實際上訪問的是它對映在實體地址空間的那一部分。
具體的對映方式,就是記憶體分段、分頁管理中的內容了。
那麼,在32位的虛擬位址空間中,4gb的空間是否程式都可以使用呢?
2.虛擬位址空間的分布
其實,整個虛擬位址空間都是由作業系統來管理的,所以程序只能使用那些作業系統分配給它的空間。同時,作業系統留有一部分給自己使用。
其中,核心中的zone_dma如果進行了配置,則程式進入記憶體就不需要進入暫存器。
C 虛擬位址空間
一 引言 在計算機中,每台裝置以及程序都被分配乙個位址空間。位址空間包括物理空間以及虛擬空間。如果將實體地址暴露給程序,使用者就很容易破壞作業系統,從而使系統停止 另外隨著程序數量和體積的增長,核心空間變得越來越不夠用,從而引入虛擬位址空間。實體地址 physical address 放在定址匯流排...
虛擬位址空間
當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...
虛擬位址空間
14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...