页式存储管理(FIFO算法)

今天,第一次写博客,有点小激动。
这次的题目是页式存储管理,要求输入内存页面数,进程访问序列个数以及进程的页号,根据FIFO算法求出淘汰页号,缺页页号,缺页次数,缺页率,默认内存3个物理块,且是单进程。本次实验用到了队列,将物理块中页号,淘汰的页号,缺页号压入队列,最后打印出来,并根据缺页队列长度计算缺页率。

#include <iostream>
#include<queue>
using namespace std;
int main(){
//输入内存页面数,进程访问序列个数以及进程的页号,根据FIFO算法求出淘汰页号,缺页页号,缺页次数,缺页率
//默认内存有3个物理块,单进程
queue<int> pro;   //物理块队列
queue<int> th;    //淘汰队列
queue<int> nopage;//缺页队列
int page, num,nopagenum;
cout << "请输入内存页面数:";
cin >> page;
cout << endl;
cout << "请输入进程访问序列的个数:";
cin >> num;
cout << endl;
int *process;
process = new int[num];
cout << "请依次输入进程的页号:";
for (int i = 0; i < num; i++){
cin >> process[i];
} 
cout << endl;
//FIFO算法
int a = process[0];
int b = process[1];
int c = process[2];
pro.push(a);
pro.push(b);
pro.push(c); 
//缺页处理
for (int i = 3; i < num; i++){
if (process[i] != a && process[i] != b && process[i] != c){ 
pro.pop();            //淘汰物理块队列中队首元素,队首是最先进来的,因此最先淘汰
pro.push(process[i]); //将缺页号压入物理块队列队尾,这是此时3个物理块中的页号
th.push(a);    //将淘汰页号压入淘汰队列
a = b;
b = c;
c = process[i];
nopage.push(process[i]);//将缺页号压入缺页队列
}
}
nopagenum = nopage.size()+3;  //接下来要返回缺页队列队首元素并删除,删除后队列为空,
                        //因此要先取出该队列长度 ,最先访问3个页号时,物理块为空,因此缺页次数+3
cout << "淘汰的页号依次为:";
while (!th.empty()){
cout << th.front() << " ";//依次返回淘汰队列队首元素,队首是最先从物理块中淘汰的
th.pop();               //将刚才的队首删除,使得队首后面的元素成为队首
}
cout << endl; 
cout << "缺页的页号依次为:" << process[0] << " " << process[1] << " " << process[2] << " ";
while (!nopage.empty()){
cout << nopage.front() << " ";//依次返回缺页队列队首元素
nopage.pop();
}
cout << endl;
cout << "缺页次数为:" << nopagenum << endl;
cout << "缺页率为:" << nopagenum /(double) num<<endl;
system("pause");
return 0;
}

这里写图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值