C 前序 1 虛擬位址空間

2021-08-13 09:44:09 字數 1514 閱讀 2636

一、前言

以前的程式,都是直接執行在物理記憶體上的,即程式在執行時訪問的位址都是實體地址。這種方式帶來的問題就是:如何把有限的物理記憶體分配給這麼多程式使用呢?

與此同時,這種記憶體分配策略也帶來幾個問題:

(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,...