本节课,我们要介绍几个对虚拟内存进行系统级控制的系统调用,合理使用它们,能极大地提高应用的执行效率,增强应用的安全性,主要包括以下几方面内容:
- 内存映射
- 内存保护
- 内存锁定
13.1 内存映射
13.1.1 概述
内存映射的功能是在进程的内存映射表中建立一条新的映射表项,也就是分配一块新的虚拟内存给调用进程。并且,可以指定内存内容与某个文件内容相对应。
提供内存映射功能的系统调用是:
void * mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
其中:
- 参数 addr 指定期望的映射目标地址,如果给 addr 传递 NULL,则表示让内核选择一个合适的地址;
- 参数 length 指定要映射的数据的字节数,内核会把它对齐到内存页大小的下一个倍数;
- 参数 prot 指定地址映射之后的访问权限,它的取值可以是 PROT_NONE,或者 PROT_READ、PROT_WRITE、PROT_EXEC 几种值的任意组合;
- 参数 fd 指定要映射的文件;
- 参数 offset 指定映射内容在文件中的偏移量。