页式存储管理(FIFO算法)

来源:互联网 发布:ubuntu删除谷歌输入法 编辑:程序博客网 时间:2024/06/05 22:43

今天,第一次写博客,有点小激动。
这次的题目是页式存储管理,要求输入内存页面数,进程访问序列个数以及进程的页号,根据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个页号时,物理块为空,因此缺页次数+3cout << "淘汰的页号依次为:";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;}

这里写图片描述

2 0
原创粉丝点击