目录
第一段节选自《操作系统第7版》,帮助理解
虚拟内存引入的背景及意义:
1、当需要执行一个进程,它的逻辑地址空间大于可用物理地址空间时候,引入虚拟内存。
2、虚拟内存可用将大逻辑地址空间映射到小的物理内存。
3、虚拟内存允许极大的进程运行,提高了多道程序的程度,增加了CPU利用率;它使得程序员不必考虑内存可用性;虚拟内存允许进程共享系统库和内存;当父子进程共享内存页时,虚拟内存允许写时复制来创建进程。
虚拟内存的实现:
1、虚拟内存通常采用按需调页方式来实现,纯按需调页只有在引用页的时候才调入页。
2、写时复制
3、页面置换:当总的内存需求大于物理内存空间,那么有可能必须置换内存中的页以便为新页使用。
FIFO页置换算法:容易编程,但有Belady异常
最优页置换算法:需要将来的知识来预测。
LRU(最近最少使用)近似最优算法,很难实现。
4、帧分配:分配可以是固定的,如局部页置换;分配也可以动态的,如全局置换。工作集合假定进程在局部执行,那么每个进程应该为当前工作集合分配足够多的桢。如果进程没有足够多的内存以用于工作集合,就会造成颠簸。为进程提供足够多的内存可用避免颠簸,可能需要进程交换和调度。
5、内存映射文件功能:win32通过内存映射实现共享内存。
6、内核进程需要按物理连续分配内存,但是系统允许内核进程按2的幂次方来分配内存,因此产生碎片。
→采用slab分配器不会因为碎片问题产生内存浪费。因为slab分配器允许由slab组成的cache进行分配,每个slab由若干歌物理连续的页组成。