题目描述:
在操作系统中,有一种虚拟内存管理技术是先进先出(FIFO)缓存。当所请求的存储页面不在缓存而缓存已满时,应该从缓存中移除持续时间最长的页面,以腾出空间给请求的页面。如果缓存未满,那么可以简单地将请求的页面添加到缓存,给定的页面应当在缓存中最多出现一次。当请求某个页面而在缓存中未找到此页面时发生缓存未命中。
给定缓存的最大尺寸和页面请求列表,计算缓存未命中数。
输入
函数/方法的输入包含三个参数:len,表示页面总数的整数;max_cache-size,表示最大缓存尺寸的整数;page_requests,表示len个页面的页面请求的整数列表。
输出
返回一个表示缓存中未命中的正整数。
代码:
bool checkof(int *a,int p,int num)//检查在a数组中是否出现过num
{
for(int i=0;i<p;i++)
{
if(a[i]==num)
return true;
}
return false;
}
int countCacheMiss(int max_cache_size,int *page_requests,int len)//主要函数
{
int *a=new int[max_cache_size];//表示缓存数组
for(int i=0;i<max_cache_size;i++)
{
a[i]=-1;//初始化
}
int p=0;
int count=0;
for(int i=0;i<len;i++)
{
if(p<max_cache_size)//缓存未满
{
if(!checkof(a,p,page_requests[i]))//如果未命中
{
a[p++]=page_requests[i];
count++;
}
}
else//缓存已满
{
if(!checkof(a,p,page_requests[i]))//如果未命中
{
for(int m=1;m<p;m++)//数组前移
{
a[m-1]=a[m];
}
a[p-1]=page_requests[i];
count++;
}
}
}
return count;
}
6万+



被折叠的 条评论
为什么被折叠?



