文章目录
什么是虚拟内存?
虚拟内存使应用程序能够拥有一个独立而连续的虚拟地址空间,其通过页表与硬件的配合,能够在对应用程序透明的前提下,自动地进行虚拟地址到物理地址的翻译。
使用虚拟内存技术之后,数据就不用一次性全部装入内存之中,需要用到的就放在内存,用不到的就放在磁盘,通过换入换出实现切换。使得可以使用的内存远远大于实际的物理内存。
虚拟内存下的页表
缺页中断
什么是缺页中断?
在请求分页系统中,当前进程要访问的页面不在内存时,便产生一个缺页中断,缺页的进程阻塞,放入阻塞队列,需要的页面从磁盘调入内存之后再将其唤醒,放回就绪队列
缺页中断处理总流程(重点)
页面置换算法(核心)
最佳置换算法OPT
最佳页面置换算法基本思路是:置换在「未来」最长时间不访问的页面。
所以,该算法实现需要计算内存中每个逻辑页面的「下一次」访问时间,然后比较,选择未来最长时间不访问的页面。
我们举个例子,假设一开始有 3 个空闲的物理页,然后有请求的页面序列,那它的置换过程如下图:
在这个请求的页面序列中,缺页共发生了 7 次(空闲页换入 3 次 + 最优页面置换 4 次),所以缺页率=7/13
这很理想,但是实际系统中无法实现,因为程序访问页面时是动态的,我们是无法预知每个页面在「下一次」访问前的等待时间。
最佳页面置换算法虽然无法实现,但是可以作为衡量算法效率的标准,你的算法效率越接近该算法的效率,那么说明你的算法就越高效的
先进先出置换算法—FIFO
每次选择淘汰的页面是最早进入内存的页面
Second Chance:
FIFO可能存在Belady现象,即为进程分配的内存块增加,缺页中断的次数不减反增。
比如上面例子中,现在分配四个内存块,缺页次数反倒为10次
最近最久未使用的置换算法LRU
基本思路是:
发生缺页时,选择最长时间没有被访问的页面进行置换,也就是说,该算法假设已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用。
这种算法与最优置换算法OPT类似,最优置换算法是通过「未来」
的使用情况来推测要淘汰的页面,而 LRU 则是通过「历史」
的使用情况来推测要淘汰的页面。
时钟置换算法—CLOCK
举例:
依次访问1,3,4,2,5并存入内存块,所以访问到6号页面时情况如下:
然后进过1轮之后访问位均成了0,并淘汰了1号页,存入6号页面,如下:
3,4都在内存中,所以没有缺页中断,到7号页时淘汰2号页,此时情况如下:
改进型时钟算法
颠簸现象与工作集
页面分配策略
驻留集、页面分配、置换策略
固定分配局部置换、可变分配局部置换、可变分配全局置换
可变全局和可变局部的对比:
何时调入页面?
从何处调页?
情况一:系统拥有足够的对换区空间
情况二:系统缺少足够的对换区空间
情况三:UNIX方式