Skip to content

Latest commit

 

History

History
20 lines (14 loc) · 1.19 KB

memory-mapping.md

File metadata and controls

20 lines (14 loc) · 1.19 KB

4.8 内存映射

内存映射中的“映射”主要指在一些实体(文件,设备,物理内存)和虚拟内存 region 之间建立联系。当 loader 填充进程的地址空间后,进程向操作系统请求某个页,这时候操作系统从文件系统把内容“投射”到进程的地址空间中---这就是内存映射的一个例子。

系统调用 mmap 就是用来做各种类型的内存映射的。调用它我们需要在第二章中介绍的同样的几个步骤。表 4-1 展示了该系统调用的参数。

Table 4-1. mmap 系统调用

REGISTER VALUE MEANING
rax 9 系统调用编号
rdi addr 操作系统尝试从这个指定的地址开始映射内存页。该地址应对应页的起始位置。传 0 表示操作系统可以选择任意起始位置。
rsi len 内存 region 大小
rdx prot 保护 flag(read, write, execute...)
r10 flags 公用 flag(共享还是私有还是匿名页,等等)
r8 fd 可选的需要映射的文件,该文件应该已经被 open 过了
r9 offset 文件中的偏移

调用 mmap 之后,rax 将持有一个指向新分配的内存页的指针。