欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

操作系统_存储管理_页面置换算法_先进先出页面置换算法

程序员文章站 2024-03-18 08:19:28
...


首先明确,我们要将页上的信息对应装入到物理块中

那么我们装入物理块中时,就首先要判断,物理块是否满,如果不满,写入,如果满,按照先进先出的原则,将物理块中的页替换出去

贴代码

#include<iostream>
#define N 200
using namespace std;

int page[N];//页面引用号 
struct block
{
	int block;
	int bt;
}b1[N];

int n;//页面引用号个数 
int m;//物理块数目 

void fifo()
{
	int j = 0;
	memset(b1, -1, sizeof(b1));   //将物理块清零  

	for (int i = 0; i < n; i++)
	{
		for (; j < m;)
		{	bool flag = false; 
			if (b1[j].block == -1)    //判断是否满 
				{
					b1[j].block = page[i];    //不满写进去  
					b1[j].bt = j;
					cout<<endl<<"当前内存中页面情况wu:"<<endl;     
					for(int x = 0; x < m; x++)
						cout<<b1[x].block<<" ";      //遍历  
					cout<<endl<<endl;
					j++;
					cout<<j<<endl;
					j = j%m ;
					flag = true;
					break;
				}
			//队满替换 
			if(!flag) 
			{	
				for(int k = 0; k < m; k++)          //将最先入队的覆盖,后面的以此往前提一个位置
					b1[k].block = b1[k+1].block;	
				b1[m-1].block = page[i];           //将新的写入最后一个位置

			}
			cout<<endl<<"当前内存中页面情况ti:"<<endl;
			for(int x = 0; x < m; x++)
				cout<<b1[x].block<<" ";
			cout<<endl<<endl;
			break;	
		}		
	}
}

int main()
{
    cin>>n>>m;
    for(int i=0; i < n; i++){ 
        cin>>page[i];
    } 
    fifo();
     return 0;
}