介绍
使用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语言怎么编写一个页面置换算法