操作系统v0.6(段页实际操作及内存换入换出)

引言

此篇承接操作系统v0.5的内容,是对应上篇内容的续集,主要还是描述内存管理部分的内容,但此篇主要涉及三个部分,分别如下

  • 段页实际操作
  • 内存换入(请求调页
  • 内存换出

段页实际操作

段页实际操作主要是通过虚拟内存来实现

问题引出

主要是说明段和页如何组合在一起使用,而这其中的关键便是虚拟内存

问题解决(虚拟内存)

虚拟内存引入后,如何重定位

思路:一级一级的索引即可

虚拟内存引入后,如何载入内存

虚拟内存引入后,如何内存管理

具体见下图连续的重点,如有疑惑,回去看视频

内存换入换出

概念引出

对于用户来说,只看见虚拟内存,而物理内存如何分配对用户是隐藏的,故当实际内存小于虚拟内存时,为了让用户依旧得到虚拟内存大小的内存体验,需要通过磁盘与物理内存进行换入换出,从而动态的交换内存,为用户实现虚拟内存大小的体验

请求调页逻辑概念实现

请求调页实际实现

内存换出概念引出

因为内存无法一直分配,故当内存达到一定限度时,必须要选择页对应的内存进行淘汰,从而维持系统的进行以及内存的使用,而淘汰方式主要有三种,分别如下,后续会进行介绍

  • FIFO
  • MIN
  • LRU

内存换出方法

  • FIFO

  • MIN

  • LRU

算法思想如下

准确实现如下,分别由时间戳以及页码栈实现

近似实现如下,目前使用的是经过优化的近似实现即最后所给出的实现方法

  • 通过循环队列来模拟最近访问的页,即可近似实现LRU,而最初的模拟会有一个问题,那就是当缺页很少时,其实循环队列保存的是长期的页的访问结果,不是最近的页的访问内容,这样就会将算法退化为FIFO
  • 解决上面提到的问题,只需要再利用一个指针,在一定规定时间内,定时清除对应页的R位,这样最后页的R位保留的就是最近的数据,也就能模拟LRU
  • 值得注意的是,清除指针速度要快,而淘汰指针速度要慢

给线程分配多少页框合适

见下图即可

总结

将内存的换入换出结合是为虚拟内存服务,而虚拟内存是为段页结合服务,段页结合是为程序服务,程序最终又会成为进程,如此便将进程与内存管理联系起来,形成一幅进程带动内存使用的多进程图像

end

评论