前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】内存管理系统调用 ① ( mmap 创建内存映射 | munmap 删除内存映射 | mprotect 设置虚拟内存区域访问权限 )

【Linux 内核 内存管理】内存管理系统调用 ① ( mmap 创建内存映射 | munmap 删除内存映射 | mprotect 设置虚拟内存区域访问权限 )

作者头像
韩曙亮
发布2023-03-30 14:30:30
1.3K0
发布2023-03-30 14:30:30
举报

文章目录

一、mmap 创建内存映射


mmap 系统调用函数 , 用于 创建 " 内存映射 " ;

该 " 系统调用 " 函数工作原理如下 :

首先 , 创建 " 匿名内存映射 “ , 将 ” 物理内存页 “ 映射到 进程的 ” 用户虚拟地址空间 " 中 ;

然后 , 将 指定文件 的 指定数据区间 映射到 " 用户虚拟地址空间 " 中 ;

此时 , 可以通过 指针 访问 内存的方式 , 访问文件 ;

mmap 函数原型如下 :

代码语言:javascript
复制
#include <sys/mman.h>
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

使用 mmap 系统调用 与 传统文件 操作 对比 :

传统的文件操作 , 首先调用 fopen 函数打开文件 , 然后调用 fread fwrite 等函数操作文件 , 这些操作 在 用户模式 下调用 , 然后需要 切换到 内核模式 下调用 Linux 内核中相应的文件操作 , 这里 涉及到 用户模式 和 内核模式 之间的 切换 ;

使用 mmap 系统调用 , 避免了 用户模式 与 内核模式 切换的开销 , 提高了文件操作的性能 ;

此外 , 多个进程之间 , 可以使用 mmap 系统调用 创建 共享的 " 文件映射 “ 类型的 ” 内存映射 “ , 进而实现了 ” 共享内存操作 " ;

二、munmap 删除内存映射


munmap 系统调用 的作用是 删除内存映射 , 其函数原型如下 :

代码语言:javascript
复制
#include <sys/mman.h>
int munmap(void* start,size_t length);

三、mprotect 设置虚拟内存区域访问权限


mprotect 系统调用 的作用是 设置虚拟内存区域访问权限 , 其函数原型如下 :

代码语言:javascript
复制
#include <sys/mman.h>
int mprotect(const void *addr, size_t len, int prot);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、mmap 创建内存映射
  • 二、munmap 删除内存映射
  • 三、mprotect 设置虚拟内存区域访问权限
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档