网站建设脱颖而出/seo模拟点击有用吗
FIFO算法
FIFO算法是最简单的页面置换算法。FIFO算法为每个页面记录了调到内存的时间。当必须置换页面的时候,选择最旧的页面。
通俗来说,每次进入主存的时候
- 如果主存中不存在这个页面,那么最先进入的页面出队。
- 如果主存存在这个页面,那么内存不动。
下面是C++面向对象写法代码。
这个说明一下为什么不用容器Queue。是因为queue并没有迭代器,所以无法去寻找里面是否含有某块页面。
直接使用线性表即可,方便简单且快速。
// 在分页式虚拟存储管理中,要求通过键盘输入分配给一个作业的物理块数和作业依次访问的10个页面号,
// 采用先进先出(FIFO)页面置换后
// ,顺序输出缺页中断时所淘汰的页面号,并计算缺页中断率。
#include <iostream>using namespace std;
#define MAX 20
class Work
{
public:void seta(){int c, i = 1;cout << "输入10个页面号,以任意符号结尾" << endl;cin >> c;a[0] = c;while (cin >> c){a[i] = c;i++;}}void geta(){cout << "10个页面号分别为: ";for (int i = 0; i < 10; i++){cout << a[i] << " ";}cout << endl;}int index(int i){return a[i];}
~Work(){cout<<"work 已被释放"<<endl;
}
private:int a[10];
};class space
{
public: // 初始化构造函数,把除了物理块大小的其他空间都设置成其他值// 将初始化空间设置成-1space(int i){size=i;for (int j = 0; j < i; j++){s[j] = -1;}s[i] = -999;}// 显示物理块现在的状态void getSpace(){int i=0;cout<<"-------------物理块现在的状态是-------------"<<endl;while(s[i]!=-999){if(s[i]==-1){cout<<"NaN"<<" -||- ";i++;continue;}cout<<s[i]<<" -||- ";i++;}cout<<endl;cout<<"------------------------------------------"<<endl;}int find(int n){for(int i=0;i<size;i++){if(s[i]==n){return i;}}return -1;}// 先进先出,去掉第一个物理块,改变最后一个物理块。void change(int n){for(int i=0;i<size;i++){s[i]=s[i+1];}s[size-1]=n;}~space(){cout<<"space 已被释放"<<endl;}
private:int s[MAX];int size;
};void FIFO(Work &a,space &s){int i=0;int local;int count=0;while(i<10){if(s.find(a.index(i))==-1){// 如果在物理块里面找不到作业s.change(a.index(i));// 那么就将物理块改变s.getSpace();count+=1;}else{s.getSpace();}i++;}double q;q=(double)count/10;cout<<"----------------------------------"<<endl;cout<<"缺页中断的次数为: "<<count<<endl;cout<<"缺页终端率为: "<<q<<endl;cout<<"----------------------------------"<<endl;}int main()
{Work a;int num=0;cout<<"输入物理块数的个数"<<endl;cin>>num; space s(num); a.seta();a.geta();FIFO(a,s);return 0;
}