Linux虛擬位址空間

2021-09-28 22:44:37 字數 1012 閱讀 4474

為了防止不同程序同一時刻在物理記憶體中執行而對物理記憶體的爭奪和踐踏,採用了虛擬記憶體。

虛擬記憶體技術使得不同程序在執行過程中,它所看得到的是自己獨自占有了當前系統的4g記憶體。所有程序共享同一物理記憶體,每個程序只把自己目前需要的虛擬記憶體空間對映並儲存到物理記憶體上。事實上,在每個程序建立載入時,核心只是為程序建立了虛擬記憶體的布局,具體就是初始化程序控制表中記憶體相關的鍊錶,實際上並不立即就把虛擬記憶體對應位置的程式資料和**拷貝到物理記憶體中,只是建立好虛擬記憶體和磁碟檔案之間的對映就好,即儲存器對映,等到程式執行到相應的程式時,才會通過缺頁異常來拷貝資料。還有程序執行過程中,要動態分配記憶體,比如malloc時,也只是分配了虛擬記憶體,即為這塊虛擬記憶體對應的頁表項做相應設定,當進**正訪問到此資料時,才引發缺頁異常。請求分頁系統、請求分段系統和請求段頁式系統都是針對虛擬記憶體的,通過請求實現記憶體與外存的資訊置換。

虛擬記憶體的好處:

1.擴大位址空間。

2.記憶體保護:每個程序執行在各自的虛擬記憶體位址空間,互項不能干擾對方。虛擬記憶體還對特定的記憶體位址提供寫保護,可以防止**或資料被惡意篡改。

3.公平分配記憶體:採用了虛擬記憶體之後你,每個程序都相當於有同樣大小的虛擬記憶體空間。

4.當程序通訊時,可採用虛擬記憶體共享的方式實現。

5.當不同的程序使用同樣的**時,比如庫檔案中的**,物理記憶體中可以只儲存乙份這樣的**,不同的程序只需要把自己的虛擬記憶體對映過去就可以了,節省記憶體。

6.虛擬記憶體很適合在多道程式設計系統中使用,許多程式的片段同時儲存在記憶體中。當乙個程式等待它的一部分讀入記憶體時,可以把cpu交給另乙個程序使用。在記憶體中可以保留多個程序,系統併發度提高。

7.在程式需要分配連續的記憶體空間的時候,只需要在虛擬記憶體空間分配連續空間,而不需要實際物理記憶體的連續空間,可以利用碎片。

虛擬記憶體的代價:

1.虛擬記憶體的管理需要建立很多資料結構,這些資料結構要占用額外的記憶體。

2.虛擬位址到實體地址的轉換增加了指令的執行時間。

3.頁面的換入換出需要磁碟i/o,這是很耗時的。

4.如果一頁中只有一部分資料,會浪費記憶體。

Linux虛擬位址空間

在多工作業系統中,每個程序都執行在屬於自己的記憶體沙盤中。這個沙盤就是虛擬位址空間 virtual address space 在32位模式下它是乙個4gb的記憶體位址塊,這篇部落格均是x86架構的 1.位址空間分布 2.核心位址空間 從pkmap base 到 fixaddr start用於對映高...

虛擬位址空間

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

虛擬位址空間

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