虛擬位址空間

2021-09-25 10:56:32 字數 753 閱讀 4471

由於每個程序都不能直接訪問核心空間,而是通過系統呼叫間接進入核心,因此,所有的程序都共享核心空間。而每個程序都擁有各自的使用者空間,各個程序之間不能相互訪問彼此的使用者空間。因此,對每乙個具體的程序而言,都擁有4gb的虛擬位址空間。乙個程式在經過編譯、連線之後形成的位址空間是乙個虛擬的位址空間,只有當程式執行的時候才會分配具體的物理空間。由此我們可以得知,程式的虛擬位址相對來時候是固定的,而實體地址則隨著每一次程式的執行而有所不同。對於核心空間而有,它與物理記憶體之間存在乙個簡單的線性關係,即存在3gb的偏移量。在linux核心中,這個偏移量叫做page_offset。如果核心的某個實體地址為x,那麼對應的核心虛擬位址就為x+page_offset。對於使用者空間而言,它與物理記憶體之間的對映遠不止這麼簡單。與核心空間和物理空間的線性對映不同的是,分頁機制將虛擬使用者空間和實體地址空間分成大小相同的頁,然後再通過頁表將虛擬頁和物理頁塊對映起來。

struct mm_struct;
struct vm_area_struct:用來描述乙個虛擬記憶體區域(vma)。核心將每個記憶體區域作為乙個單獨的記憶體物件管理,每個記憶體物件管理,每個記憶體區域都有一致的屬性,比如許可權等。所以我們程式的**段、資料段和bss段在核心裡都分別有乙個struct vm_area_struct結構體來描述:

struct vm_area_struct;

虛擬位址空間

當處理器讀或寫入記憶體位置時,它會使用虛擬位址。作為讀或寫操作的一部分,處理器將虛擬位址轉換為實體地址。通過虛擬位址訪問記憶體有以下優勢 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x0...

虛擬位址空間

14 共 14 對本文的評價是有幫助 評價此主題 程序可用的虛擬位址範圍稱為該程序的 虛擬位址空間 每個使用者模式程序都有其各自的專用虛擬位址空間。對於 32 位程序,虛擬位址空間通常為 2 gb,範圍從 0x00000000 至 0x7fffffff。對於 64 位程序,虛擬位址空間為 8 tb,...

虛擬位址空間

1 text 段 存放程式執行的一塊記憶體區域,此區域大小在執行之前就已經確定下來了。2 data資料段 全域性初始化資料區 靜態資料區 只初始化一次,指用來存放程式中已初始化的全域性變數的一塊記憶體區域 已經初始化的全域性變數 靜態變數和常量 3 bss未初始化資料區 用來存放程式中未初始化的全域...