title: 操作系统实验五
categories:
- 操作系统实验
tags:
作业
某程序在内存中分配3块内存,初始为空,访问页的走向为2,3,2,1,5,2,4,5,3,2,5,2,用FIFO和LRU算法分别计算缺页次数。
有一虚拟存储系统,采用先进先出的页面淘汰算法。在内存中为每个进程分配3块。进程执行时使用页号的顺序为 4 3 2 1 4 3 5 4 3 2 1 5
(1)该进程运行时总共出现几次缺页。
(2)若每个进程在内存有4块,又将产生几次缺页。
(3)如何解释所出现的现象。
代码
#include <iostream>
using namespace std;
const int MaxBlock = 3;
const int pagelength=12;
int Requestpage[pagelength]={2,3,2,1,5,2,4,5,3,2,5,2};
void ahead(int block[])
{
for(int i=1;i<MaxBlock;i++)
{
block[i-1]=block[i];
}
}
void ahead(int block[],int set)
{
for(int i=set+1;i<MaxBlock;i++)
{
block[i-1]=block[i];
}
}
int FIFO()
{
int ShortagePage = MaxBlock;
int block[MaxBlock];
for(int i=0;i<MaxBlock;i++)
{
block[i]=Requestpage[i];
}
for(int i=MaxBlock;i<pagelength;i++)
{ bool ifexist=false;
for(int j=0;j<MaxBlock;j++)
{
if(Requestpage[i]==block[j])
{
ifexist=true;
break;
}
}
if(!ifexist)
{
ahead(block);
block[MaxBlock-1] = Requestpage[i];
ShortagePage++;
}
}
return ShortagePage;
}
int LRU()
{
int ShortagePage = MaxBlock;
int block[MaxBlock];
for(int i=0;i<MaxBlock;i++)
{
block[i]=Requestpage[i];
}
for(int i=MaxBlock;i<pagelength;i++)
{ bool ifexist=false;
int j=0;
for(;j<MaxBlock;j++)
{
if(Requestpage[i]==block[j])
{
ifexist=true;
break;
}
}
if(!ifexist)
{
ahead(block);
block[MaxBlock-1] = Requestpage[i];
ShortagePage++;
}
else
{
ahead(block,j);
block[MaxBlock-1]=Requestpage[i];
}
}
return ShortagePage;
}
int main()
{
cout<<"1.使用FIFO算法算缺页次数和缺页率\n2.使用LRU算法算缺页次数和缺页率\n请输入:";
int options;
cin>>options;
switch (options) {
case 1:{
cout<<"缺页次数为:"<<FIFO()<<"\t缺页率为:"<<FIFO()/1.0/pagelength;
break;
}
//TODO
case 2:
{
cout<<"缺页次数为:"<<LRU()<<"\t缺页率为:"<<LRU()/1.0/pagelength;
break;
}
default:
//TODO
break;
}
}