Linux内核 内存管理(8)mmap
1.mmap 函数参数介绍
・addr: 用于指定映射到进程地址空间的起始地址,为了应用程序的可移植性,一般设置为 NULL,让内核来选择一个合适的地址。
・ length: 表示映射到进程地址空间的大小。
・prot: 用于设置内存映射区域的读写属性等。
・flags: 用于设置内存映射的属性,例如共享映射、私有映射等。
・fd: 表示这个是一个文件映射,fd 是打开文件的句柄。
・offset: 在文件映射时,表示文件的偏移量。
1.1mmap 函数中 prot 参数的作用及取值,prot 参数用于表示 mmap 映射页面的读写权限
常见取值有 PROT_EXEC(页面可执行)、PROT_READ(页面可读)、PROT_WRITE(页面可写)、PROT_NONE(页面不可访问)
1.2 flags 参数
・flags 参数也是一个很重要的参数,有如下常见参数。
➢ MAP_SHARED: 创建一个共享映射的区域。多个进程可以通过共享映射方式来映射一个文件,这样其他进程也可以看到映射内容的改变,修改后的内容会同步到磁盘文件中。
➢ MAP_PRIVATE: 创建一个私有的写时复制的映射。多个进程可以通过私有映射的方式来映射一个文件,这样其他进程不会看到映射内容的改变,修改后的内容也不会同步到磁盘文件中。
➢ MAP_ANONYMOUS: 创建一个匿名映射,即没有关联到文件的映射。
➢ MAP_FIXED: 使用参数 addr 创建映射,如果在内核中无法映射指定的地址 addr,那 mmap 会返回失败,参数 addr 要求按页对齐。如果 addr 和 length 指定的进程地址空间和已有的 VMA 区域重叠,那么内核会调用 do_munmap () 函数把这段重叠区域销毁,然后重新映射新的内容。
2.mmap流程