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 将持有一个指向新分配的内存页的指针。

results matching ""

    No results matching ""