mmap内存映射
2016-02-18 21:56
489 查看
mmap
将一个文件或者其它对象映射进内存
mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较在用户空间和内核空间互相拷贝数据,效率更高
mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap
fd:即将映射到进程空间的文件描述字,一般由open()返回
len:映射到调用进程地址空间的字节数
offset:被映射文件开头offset个字节开始。一般设为0,表示从文件头开始映射
prot :指定共享内存的访问权限
PROT_READ(可读)
PROT_WRITE (可写)
PROT_EXEC (可执行)
PROT_NONE(不可访问)
flags:MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用
addr:指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成
返回值:文件映射到进程空间的地址
munmap
删除特定地址区域的对象映射
内核与用户空间通讯
内核空间申请内存
kmalloc和__get_free_pages:< 896M 且虚拟地址和PA都连续。返回的是虚拟地址
vmalloc():高端内存分配 > 896M 虚拟地址是连续,PA不一定连续
将一个文件或者其它对象映射进内存
mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较在用户空间和内核空间互相拷贝数据,效率更高
mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap
void* mmap ( void * addr, size_t len, int prot, int flags, int fd, off_t offset )
fd:即将映射到进程空间的文件描述字,一般由open()返回
len:映射到调用进程地址空间的字节数
offset:被映射文件开头offset个字节开始。一般设为0,表示从文件头开始映射
prot :指定共享内存的访问权限
PROT_READ(可读)
PROT_WRITE (可写)
PROT_EXEC (可执行)
PROT_NONE(不可访问)
flags:MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用
addr:指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成
返回值:文件映射到进程空间的地址
munmap
删除特定地址区域的对象映射
int munmap( void * addr, size_t len )
内核与用户空间通讯
#include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/mm.h> static int __init init(void) { //分配共享内存(一个页面) p = __get_free_pages(GFP_KERNEL, 0); //#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT)) SetPageReserved(virt_to_page(p)); printk("<1> p = 0x%08x\n", p); //在共享内存中写上一个字符串 strcpy(p, "Hello world!\n"); return 0; } static void __exit exit(void) { ClearPageReserved(virt_to_page(p)); free_pages(p, 0); } module_init(init); module_exit(exit);
内核空间申请内存
kmalloc和__get_free_pages:< 896M 且虚拟地址和PA都连续。返回的是虚拟地址
vmalloc():高端内存分配 > 896M 虚拟地址是连续,PA不一定连续
相关文章推荐
- 理解 B*tree index内部结构
- Javascript 中神奇的 this
- SPOJ COT(树上的点权第k大)
- spring hibernate4整合问题
- Image Sub-pixel interpolation by Verilog
- 研发团队常用工具集整理
- SPOJ COT(树上的点权第k大)
- final、finally、finalize的区别
- Redis教程(十一):虚拟内存介绍:
- Redis教程(十一):虚拟内存介绍:
- 解决kvm虚拟机中的鼠标偏移问题
- Queue and stack
- Maven实战——生命周期和插件
- popen+pclose 执行 shell 命令
- 大型网站技术架构读书笔记01—大型网站架构演化史
- iOS 最新版 CocoaPods 的安装流程
- python实现键盘记录木马
- Java byte数据类型详解
- ts
- 51单片机data,idata,xdata,pdata的区别