前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )

【Linux 内核 内存管理】munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )

作者头像
韩曙亮
发布2023-03-30 14:47:05
1.8K0
发布2023-03-30 14:47:05
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、munmap 系统调用函数执行流程


munmap 系统调用函数 的作用是 " 删除内存映射 " , 该函数有

2

个参数 , 分别是 unsigned long addrsize_t, len , 前者是 内存映射 的 起始地址 , 后者是 内存映射 的 长度 ;

munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap 函数 ,

do_munmap 函数 是 删除 内存映射 的 核心函数 ;

二、munmap 系统调用函数源码


munmap 系统调用函数 , 定义在 Linux 内核源码 linux-4.12\mm\mmap.c#2729 位置 ;

munmap 系统调用函数源码如下 :

代码语言:javascript
复制
SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
{
	profile_munmap(addr);
	return vm_munmap(addr, len);
}

源码路径 : linux-4.12\mm\mmap.c#2729

在这里插入图片描述
在这里插入图片描述

三、vm_munmap 函数源码


vm_munmap 函数 , 定义在 Linux 内核源码 linux-4.12\mm\mmap.c#2713 位置 ;

vm_munmap 函数 中 , 调用了 do_munmap 函数 ,

do_munmap 函数 是 删除 内存映射 的 核心函数 ;

vm_munmap 函数源码如下 :

代码语言:javascript
复制
int vm_munmap(unsigned long start, size_t len)
{
	int ret;
	struct mm_struct *mm = current->mm;
	LIST_HEAD(uf);

	if (down_write_killable(&mm->mmap_sem))
		return -EINTR;

	ret = do_munmap(mm, start, len, &uf);
	up_write(&mm->mmap_sem);
	userfaultfd_unmap_complete(mm, &uf);
	return ret;
}

源码路径 : linux-4.12\mm\mmap.c#2713

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、munmap 系统调用函数执行流程
  • 二、munmap 系统调用函数源码
  • 三、vm_munmap 函数源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档