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流程

#嵌入式##嵌入式笔面经分享##牛客创作赏金赛#
全部评论

相关推荐

06-01 20:55
已编辑
门头沟学院 Java
辅助位:瞎扯蛋呢,打广告别误导别人好吧。就一个仿b站项目吹出天来了,之前免费的时候下载下来看了,bug都一大堆,八股的话还不如看某coding,只背总结的热门面试题真的行吗😅
点赞 评论 收藏
分享
Frank_zhang:有的兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务