操作系统之页面置换算法(最佳置换OPT,先进先出FIFO,最近最久未使用LRU)


最近学习操作系统时,实验要求实现常见的三种页面置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续自己复习并也给需要的同学分享参考一下!水平有限,若有错,请悄悄告诉博主!博主好立即改正。

最佳置换算法(optimal replacement,OPT)是从内存中选择今后不再访问的页面或者在最长一段时间后才需要访问的页面进行淘汰。如下例子:

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #define N 12
  5 #define B 3
  6 using namespace std;
  7
  8 int pageArr[N]={1,2,3,4,1,2,5,1,2,3,4,5};//页面走向
  9 int block[B]={0};//物理块3个,其数值是页号
 10 typedef struct FLAG {
 11     int flags[B];
 12     int counts;
 13 } FLAG;
 14
 15 void opt(int pageArr[],int block[]);
 16 int inBlock(int which);
 17 int findFar(int next);
 18 void Replace(int index,int value);
 19 void disPlay();
 20
 21 int main(void){
 22     cout << "begin:" <<endl;
 23     opt(pageArr,block);
 24     cout << "end!" <<endl;
 25 return 0;
 26 }
 27
 28 void opt(int pageArr[],int block[]){
 29     int getIndex;
 30     for(int i=0;i<N;i++){
 31         if(i<3){//前3页号#短缺#进队列
 32             block[i]=pageArr[i];
 33             printf("缺页:(null)-->%d\n",pageArr[i]);
 34         }
 35         else {
 36             if(i==3){
 37                 disPlay();
 38
 39             }
 40             if(inBlock(pageArr[i])!=-1){//下一个页面if在物理块中返回index并跳过,反-1
 41                 disPlay();
 42
 43                 continue;
 44             }
 45             getIndex=findFar(i+1);//从下一个页号,找到最远出现的页面,替换的下标
 46             if(getIndex==-1){
 47                 cout<<"error,not replace obj!"<<‘\t‘;
 48             }
 49             else{
 50                 Replace(getIndex,pageArr[i]);//由下标找到上一组替换目标,用第二参数替换
 51                 disPlay();
 52
 53             }
 54         }
 55     }
 56 return;
 57 }
 58
 59 //替换block中的物理块
 60 void Replace(int index,int value){
 61     printf("缺页:%d--被替换为-->%d\n",block[index],value);
 62     block[index]=value;
 63 return;
 64 }
 65
 66
 67 //找到最远出现的页面
 68 int findFar(int next){
 69     int index=-1;//error,默认返回不存在的索引
 70     FLAG myflag;
 71     myflag.flags[0]=0;
 72     myflag.flags[1]=0;
 73     myflag.flags[2]=0;
 74     myflag.counts=0;
 75     int stop = N-next;
 76     while(stop--){
 77         index=inBlock(pageArr[next++]);
 78         if(index!=-1){
 79             myflag.flags[index]=1;
 80             myflag.counts++;
 81         }
 82         else if(myflag.counts==B-1){//有2个不缺值时
 83             break;
 84         }
 85     }
 86     for(index=0;index<B;index++){
 87         if(myflag.flags[index]==0)
 88             break;
 89     }
 90 return index;
 91 }
 92
 93
 94 //下一个页面if在物理块中返回index,反-1
 95 int inBlock(int which){
 96     //int i=0;
 97     //while(i<B)
 98     //    if(block[i++]==which)
 99     //    return i-1;
100     for(int i=0;i<B;i++){
101         if(block[i]==which)
102             return i;
103     }
104 return -1;
105 }
106
107 //打印一元组
108 void disPlay(){
109     int i=0;
110     while(i<B){
111         printf("%d\t",block[i++]);
112     }
113     printf("\n");
114 return;
115 }

上面是博主使用C++(基本是C语法)编写的代码,运行结果如下:

//////////////////////////////////////////////////////////////////////////

begin:
缺页:(null)-->1
缺页:(null)-->2
缺页:(null)-->3
1 2 3
缺页:3--被替换为-->4
1 2 4
1 2 4
1 2 4
缺页:4--被替换为-->5
1 2 5
1 2 5
1 2 5
缺页:1--被替换为-->3
3 2 5
缺页:3--被替换为-->4
4 2 5
4 2 5
end!

//////////////////////////////////////////////////////////////////////////

原文地址:https://www.cnblogs.com/ctrltab/p/10013815.html

时间: 2024-08-03 00:23:03

操作系统之页面置换算法(最佳置换OPT,先进先出FIFO,最近最久未使用LRU)的相关文章

页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)

页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:FIFO置换算法.LRU置换算法.LFU置换算法 最佳置换算法:不可能实现-->是衡量其他置换算法的方法. FIFO置换算法:先进先出置换算法,淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰.(实现简单) LRU置换算法:最近最久未使用置换算法,该算法赋予每个页面一个访问字段,用来记录一

操作系统之页面置换算法

在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入.这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断.操作系统在处理缺页中断时,要把所需页面从外存调入到内存中.如果这时内存中有空闲块,就可以直接调入该页面:如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换. 常见的页面置换算法有:先进先出法(FIFO).最佳置换法(OPT)和最近最少使用置换法(LRU).

存储器管理之页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间.而用来选择淘汰哪一页的规则叫做页面置换算法.常见的置换算法有: 1)最佳置换算法(OPT)(理想置换算法) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10.100或者1000条指令后才会被访问,

页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间.而用来选择淘汰哪一页的规则叫做页面置换算法.常见的置换算法有: 1)最佳置换算法(OPT)(理想置换算法) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10.100或者1000条指令后才会被访问,

虚拟内存之页面置换算法

四种页面置换算法: 最佳(OPT,Optional) 最近最少使用(LRU,Least Recently Used) 先进先出(FIFO,First In First Out) 时钟(Clock) 一.最佳置换算法 OPT 策略选择置换下次访问距当前时间最长的那些页,可以看出该算法能导致最少的缺页中断,但是由于它要求操作系统必须知道将来的事件,显然这是不可能实现的.但它仍然能作为一种标准来衡量其他算法的性能. 二.最近最少使用算法 LRU 策略置换内存中上次使用距当前最远的页.根据局部性原理,这

C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

目录 00 简介 01 算法概述 02 公用方法 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存的忙闲状态,为进程分配和释放内存.当主存的空间太小而无法装入所有的进程时,就需要在内存和硬盘之间进行调度操作. 多数操作系统只采用某种特定的页面置换算法进行置换,无法预先探测当前运行进程的页面访问模式,因此不能根据不同的页面访问模式,选用不同的页面置换算法.当然,如果能对不同的访问模式选取相应的页面置换算法,

[Operate System &amp; Algorithm] 页面置换算法

页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存中选择一个页面将其移出内存,以便为即将调入的页面让出空间.而用来选择淘汰哪一页的规则叫做页面置换算法.好了,说到底,页面置换算法就是因为操作系统的内部不够,在调入新的页面时如何取代哪个页面的问题.常见的页面置换算法有如下图所示几种: 上述的随机替换我们很容易理解,就是操作系统随机挑选的一个被

存储管理的页面置换算法

存储管理的页面置换算法在考试中常常会考到,操作系统教材中主要介绍了3种常用的页面置换算法,分别是:先进先出法(FIFO).最佳置换法(OPT)和最近最少使用置换法(LRU).大家要理解3种置换算法的含义,然后能熟练地运用在具体的练习中就可以了. 为什么要进行页面置换 在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入. 这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断.操作系统在处理缺页中断时,要把所需页面从外存

深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法

缺页中断(英语:Page fault,又名硬错误.硬中断.分页错误.寻页缺失.缺页中断.页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断. 通常情况下,用于处理此中断的程序是操作系统的一部分.如果操作系统判断此次访问是有效的,那么操作系统会尝试将相关的分页从硬盘上的虚拟内存文件中调入内存.而如果访问是不被允许的,那么操作系统通常会结束相关的进程. 虽然其名为“页缺失”错误,但实际上这并不一定是一种错误.而且这