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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )相关的知识,希望对你有一定的参考价值。

文章目录





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



munmap 系统调用函数 的作用是 " 删除内存映射 " , 该函数有 2 2 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 系统调用函数源码如下 :

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 函数源码如下 :

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

以上是关于Linux 内核 内存管理munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )的主要内容,如果未能解决你的问题,请参考以下文章

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

Linux 内核 内存管理内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

Linux 内核 内存管理内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

Linux 内核 内存管理内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )

Linux内存管理 mmap(补充)

linux mmap系统调用