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

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

计算机操作系统Demo07——引入虚拟内存的实际内存管理及其实现基础
在实际的操作系统中,用户将程序分段载入虚拟内存,系统将代码中的逻辑地址映射成虚拟地址(32位机中虚拟内存大小为2^32=4G),再将虚拟地址进行分割,查询相应页表,映射到实际的物理地址。

二.内存换入

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

三.内存换出

(1)LRU算法思想

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

(2)LRU算法实现

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

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

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

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

相关文章:

  • 2022-01-15
  • 2021-12-22
  • 2021-06-11
  • 2021-12-04
  • 2022-12-23
  • 2022-12-23
  • 2021-06-12
  • 2021-10-13
猜你喜欢
  • 2021-09-19
  • 2021-08-18
  • 2021-07-08
  • 2021-12-29
  • 2021-06-12
  • 2021-12-06
相关资源
相似解决方案