【操作系统】页面置换算法

1、页面置换算法是干嘛的

虚拟页式存储管理的基本工作原理:在进程运行之前,不是装入全部页面,而是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。

在使用虚拟页式存储管理时需要在页表中增加一些内容,得到页表的内容如下:
页号、驻留位、内存块号、外存地址、访问位、修改位
其中驻留位,又称中断位,表示该页实在内存中还是外存中;访问位表示该页在内存期间是否被访问过,称为R位;修改位表示改业在内存中是否被修改过,称为M位。

访问位和修改位可以用来决定置换哪个页面,比如说第二次机会页面置换算法。

缺页中断:在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生缺页中断。

当发生缺页中断时,操作系统必须在内存中选择一个页面将其移除页面,以便即将调入的页面让出空间。

2、页面置换算法

(1)理想页面(OPT:optimal)

这是一种理想情况下的页面置换算法,但实际上是不可能实现的。

该算法的基本思想:发生缺页时,有些页面在内存中,其中有一页将很快被访问(包含紧接着 的下一条指令的那页),而其他页则可能到10、100或1000条指令后才会被访问,每个页都可以用在该页面首次被访问前所要执行的指令数进行标记。标记树最大的页应该被置换。

举例:如果某页在八百万条指令内不会被使用,另外一页在六百万条指令不会被使用,则置换前一个页面。

这个算法无法实现,因当缺页中断时,系统无法知道各个页面下一次在什么时候被访问。

(2)先进先出(FIFO:First-In First-Out)

先进先出页面置换算法总是选择最先装入内存的一页调出,或者说是把驻留在内存中时间最长的一页调出。

FIFO算法简单,容易实现。以把装入内存的那些页面的页号按进入的先后次序排好队列,每次总是调出队首的页。当系统维护一个所有当前在内存中的页面的链表,最老的页面在头上,最新的页面在表尾。当发生缺页时,淘汰表头的页面并把新调入的页面加到表尾。

(3)最近最少使用(LRU:Least Recently Used)

最近最少使用页面置换算法总是选择距离现在最长时间内没有被访问过的页面先调出。

(4)第二次机会页面置换算法

FIFO算法可能会吧经常使用的页面置换出去,为了避免这一问题,对该算法进行简单的修改:检查最老页面的R位,如果R位是0,那么这个页面又老有没用,可以立即置换出去,如果是1,就清零R位,并将该页放到链表的尾端,修改它的装入时间使它就像装入的一样,然后继续搜索。如果所有的页面都被访问过,那么该算法就被降为纯粹的FIFO算法。

(5)时钟页面置换算法

由于第二次机会页面置换算法要经常在链表中移动页面,降低了效率。一个更好的办法,将所有的页面存在一个类似钟表面的环形链表中。

(6)最近未使用(NRU:Not Recently Used)

用R位和M位构造一个简单的页面置换算法:当启动一个进程时,它的所有页的两个位都由操作系统设置成0,R位被定期的清零,以区别最近没有被访问的页和被访问了的页。
根据R位和M位,分为4类页面
第0类:没有被访问,没有被修改
第1类,没有被访问,被修改
第2类,被访问,没有被修改
第3类,被访问,被修改。

NRU算法随机地从编号最小的非空类中挑选一个页淘汰之。这个算法隐含的意思是,淘汰一个在最近一个时钟周期内没有被访问过的已修改页要比淘汰一个被频繁访问的干净的页好。

Belady异常现象

从直觉上看,在内存中的物理页面数越多,程序的缺页次数应该越少,但是实际情况并不是这样。

Belady在1969年发现一个反例,使用FIFO算法时,四个页框时缺页次数比三个页框时多。这种奇怪的情况称为Belady异常现象

计算缺页次数

题目:某程序在内存中分配3页,初始为空,页面走向为4、3、2、1、4、3、5、4、3、2、1、5。计算缺页次数。

理想置换算法的缺页次数
替换上一次出现的页面,

这里写图片描述

FIFO缺页次数
先进来的页,先出去。

这里写图片描述

最近最少使用

看最上边的页面走向,相比当前页数远的置换出去。

这里写图片描述

题目2
.在一个请求页式存储管理中,一个程序的页面走向为3,4,2,1,4,5,4,3,5,1,2,并采用LRU算法。社分配给该程序的存储块数 S 分别为 3 和 4,在该访问中发生的缺页次数 F ?

S = 3,F = 8;

这里写图片描述

S = 4,F = 7。

这里写图片描述

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本实验使用一下算法 使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存中发生页面置换的过程。 整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法。 页面置换算法 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。 随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存 Clock置换算法:为进入内存的页面设置一个访问,当内存中某页被访问访问置一,算法在选择一页淘汰时,只需检查访问,若为0,则直接换出,若为1,置该访问为0,检测内存中的下一个页面的访问。 改进型Clock置换算法: ①从查寻指针当前置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转② ② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问置0;若不能找到,转①
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值