原因:實現記憶體隔離,程序a的虛擬位址和程序b的虛擬位址不同,這樣就防止了程序a將資料資訊寫入程序b
1. 每個程序的4g記憶體空間只是虛擬記憶體空間,每次訪問記憶體空間的某個位址,都需要把位址翻譯為實際物理記憶體位址
2. 所有程序共享同一物理記憶體,每個程序只把自己目前需要的虛擬記憶體空間對映並儲存到物理記憶體上。
3. 程序要知道哪些記憶體位址上的資料在物理記憶體上,哪些不在,還有在物理記憶體上的**,需要用頁表來記錄
4. 頁表的每乙個表項分兩部分,第一部分記錄此頁是否在物理記憶體上,第二部分記錄物理記憶體頁的位址(如果在的話)
5. 當程序訪問某個虛擬位址,去看頁表,如果發現對應的資料不在物理記憶體中,則缺頁異常
6. 缺頁異常的處理過程,就是把程序需要的資料從磁碟上拷貝到物理記憶體中,如果記憶體已經滿了,沒有空地方了,那就找乙個頁覆蓋,當然如果被覆蓋的頁曾經被修改過,需要將此頁寫回磁碟
每個android程序擁有1g核心空間,3g使用者空間,大小引數可配置,核心空間共享
binder借助了記憶體對映的方法,在核心空間和接收方使用者空間的資料快取區之間做了一層記憶體對映,就相當於直接拷貝到了接收方使用者空間的資料快取區,從而減少了一次資料拷貝
參考:
虛擬記憶體應用
虛擬記憶體的重要性體現在下面幾個方面 1 虛擬記憶體可以對映到硬碟,以達到擴充套件記憶體的作用,這樣系統在物理記憶體已經用滿的情況下,就不會因為沒有記憶體可用,而導致系統崩潰。2 虛擬記憶體是以程序空間為定址空間的,一般情況,程序使用者模式下的定址空間 是2g,為了避免記憶體的碎片,可以把2g程序空...
linux之虛擬記憶體相關介紹
什麼是虛存?為什麼需要它?我們知道程式 和資料必須駐留在記憶體中才能得以執行,然而系統記憶體數量很有限,往往不能容納乙個完整程式的所有 和資料,更何況在多工系統中,可能需要同時開啟子處理程式,畫圖程式,瀏覽器等很多任務,想讓記憶體駐留所有這些程式顯然不太可能。因此首先能想到的就是將程式分割成小份,只...
Redis教程 十一 虛擬記憶體介紹
這篇文章主要介紹了redis教程 十一 虛擬記憶體介紹,本文講解了虛擬記憶體簡介 應用場景和配置方法等內容,需要的朋友可以參考下 一 簡介 undefined 和大多nosql資料庫一樣,redis同樣遵循了key value資料儲存模型。在有些情況下,redis會將keys values儲存在記憶...