Linux Kernel Development (Second Edition) [Electronic resources]

Robert Love

نسخه متنی -صفحه : 215/ 132
نمايش فراداده

munmap() and do_munmap(): Removing an Address Interval

The do_munmap() function removes an address interval from a specified process address space. The function is declared in <linux/mm.h>: int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) The first parameter specifies the address space from which the interval starting at address start of length len bytes is removed. On success, zero is returned. Otherwise, a negative error code is returned.

The munmap() System Call

The munmap() system call is exported to user-space as a means to allow processes to remove address intervals from their address space; it is the complement of the mmap() system call: int munmap(void *start, size_t length) The system call is defined in mm/mmap.c and acts as a very simple wrapper to do_munmap():

asmlinkage long sys_munmap(unsigned long addr, size_t len) { int ret; struct mm_struct *mm; mm = current->mm; down_write(&mm->mmap_sem); ret = do_munmap(mm, addr, len); up_write(&mm->mmap_sem); return ret; }