虚拟内存与写时复制

Posted 西邮菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟内存与写时复制相关的知识,希望对你有一定的参考价值。

一、什么是虚拟内存:

之前记录了虚拟内存如何映射到物理内存的方式(内存管理方式):分段和分页。但是这两个策略都有相同的目标,就是同时将多个进程保存在内存中,以便允许多道程序然而,这些策略都倾向于要求每个进程在执行之前应完全处于内存中。而虚拟内存技术则可以允许内存不必完全处于内存,就是执行的指令应处于物理内存中

二、虚拟内存的优点:

运行的程序可以远大于物理地址,使我们不必担忧内存容量的限制,它实现的原理就是局部性原理。

给每个进程都分配一个4G的看似连续的虚拟内存空间。

方便内存共享,文件共享等。

它保护了每个进程的地址空间不被其他进程破坏。

三、局部性原理

在程序整个运作过程中,程序引用的不同页面的总数可能超出了物理内存的总大小,但是局部性原则可以保证在任意时刻,程序将趋向于在一个较小的活动页面集合上工作。如果程序有很好的时间局部性,那么虚拟内存就会工作的很好,但是时间局部性差的话,会不停的产生页面置换,这样会产生“抖动”。

四、写时复制

进程在执行fork时只是把父进程的虚拟内存拷贝给子进程,父进程与子进程共用同一块物理内存,把这段内存设为只读内存,如果两个进程需要写这里的物理内存时会发生页错误中断,取消内存共享,给写的进程分配一个新的物理页面,并设置两个内存为可读可写,然后执行写操作。

以上是关于虚拟内存与写时复制的主要内容,如果未能解决你的问题,请参考以下文章

虚拟内存与进程地址空间

JAVA中写时复制(Copy-On-Write)Map实现

Linux写时复制(CopyOnWrite)|写时拷贝|rcu

Python写时复制或访问时复制共享内存

PHP 内存管理 写时复制 垃圾回收

Ring3下绕过Windows写时复制机制实现全局EAT钩子