实验八:请求分页系统页面淘汰算法
内容:设计页表结构,编制一个请求分页的仿真程序,通过指令访问随机的虚页。通过页面
映射,判断是否命中当前工作集中的实页。如果没有命中,则从自由队列获得一个空闲内存
页;如果工作集中的实页总数已满,则采用某一淘汰算法实施页面置换。
要求:用链表表示虚存页面表和主存页面表,通过不断地调用指令,查看是否能够命中主存
中的相关页面,并计算命中率。若出现页面置换情况,采用 FIFO 算法进行。
#include
#include
#include
#include
using namespace std;
float count=0,sum=0,pre;
struct node{
int num;
struct node *next;
};
struct node* creat(int n)//链表的录入,内存初始化
{
struct node *head,*p,*q;
head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
q = head;
for(int i = 1;i<=n;i++)
{
cout<<"请输入第"<num);
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
void show(struct node *head)//链表的输出
{
struct node*tail;
tail = head->next;
while(tail!=NULL)
{
if(tail->next==NULL)
printf("%d\n",tail->num);
else
printf("%d ",tail->num);
tail = tail->next;
}
}
void search(struct node *head,int k){
struct node *p,*q;
int flag=0;
p=head->next;
while(p){
if(p->num==k) {
cout<<"命中!"<next;
}
if(flag==0){
cout<<"未命中!执行页面置换!"<next;
while(p->next!=NULL){
p=p->next;
}
q=head->next;
head->next=q->next;
free(q);
q=(struct node*)malloc(sizeof(struct node));
q->num=k;
q->next=NULL;
p->next=q;//接到尾部
}
}
int main()
{
int n,p,k;
cout<<"内存初始化,输入内存中原有的块数:";
scanf("%d",&n);
struct node *head;
head = creat(n);
show(head);
//页表初始化
int a[10][2];
for(int i=0;i<10;i++)
for(int j=0;j<2;j++)
a[i][j]=i;
while(true){
cout<<"请输入你要查找的页号:";
cin>>k;
sum++;
search(head,k);
show(head);
pre=count/sum;
cout<<"命中率:"<< setprecision(2)<