引言
此篇承接操作系统v0.5的内容,是对应上篇内容的续集,主要还是描述内存管理部分的内容,但此篇主要涉及三个部分,分别如下
- 段页实际操作
- 内存换入(请求调页)
- 内存换出
段页实际操作
段页实际操作主要是通过虚拟内存来实现
问题引出
主要是说明段和页如何组合在一起使用,而这其中的关键便是虚拟内存
问题解决(虚拟内存)
虚拟内存引入后,如何重定位
思路:一级一级的索引即可
虚拟内存引入后,如何载入内存
虚拟内存引入后,如何内存管理
具体见下图连续的重点,如有疑惑,回去看视频
内存换入换出
概念引出
对于用户来说,只看见虚拟内存,而物理内存如何分配对用户是隐藏的,故当实际内存小于虚拟内存时,为了让用户依旧得到虚拟内存大小的内存体验,需要通过磁盘与物理内存进行换入换出,从而动态的交换内存,为用户实现虚拟内存大小的体验
请求调页逻辑概念实现
请求调页实际实现
内存换出概念引出
因为内存无法一直分配,故当内存达到一定限度时,必须要选择页对应的内存进行淘汰,从而维持系统的进行以及内存的使用,而淘汰方式主要有三种,分别如下,后续会进行介绍
- FIFO
- MIN
- LRU
内存换出方法
- FIFO
- MIN
- LRU
算法思想如下
准确实现如下,分别由时间戳以及页码栈实现
近似实现如下,目前使用的是经过优化的近似实现即最后所给出的实现方法
- 通过循环队列来模拟最近访问的页,即可近似实现LRU,而最初的模拟会有一个问题,那就是当缺页很少时,其实循环队列保存的是长期的页的访问结果,不是最近的页的访问内容,这样就会将算法退化为FIFO
- 解决上面提到的问题,只需要再利用一个指针,在一定规定时间内,定时清除对应页的R位,这样最后页的R位保留的就是最近的数据,也就能模拟LRU
- 值得注意的是,清除指针速度要快,而淘汰指针速度要慢
给线程分配多少页框合适
见下图即可
总结
将内存的换入换出结合是为虚拟内存服务,而虚拟内存是为段页结合服务,段页结合是为程序服务,程序最终又会成为进程,如此便将进程与内存管理联系起来,形成一幅进程带动内存使用的多进程图像
评论