(文章原理待更新)
模拟分页式存储管理中硬件的地址转换和产生缺页中断,然后分别用LRU、FIFO、改进型的CLOCK算法实现分页管理的缺页中断。
要求:显示每个页面在内存中的绝对地址,页表信息、列出缺页情况等。
#include<iostream>
#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<stack>
#include<time.h>
#define Max 1024
using namespace std;
int len;
int str[Max];///页面号序列
int block;///系统为进程分配的物理块
int que[Max];///模拟队列
struct Page
{
int sta;///内存位当前状态
int A;///访问位
int M;///修改位
int tim;///距离上一次访问时长
int dis;///距离上一次访问距离
} Q[Max];
void init()
{
printf("请输入页面号序列长度:");
cin>>len;
printf("请输入页面号引用串序列:");
for(int i=1; i<=len; i++) cin>>str[i];
printf("请输入系统为进程分配的物理块:");
cin>>block;
for(int i=0; i<=block; i++)
que[i]=-1;///初始值置为-1代表当前物理块为空
}
void print(int x)
{
printf("当前需访问第 %d 页 ",str[x]);
for(int i=1; i<=block; i++)
{
printf("[%3d] ",que[i]);
}
puts("");
}
void FIFO()
{
printf("选择使用FIFO算法进行页面置换\n");
init();
int flag=1;///记录要进行页面置换的位置
for(int i=1; i<=len; i++)
{
int j;
int ok=0;
for(j=1