在windows上的解析:
页交换文件:是磁盘上的一块区域, windows当RAM使用;
从应用程序的角度来说,页交换文件以一种透明的方式增大了应用程序可用内存(或存储器)的总量。如果一台机器装备了1 GB的内存,硬盘上还有1 GB的页交换文件,那么应用程序会认为可用内存的总量为2 GB。
系统并没有从页交换文件中分配空间,而是将.exe文件的实际内容(或文件映像,即image类型)映射到一个地址空间(虚拟地址0x40000),并注明与该区域相关联的物理存储器就是.exe文件本身。
写时复制:
当系统把一个exe/dll 映射到一个地址空间后,系统会计算有多少页是可写的,然后系统会从页交换文件分配存储空间来容纳这些可写页;
当线程试图写入一个共享页时,系统会:
- 在虚拟内存中找到一个闲置页。(该闲置页就是上面说的,其后备页来自页交换文件)
- 把想要修改的内容复制到第一步找到的闲置页,并指定RW/ RWX 保护属性,系统不会对原始页的保护属性和数据做任何修改;(新页面不再以文件映像为后备存储器,而以页交换文件为后备存储页;)
- 然后,系统更新进程的页面表,这样一来,原来的虚拟地址现在就映射到内存中的一个新页面上了。进程就可以访问他自己的副本了。