Windows内存管理方式:段式存储,页式存储,段页式存储
普通的存储管理系统中,作业存储时需要占用一个连续的存储区,当一个作业的大小大于任何一个空闲存储区时,就不能将作业装入运行,即使内存中所有的空闲区之和远远大于作业的大小。如果我们可以将作业拆分成小块放入内存的碎片中,那么就可以运行了。在这个思想上,我们引入了页式存储,段式存储,段页式存储。
页式存储管理
普通页式存储管理是将内存和作业都分割成大小相同的页框和页,被分割后的作业可以不连续的放在内存的页框中,但是运行之前需要将作业全部装载到内存中。而虚拟页式存储管理(请求页式存储管理)中作业不需要一次性装入内存中,开始运行时只需要将起始页装入内存中,运行过程中发生缺页中断后,再使用请求调页或者页面置换的功能将需要的页面放入内存中。
常用的几种页面调度算法:
FIFO:先进先出算法(会出现Belady异常现象,即当分配给进程的物理页面数增加时,缺页次数反而增加)。
LRU:最不经常使用算法
段式存储管理
我们都知道,在程序存储时会分为代码段,数据段,堆栈段等。如果采用页式存储管理,代码在逻辑上会变的不清晰。这里我们就引入了段式存储管理。段式存储管理是讲作业按照功能分为大小不同的几个段,在程序执行之前,一次性将这些段按照一定的规则放入内存中。(虚拟段式原理与页式相同)
程序加载时的内存分配算法:
最先适应算法:从头开始寻找,找到第一个大于加载段的内存块放入。
下次适应算法:每次寻找时从上次放入加载段的地址开始寻找,知道找到一个大于本次加载段的内存块放入。
最佳适应算法:遍历内存块,找到大于加载段的内存块中最小的一块放入。
段页式存储管理
段页式存储管理是虚拟页式和虚拟段式的结合,他结合了两者的优点,同时克服了两者的缺点。段页式存储管理对于用户来说是以段为逻辑单位进行划分的,对于系统来说是以页来划分每一段的。