操作系统页面置换算法实现

 

1.LRU算法:

算法原理不再论述,此处只写实现。

#include <iostream>
#include<map>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
#define PAGESIZE 3  //内存中的最大页数
int find(const vector<int>& vec,int x){
    if(vec.size()==0) return -1; //无内容
    else {
        for (int i = 0; i < vec.size(); i++)
        {
            if (x == vec.at(i))
            {
                return i;
            }

        }
    }
    return -1;//找不到
}

int LRU(int N){             //以离栈顶距离判断时间长短
    vector<int> memory; //内存
    vector<int> pages;    //页块
    int p;
    int x;
    int lackpage = 0;
    for(int i = 0;i < N;i++){
        cout << "请输入页号" <<endl;
        cin >> p;
        if(find(memory,p)!= -1 ){   //找到即该页存在
            x = find(memory,p);     //返回该页索引
            memory.erase(memory.begin()+x); //把其在栈中删除
            memory.push_back(p);            //将其压入栈顶
        }
        else{   // 该页不存在
            lackpage ++;                //  缺页数加1
            cout<<"第"<<lackpage<<"次缺页:"<<p<<endl;
            if(memory.size()<PAGESIZE){ //并且内存中有空余
                memory.push_back(p);    //放进内存尾,压栈
            }
            else{                       //内存不足,需要淘汰索引为0的页面
                                        //所有元素向下移动,即覆盖。
                for(int i = 0;i < PAGESIZE;++i){    //
                    memory[i]=memory[i+1];
                }
                memory.erase(memory.begin()+PAGESIZE-1);    //栈里面腾位置给栈顶
                memory.push_back(p);                        //把此页面放栈顶
            }

        }

    }
    return lackpage;

}

int main(int argc, char *argv[]) {
    int N;  //页面置换总数
    cout << "请输入页面置换总数";
    cin >> N;
    int missPage = LRU(N);

    cout << missPage << endl;
    return 0;
}

2.FIFO算法

同为C实现

// FIFO
int FIFO(int N){
	 vector<int> memory; //内存堆栈
    int p;
    int x;
    int lackpage = 0;
    for(int i = 0;i < N;i++){
        cout << "请输入页号" <<endl;
        cin >> p;
		x = find(memory,p);//在内存中找到该页	
		if(x == -1)										//找不到该页,开始置换
		{		
			lackpage++;
			 cout<<"第"<<lackpage<<"次缺页:"<<p<<endl;
			 if(memory.size()<PAGESIZE)					//内存中有空位
			 {
				 memory.push_back(p);					//入队,到队尾
			 }
			 else										//内存不足,需要淘汰掉最先进来的页面,即索引为0的;
			 {
														//需要页面置换
				 memory.erase(memory.begin());			//淘汰最先进来的页面 即队首的页面'
				 memory.push_back(p);					//把页面p放入队尾;

			 }

					
		}
	}
	return lackpage;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值