虛擬位址與實體地址

2021-09-17 02:11:27 字數 608 閱讀 7760

乙個程式編譯連線後形成的位址空間是乙個虛擬位址空間,但是程式最終還是要執行在物理記憶體中。因此,應用程式所給出的任何虛位址最終必須被轉化為實體地址,所以,虛擬位址空間必須被對映到物理記憶體空間中,這個對映關係需要通過硬體體系結構所規定的資料結構來建立。這就是我們所說的段描述符表和頁表,linux主要通過頁表來進行對映。

於是,我們得出乙個結論,如果給出的頁表不同,那麼cpu將某一虛擬位址空間中的位址轉化成的實體地址就會不同。所以我們為每乙個程序都建立其頁表,將每個程序的虛擬位址空間根據自己的需要對映到實體地址空間上。既然某一時刻在某一cpu上只能有乙個程序在執行,那麼當程序發生切換的時候,將頁表也更換為相應程序的頁表,這就可以實現每個程序都有自己的虛擬位址空間而互不影響。所以,在任意時刻,對於乙個cpu來說,只需要有當前程序的頁表,就可以實現其虛擬位址到實體地址的轉化。

核心空間到物理記憶體的對映

核心空間對所有的程序都是共享的,其中存放的是核心**和資料,而程序的使用者空間中存放的是使用者程式的**和資料,不管是核心程式還是使用者程式,它們被編譯和連線以後,所形成的指令和符號位址都是虛位址(參見2.5節中的例子),而不是物理記憶體中的實體地址。

真心不想看到一些好的文章被埋沒了,所以發出來:

實體地址與虛擬位址(3)

windows 2000 使用基於分頁機制的虛擬記憶體。每個程序有4gb的虛擬位址空間。基於分頁機制,這4gb位址空間的一些部分被映 物理記憶體,一些部分對映硬碟上的交換檔案,一些部分什麼也沒有對映。程式中使用的都是4gb位址空間中的虛擬位址。而訪問物理記憶體,需要使用實體地址。下面我們看看什麼是實...

邏輯位址 實體地址 虛擬位址

用於記憶體晶元級的單元定址,與處理器和cpu連線的位址匯流排相對應。雖然可以直接把實體地址理解成插在機器上那根記憶體本身,把記憶體看成乙個從0位元組一直到最大空量逐字節的編號的大陣列,然後把這個陣列叫做實體地址,但是事實上,這只是乙個硬體提供給軟體的抽像,記憶體的定址方式並不是這樣。所以,說它是 與...

虛擬位址與實體地址的對映

對於dsp的每個cpu而言,當由cpu發起的對corepac內部記憶體 l1,l2記憶體,片上暫存器位址 的訪問 通過store或load指令 時,所訪問記憶體的位址就是實體地址 但當cpu訪問corepac外部的記憶體 如msm,即多核共享記憶體或ddr 時,cpu所訪問的32位位址就是虛擬位址了...