在操作系统内核里面,我们可以非常灵活的使用虚拟内存的页表,比如我们可以用Lazy Allocation的策略,当应用程序申请堆空间的时候不会立刻给它分配,从而将分配的时间移到了当真的需要读/写这个地址空间时候,发生页表中断,然后陷入内核,这个时候会为这个地址分配一个物理页并且进行页表的映射,这就是所谓的Lazy,再比如,操作系统会使用Copy-and-Write策略,当fork出一个进程的时候,不会立刻将父进程的所有地址空间拷贝,而是只申请页表空间,将子进程的页表与父进程的页表设置成一样的映射,这样只有发生需要写地址的时候会发生中断从而重新申请内存。那么用户程序能否也从灵活的虚拟内存中获得这样的收益呢?
基于这样的出发点,为了支持应用程序使用虚拟内存,*nix系统创建了一个也许也是最重要的一个系统调用,它叫做mmap。
下面我将会详细的介绍mmap,它的具体实现以及它的一些优点。