使用C语言怎么编写一个页面置换算法

  介绍

使用C语言怎么编写一个页面置换算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>操作系统实验

页面置换算法(FIFO、LRU选择)

<强>概念:

1。最佳置换算法(选择)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
2。先进先出置换算法(FIFO):是最简单的页面置换算法。这种算法的基本思想的是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
3。最近最久未使用(LRU)算法:这种算法的基本思想的是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。

<强>题目:

编写一个程序,实现本章所述的FIFO、LRU和最优页面置换算法。首先,生成一个随机的页面引用串,其中页码范围为0 - 9。将这个随机页面引用串应用到每个算法,并记录每个算法引起的缺页错误的数量。实现置换算法,一遍页面帧的数量可以从1 ~ 7 .

# include  & lt; stdio.h>   # include  & lt; stdlib.h>   # include  & lt; time.h>      int 数字[20]={7 0 1 2   ,,,,0 3 0 4,   ,,,,2,3,0,3,   ,,,,,1,2,0,   ,,,,1,,0,1};//本地数据,与课本一致,方便测试   int  num=0;//输入栈的个数,为了方便使用,   int 堆栈[20][7]={10};      void 开始();   void  randomnum();//用于产生随机数   void  init();//初始化   void  FIFO ();//FIFO算法   void  LRU ();//LRU算法   void 选择();//最优页面置换算法(选择)   void  print();//输出      int  main (), {   ,开始();   ,FIFO ();   ,LRU ();   ,选择();   ,return  0;   }   void 开始()//开始菜单界面   {   ,int  i, j, k;   ,printf(“请输入页面帧的数量(1 - 7):“);   ,scanf (“% d",, num);   ,(k=0;; k + +)   ,{   ,,printf(“是否使用随机数产生输入串(0:是,1:否)“);   scanf才能(“% d",, j);   如果才能(j==0)   {才能   ,,randomnum ();   ,才能打破;   ,,}   else 才能;如果(j==1)   {才能   ,才能打破;   ,,}   其他的才能   {才能   ,,printf(“请输入正确的选择! \ n");   ,,}   ,}      ,printf(“页面引用串为:\ n");   ,(我=0;i<20;我+ +)   ,{   ,,printf (“% d “数字[我]);   ,}   ,printf (“\ n");   ,init ();   }   void  randomnum()//如果需要使用随机数生成输入串,调用该函数   {   ,将srand(时间(0));//设置时间种子   ,(int 小姐:=,0;,小姐:& lt;, 20;,我+ +),{   数字才能[我],=,rand(), %, 10;//生成区间0”9的随机页面引用串   ,}   }   void  init()//用于每次初始化页面栈中内容,同时方便下面输出的处理   {   ,int  i, j。   ,(我=0;i<20;我+ +)   ,,(j=0; j使用C语言怎么编写一个页面置换算法