0


操作系统实验之存储管理

一、实验目的

1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。

2、掌握请求页式存储管理中页面置换算法的模拟设计方法。

3、通过随机产生页面访问序列开展有关算法的测试及性能比较。

二、实验内容

设计一个虚拟存储区和内存工作区,并使用下述方法计算访问命中率。

①先进先出的算法(FIFO);

   ②最近最少少使用算法(LRU);

③最佳淘汰算法(OPT):选淘汰最不常用的页地址;

④最少访问页面算法(LFR);

⑤最近最不经常使用算法(NUR).

(其中③④为选择内容)

   命中率= 1 - 页面失效次数 / 页地址流长度

三、设计原理(或方案)及相关算法

1.fifo算法流程图

 ![](https://img-blog.csdnimg.cn/b5f87675241c43f69946f8d39bd46837.png)

2.Lru算法流程图

3.opt算法流程图

运行结果及分析:

分析:通过多次运行结果发现,OPT算法淘汰页面最少,命中率始终最高,FIFO算法和LRU算法命中率差不多,但是淘汰页面大有不同。

源程序:

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 320//随机数列的长度
#define B 4//内存的页面数
int IsInBuf(int buf[],int x)//返回某个数X有没有在缓冲区buf[]中
{
    int i,j=-1;
    for(i=0;i<B;i++)
    {
        if(buf[i]==x)
        {
            j=i;
            break;
        }else if(buf[i]==-1)
        {
            buf[i]=x;
            j=i;
            break;
        }

    }
    return j;
}
int oldest(int list[],int buf[],int f[],int start)//返回最近最久未使用的页面的位置
{
    int i,j;
    for(i=0;i<B;i++)
    {
        for(j=start;j<N;j++)
        {
            if(buf[i]==list[j])break;
        }
        f[i]=j;
    }
    return oldest2(f);
}
int oldest2(int f[])//返回最长时间不使用的页面的位置
{
    int i,j=0,max=-1;
    for(i=0;i<B;i++)
    {
        if(f[i]>max){max=f[i];j=i;}
        f[i]++;
    }
    return j;
}
void main()
{
    int list[N];
    int buf[B],f[B],i,j,k,max,min;
    int old=0;
    int change=0;
    printf("本程序假设内存为程序分配的内存块数是4!\n");
    srand((int)time(NULL));//生成一系列随机数并初始化环境
    for(i=0;i<B;i++)buf[i]=f[i]=-1;
    printf("产生的随机数列为:\n");
    for(i=0;i<N;i++)
    {
        list[i]=(int)rand()%10;//产生随机数列
        printf("%2d",list[i]);
    }
    printf("\n");
    printf("\nOPT淘汰页面的序列为:\n");
    change=0;
    for(i=0;i<B;i++)buf[i]=f[i]=-1;
    for(i=0;i<N;i++)
    {
        j=IsInBuf(buf,list[i]);
        if(j==-1)
        {
            old=oldest(list,buf,f,i);
            printf("%2d",buf[old]);
            buf[old]=list[i];
            f[old]=0;
            change++;
        }
        else
        {
            printf("");
        }
    }
    printf("\nOPT算法的命中率为:%f\n",1-(float)change/320);
    printf("\nFIFO淘汰页面的序列为:\n");
    change=0;
    for(i=0;i<B;i++)buf[i]=-1;
    for(i=0;i<N;i++)
    {
        j=IsInBuf(buf,list[i]);
        if(j==-1)
        {
            if(buf[old]==-1)printf("");
            else printf("%2d",buf[old]);
            buf[old]=list[i];
            old=(old+1)%(int)B;
            change++;
        }
        else
            printf("");
    }
    printf("\nFIFO算法的命中率为:%f\n",1-(float)change/320);
    printf("\nLRU淘汰页面的序列为:\n");
    change=0;
    for(i=0;i<B;i++)buf[i]=f[i]=-1;
    for(i=0;i<N;i++)
    {
        j=IsInBuf(buf,list[i]);
        old=oldest2(f);
        if(j==-1)
        {
            printf("%2d",buf[old]);
            buf[old]=list[i];
            f[old]=0;
            change++;
        }
        else
        {
            f[j]=0;
            printf("");
        }

    }
    printf("\nLRU算法的命中率为:%f\n",1-(float)change/320);
}

   
标签: 算法 c语言 vim

本文转载自: https://blog.csdn.net/guleilei0/article/details/128242934
版权归原作者 Forge ahead# 所有, 如有侵权,请联系我们删除。

“操作系统实验之存储管理”的评论:

还没有评论