內存映射機制(mmap)


當CPU讀取數據時,是由內存管理單元(MMU)管理的。MMU位於CPU與物理內存之間,它包含從虛地址向物理內存地址轉化的映射信息。當CPU引用一個內存位置時,MMU決定哪些頁需要駐留(通常通過移位或屏蔽地址的某些位)以及轉化虛擬頁號到物理頁號。
在這里插入圖片描述

當某個進程讀取磁盤上的數據時,進程要求其緩沖通過read()系統調用填滿,這個系統調用導致內核想磁盤控制硬件發出一條命令要從磁盤獲取數據。磁盤控制器通過DMA直接將數據寫入內核的內存緩沖區,不需要CPU協助。當請求read()操作時,一旦磁盤控制器完成了緩存的填寫,內核從內核空間的臨時緩存拷貝數據到進程指定的緩存中。

用戶空間是常規進程所在的區域,該區域執行的代碼不能直接訪問硬件設備。內核空間是操作系統所在的區域,該區域可以與設備控制器通訊,控制用戶區域進程的運行狀態。
在這里插入圖片描述

內存映射文件技術是操作系統提供的一種新的文件數據存取機制,利用內存映射文件技術,系統可以在內存空間中為文件保留一部分空間,並將文件映射到這塊保留空間,一旦文件被映射后,操作系統將管理頁映射緩沖以及高速緩沖等任務,而不需要調用分配、釋放內存塊和文件輸入/輸出的API函數,也不需要自己提供任何緩沖算法。

使用內存映射文件處理存儲於磁盤上的文件時,將不必再對文件執行I/O 操作,這意味着在對文件進行處理時將不必再為文件申請並分配緩存,所有的文件緩存操作均由系統直接管理,由於取消了將文件數據加載到內存、數據從內存到文件的回寫以及釋放內存塊等步驟,使得內存映射文件在處理大數據量的文件時能起到相當重要的作用。

 

 

----------------------------------------------------------------------->

摘自百度百科

 

內存映射文件,是由一個文件到一塊內存的映射。Win32提供了允許應用程序把文件映射到一個進程的函數 (CreateFileMapping)。內存映射文件與虛擬內存有些類似,通過內存映射文件可以保留一個地址空間的區域,同時將物理存儲器提交給此區域,內存文件映射的物理存儲器來自一個已經存在於磁盤上的文件,而且在對該文件進行操作之前必須首先對文件進行映射。使用內存映射文件處理存儲於磁盤上的文件時,將不必再對文件執行I/O操作,使得內存映射文件在處理大數據量的文件時能起到相當重要的作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM