記憶體對映檔案mmap

2021-10-04 11:34:22 字數 1553 閱讀 5018

一、簡介

記憶體對映檔案,是由乙個檔案到一塊記憶體的對映。記憶體對映檔案與虛擬記憶體有些類似,通過記憶體對映檔案可以保留乙個位址空間的區域,同時將物理儲存器提交給此區域,記憶體檔案對映的物理儲存器來自乙個已經存在於磁碟上的檔案,而且在對該檔案進行操作之前必須首先對檔案進行對映。使用記憶體對映檔案處理儲存於磁碟上的檔案時,將不必再對檔案執行i/o操作,使得記憶體對映檔案在處理大資料量的檔案時能起到相當重要的作用。

記憶體對映mmap是linux核心的乙個重要機制,它和虛擬記憶體管理以及檔案io都有直接的關係。linux的虛擬記憶體管理是基於mmap來實現的。vm_area_struct是在mmap的時候建立的,vm_area_strcut代表了一段連續的虛擬位址,這些虛擬位址相應地對映到乙個後備檔案或者乙個匿名檔案的虛擬頁。乙個vm_area_struct對映到一組連續的頁表項。頁表項又指向物理記憶體page,這樣就把乙個檔案和物理記憶體頁相對映。

二、示例說明

1、建立乙個臨時示例檔案

#-*- coding:utf-8 -*-

with open("hello.txt", "w") as f:

f.write("prot, if specified, gives the desired memory protection; the two most useful values are prot_read and prot_write, to specify that the pages may be read or written. prot defaults to prot_read | prot_write\n")

2、開啟乙個記憶體影射檔案,並操作

3、修改記憶體,就是修改檔案

#!/usr/bin/env python

#-*- coding:utf-8 -*-

import mmap

with open("hello.txt", "r+") as f:

mm = mmap.mmap(f.fileno(), 30,access=mmap.access_write)

print(mm[:])

mm[6:15] = b'specifies' #索引從0開始的

更多

mmap記憶體對映

記憶體對映是個很有用,也很有意思的思想。我們都知道作業系統分為使用者態和核心態,使用者態是不能直接和物理裝置打交道的,如果想把硬碟的一塊區域讀到使用者態,則需要兩次拷貝 硬碟 核心 使用者 但是記憶體對映的設計只需要發生一次的拷貝,大大的提高了讀取資料的效率。那麼記憶體對映的原理和核心是如何實現的呢...

記憶體對映mmap

應用與裝置驅動之間資料互動,很多時候都使用copy to user與copy from user。但如果在追求高效能的驅動上,這種拷貝顯然不是最佳的做法。linux核心提供了一種記憶體對映的機制,它主要完成將裝置的位址空間對映到使用者空間或者直接使用使用者空間中的位址,這樣做的目的顯然是為了提公升系...

mmap記憶體對映

記憶體對映是個很有用,也很有意思的思想。我們都知道作業系統分為使用者態和核心態,使用者態是不能直接和物理裝置打交道的,如果想把硬碟的一塊區域讀到使用者態,則需要兩次拷貝 硬碟 核心 使用者 但是記憶體對映的設計只需要發生一次的拷貝,大大的提高了讀取資料的效率。那麼記憶體對映的原理和核心是如何實現的呢...