引入虚拟内存的实际内存管理及其实现基础

在前一段时间分别学习了面向开发人员的分段载入思想和面向内存的分页思想。在计算机实际的内存管理中,往往是两者兼具,联系它们之间的桥梁就是虚拟内存,而虚拟内存的实现离不开内存的换入换出。因此,以虚拟内存为桥梁,同时实现程序分段和内存分页思想便构成了操作系统的内存管理图像。

一.段页结合的内存管理机制

在这里插入图片描述
在段页式系统的内存管理图像中,逻辑地址结构由三部分组成:段号、页号和页内偏移量。它们所占的位数直接决定了分段、分页和页内容量的最大程度分段机制对于用户是显式可见的,但是分页机制却是由系统自动完成的,系统将根据段号信息直接分配页号和页内偏移,整个过程对于程序员来说是不可见的。

二.内存换入

在实际使用中,程序所占用的空间大小往往是大于实际的内存大小的。一种简单的解决方案是:当某一段程序段需要使用的时候,再将代码从磁盘中读取出来放入内存当中,并且只对当前使用的程序段建立虚拟内存和物理内存之间的页表映射。
该过程实现的关键步骤是请求调页
在这里插入图片描述
系统读入代码中的逻辑地址,通过PCB查询到基地址信息,再经过段内偏移得到虚拟地址,查询页表寻找关于物理地址的映射。如果发生缺页,则进行中断处理,从磁盘中去请求调页,映射到实际的物理地址。

三.内存换出

(1)LRU算法思想

内存换入的思想非常成功地建立了程序虚拟内存和物理地址之间的映射,但是内存不能不限换入,必须得有换出。而内存换出要考虑的最重要的问题是换出哪一段页表对全局最有利。
最完美的置换算法是MIN算法,将最远使用的页表淘汰,效率最高。但是MIN算法需要预先知道未来页表的使用情况,因此,实际上该方案并不可行。
不过,根据局部性原理,可以在一定程度预测将来的一个情况,模拟MIN的算法思想,即LRU算法思想
在这里插入图片描述

(2)LRU算法实现

LRU的准确实现算法频繁修改数据或指针会严重影响执行效率,因此采用以Clock算法为核心的近似实现。

核心思想:系统每访问一页时就将对应的R设为一,在各个分页对应的R之间以队列的形式首尾相连形成闭合回路。中间的指针指向不断沿着队列移动,将R=1的位置置为0,如果连续两次R都为0,则将该页面换出。

这种通过给予二次机会再换出的思想近似地淘汰了最近一段时间出现较少的页表。

算法分析与改进:实际系统中缺页发生的概率是比较低的,指针移动一圈的过程中系统又使用了太多的分页,导致R刚被置换成0,立刻就又回到了1,最终该算法不断淘汰的是指针起始指向位置对应的分页,退化成了原始的先进先出结构。引入一个移动速度迅速的扫描指针将R置为0,原指针用于淘汰页表,成功地解决了该问题。
在这里插入图片描述
为了让CPU利用率达到较高的水平,我们还应该控制并发进程的数量。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46550452/article/details/108354638