首先明确,我们要将页上的信息对应装入到物理块中
那么我们装入物理块中时,就首先要判断,物理块是否满,如果不满,写入,如果满,按照先进先出的原则,将物理块中的页替换出去
贴代码
#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; }