記憶體對映函式mmap, 負責把檔案內容對映到程序的虛擬記憶體空間,通過對這段記憶體的讀取和修改,來實現對檔案的讀取和修改,而不需要再呼叫read, write等。
addr: 指定起始位址,通常設為null,由系統指定
length: 對映到記憶體的檔案長度
port:對映區的保護方式可以為以下:
prot_exec:對映區可被執行
prot_read:對映區可被讀取
port_write:對映區可被寫入
flags:
map_shared:寫入對映區的資料會複製回檔案,且允許其他對映該檔案的程序共享。
map_private:對對映區的寫入操作會產生乙個對映區的複製(copy-on-write),對此區域所做的修改不會回寫回去。
特點:回寫時不會修改原檔案的長度。
返回值為起始位址
解除對映 int munmap(*start, length)
取消引數start所指向的對映記憶體,引數length表示欲取消的記憶體大小
程序的記憶體映像的組成:程式**、資料、bss和棧區間
檢視虛擬記憶體區域 /proc/pid/maps
檢視的組成
start_end perm offest major:minor inode
start:該區域起始虛擬位址
perm:讀、寫和執行許可權,表示對這個區域,允許程序做什麼。這個域的最後乙個字元要麼是p表示 私有的,要麼是s表示共享的。
major、minor:主次裝置號
inode:索引結點
核心裡面的mmap
對映乙個裝置是指把使用者空間的一段位址關聯到裝置記憶體上。當程式讀寫這段使用者空間的位址時,它實際上是訪問裝置。
mmap裝置方法要做的是建立虛擬位址到實體地址的頁表。
int (*mmap)(struct file *, struct vm_area_struct *)
mmap頁表的建立:
1、使用remap_pfn_range 一次建立所有的頁表
2、使用nopage vma方法每次建立乙個頁表
mmap裝置方法筆記
void mmap void addr,size t len,int prot,int flags,int fd,off t offset 引數 addr 指定對映的起始位址 通常不指定 通常為null 由系統指定 length 對映到記憶體的檔案長度 prot 對映區的保護方式 prot exec...
mmap裝置方法筆記
void mmap void addr,size tlen,intprot,intflags,intfd,off toffset 引數 addr 指定對映的起始位址 通常不指定 通常為null,由系統指定 length 對映到記憶體的檔案長度 prot 對映區的保護方式 prot exec 對映區可...
mmap函式的使用方法
unix網路程式設計第二卷程序間通訊對mmap函式進行了說明。該函式主要用途有三個 1 將乙個普通檔案對映到記憶體中,通常在需要對檔案進行頻繁讀寫時使用,這樣用記憶體讀寫取代i o讀寫,以獲得較高的效能 2 將特殊檔案進行匿名記憶體對映,可以為關聯程序提供共享記憶體空間 3 為無關聯的程序提供共享記...