如何理解虛擬位址空間?

時間 2021-05-05 19:16:26

1樓:St.John

一般文中出現虛擬的東西,大都不是真實存在的。虛擬位址空間就是以程式設計師視角,作業系統提供的乙個可操作空間。很形象的比喻就是你找銀行貸款,銀行說能給你貸款數額5-100w,這個區間就是你借款區間,至於真正能不能貸款到指定數額的,還得看你的財務狀態和銀行的現金流情況。

這裡也是類似的,虛擬位址就是我們程式能訪問的最大範圍,到底能不能達到這個範圍,還需要作業系統和硬體根據當前機器執行狀態是否能支援。

2樓:

實模式下,直接用段基位址+段偏移的是獲得的是實體地址。

保護模式下不開分頁情況

其實還是段基位址+段偏移。

首先是是段選擇子獲得段基位址,然後還是段基位址+段偏移。這個位址叫線性位址,因為沒有開分頁,所以這個時候線性位址等價於實體地址。

保護模式加分頁下。

會比剛才說的多了一步,獲得線性位址後,還要去找頁表頁表去找到具體的物理頁和相關實體地址

3樓:

我的理解是這個虛擬位址空間就是對使用者程式來說,它就以為自己是執行在乙個獨佔4g記憶體的計算機上,它根本不認為這個記憶體裡還有其它程序。自己想要分配多少就去申請分配。而實際上系統管理程序時只給正在執行的程序在真正的記憶體裡分配它當時正需要的記憶體,不需要立刻用的部分被換走。

所以多個程序都可以在有限的物理記憶體上「同時」執行。

4樓:「已登出」

32位程序可以發出2^32個位址,比如*ptr=0xNNNNNNN,這個被訪問的位址不一定有記憶體存在,只是說它可以發出這個位址而已。而這個位址對應什麼物理記憶體,這是作業系統給的,給了就有,沒給就沒有。

5樓:CMOS

多個程序確實需要多和虛擬位址空間,這個是靠作業系統建立多個頁表來實現的。

由於是虛擬空間,不需要實際存在,所以可以在使用時才對映到物理記憶體。比如4G物理記憶體,兩個程式,各需要3G記憶體,那麼可以在執行乙個程序時,把另乙個程序資料換到磁碟。然後切換程序時再從磁碟挪回來,把被切換出的程序的資料挪到磁碟。

當然比如兩個程序都只需要1G記憶體,那麼換出磁碟這個操作就沒必要了。

6樓:

作業系統的記憶體管理模組負責虛擬記憶體的管理。如果程式訪問的乙個虛擬記憶體位址不在物理記憶體中,就產生缺頁錯誤,將該位址所在的頁面載入到物理記憶體。

7樓:「已登出」

應該都是動態分配的。

也就是,並不是乙個執行緒,記憶體中的4GB就全歸它了,只是占用多少使用多少,說是4GB,可能在記憶體中只使用了100KB,因為這個程序只占用100KB,剩餘的3.9GB將放在記憶體末尾……而在100KB那個位置後面的就是其它程序的東西

應該是這樣.

作業系統虛擬位址轉換為實體地址是如何避免衝突的?

jiangtao9999 你都說了分頁,又有頁表概念了,為什麼理解不了?頁表等於是告訴了作業系統,哪個頁是哪個程式用的。作業系統遇到記憶體訪問時,通過查詢頁表就可以知道記憶體什麼地方歸誰用。之後再去對應去翻譯虛擬位址和實際位址就行了。這個轉換我記得 CPU 自己的功能不需要作業系統自己實現,除非沒有...

ELF檔案裡面section的虛擬位址是如何在鏈結(link)時確定的?

安陽 先簡略的回答一下,因為每個使用者任務乃至核心都會維護自己的乙個頁目錄和頁表,頁目錄的位址是控制暫存器指向的,在切換任務的時候,要切換cr3指向的頁目錄,加上虛擬記憶體,就是說哪怕兩個任務的線性位址相同,但是也會因為不是同一套頁目錄頁表的關係,經過mmu計算之後,得出的實體地址也會不同 我天,你...

程式發出的位址都是虛擬位址,即程式只存在於虛擬空間中,據說虛擬空間的大小與系統的長度有關,這是為什麼?

答問題的第一部分 由於作業系統本身也是一組程式,所以我們應當首先把 程式 明確地區分為 作業系統程式 與執行其上的 應用程式 兩類。應用程式使用虛擬位址是作業系統的要求,在有這種要求的作業系統中,物理記憶體的使用由作業系統去排程,作業系統把物理記憶體按一定策略 規則對映給上層的應用程式。作業系統中負...