[os] 内存管理

进程地址空间

https://www.jianshu.com/p/d63b00630a3c

虚拟内存:

基于局部性原理,我们在装入进程到内存的时候可以只将进程的启动那部分代码装入内存,就可以启动进程,操作系统提供请求调页和页面置换功能;

请求调页: 当进程在运行过程中需要使用外存的数据时,系统会将外存的页调入到内存中
页面置换: 当内存不足时,需要通过页面置换算法选择暂时不用的页放到外存;

缺页中断机制: 当访问一个页时,会通过页表的状态位判断当前这个页是否在内存中,如果不在,会触发一个缺页中断,内核会阻塞当前进程,执行IO操作,将外存的页调入到内存,如果内存不够,会通过页面置换算法置换出一个页;

页式存储

在这里插入图片描述
快表:如果没有快表,每一次地址转换都需要访问两次内存,一次查页表项,一次查物理地址
在这里插入图片描述

二级页表

在这里插入图片描述

段式内存管理

在这里插入图片描述

段页式存储

在这里插入图片描述

页面置换算法

1. 最佳

OPT, Optimal replacement algorithm

所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

2. 最近最久未使用

LRU, Least Recently Used

虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。

为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。

因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。

4. 先进先出

FIFO, First In First Out

选择换出的页面是最先进入的页面。

该算法会将那些经常被访问的页面也被换出,从而使缺页率升高。

5. 第二次机会算法

FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:

当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。

6. 时钟

Clock

第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值