三.原理
「對映」就是建立一種對應關係,在這裡主要是指硬碟上檔案的位置與程序邏輯位址空間中一塊相同區域之間一一對應,這種關係純屬是邏輯上的概念,物理上是不存在的,原因是程序的邏輯位址空間本身就是不存在的,在記憶體對映過程中,並沒有實際的資料拷貝,檔案沒有被載入記憶體,只是邏輯上放入了記憶體,具體到**,就是建立並初始化了相關的資料結構,這個過程有系統呼叫mmap()實現,所以對映的效率很高.
記憶體對映原理
上面說到建立記憶體對映沒有進行實際的資料拷貝,那麼進行程序又怎麼能最終通過記憶體操作訪問到硬碟上的檔案呢?
看上圖:
1.呼叫mmap(),相當於要給進行記憶體對映的檔案分配了虛擬記憶體,它會返回乙個指標ptr,這個ptr所指向的是乙個邏輯位址,要操作其中的資料,必須通過mmu將邏輯位址轉換成實體地址,如圖1中過程2所示。
2.建立記憶體對映並沒有實際拷貝資料,這時,mmu在位址對映表中是無法找到與ptr相對應的實體地址的,也就是mmu失敗,將產生乙個缺頁中斷,缺 頁中斷的中斷響應函式會在swap中尋找相對應的頁面,如果找不到(也就是該檔案從來沒有被讀入記憶體的情況),則會通過mmap()建立的對映關係,從硬 盤上將檔案讀取到物理記憶體中,如圖1中過程3所示。
3.如果在拷貝資料時,發現物理記憶體不夠用,則會通過虛擬記憶體機制(swap)將暫時不用的物理頁面交換到硬碟上,如圖1中過程4所示。
四.它的其他功能:
例如程序之間的通訊。
參考:
記憶體對映檔案
記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作文 件,就像操作程序空間裡的位址一樣了,比如使用 memcpy 等記憶體操作的函式。這種方法能 夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理 io效率比 普通 io效率要高。另外,unix 把它做...
記憶體對映檔案
記憶體對映檔案有三種,第一種是可執行檔案的對映,第二種是資料檔案的對映,第三種是借助頁面交換檔案的記憶體對映.應用程式本身可以使用後兩種記憶體對映.1.可執行檔案對映 windows在執行乙個win32應用程式時使用的是記憶體對映檔案技術.系統先在程序位址空間的0x00400000以上保留乙個足夠大...
記憶體檔案對映
一直都對記憶體對映檔案這個概念很模糊,不知道它和虛擬記憶體有什麼區別,而且對映這個詞也很讓人迷茫,今天終於搞清楚了。下面,我先解釋一下我對對映這個詞的理解,再區分一下幾個容易混淆的概念,之後,什麼是記憶體對映就很明朗了。首先,對映 這個詞,就和數學課上說的 一一對映 是乙個意思,就是建立一種一一對應...