页面淘汰算法实验报告

合集下载

页面置换算法实验报告

页面置换算法实验报告

页面置换算法实验报告
一、实验内容
本次实验主要围绕页面置换算法进行,以实验课本的实例介绍,采用FIFO页面置换算法对后面提到的参数进行置换,最终得出页面置换的结果和比较所得结果。

二、实验步骤
(一) 熟悉FIFO算法
首先是要了解FIFO页面置换算法,FIFO全称(First In First Out),按页面进入内存的顺序来替换相应内存页面,先进先出,将先进入内存的页面先替换出去。

(二) 阅读实验课本
在阅读实验课本之前要先熟悉实验书上所介绍的FIFO算法,然后在实验书上找出需要做的实验,并对实验环境和表格进行观察,掌握实验的基本内容。

(三) 开始页面置换
在开始实验之前,熟悉实验环境,根据实验书上的参数,首先模拟进程分配内存,根据FIFO算法去进行计算,根据上表中的参数去比较,最后得出最终结果。

(四) 在本次实验的补充
这次实验中,可以把FIFO的概念应用到实际应用中,也可以模拟不同情况,例如改变页面的大小,观察不同页面置换算法的结果,实验出最合适的结果。

三、实验结论
本次实验是为了了解FIFO页面置换算法,实验出最终的结果,最后得出页面置换的结果及比较结果。

先进先出页面置换算法实验报告电子版

先进先出页面置换算法实验报告电子版




先进先出页面置换算法,该算法淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。




#include "stdafx.h"
#include<stdio.h>
#define M 20
#define N 3
void FIFO(int a[N],int b[M])
{
int i,j,k;
}
printf("\n"); }
s=k*1.0/M;
printf("中断次数为:%d\n",k);
printf("缺页率为:%f\n",s);
}
void main()
{int a[N]={0,0,0};
int b[M]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
FIFO(a,b);
}





通过实验更加了解了各种页面置换算法之间的区别。在实验中,不知道如何来选择是否要置换,后想到可以另加一个数组存0,1,用以标记是否发生缺页中断。
int c[M]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float s;
for(i=0;i<N;i++)
{
a[i]=b[i];
for(j=0;j<=i;j++)
{
printf("%d ",a[j]);
}
printf("\n");
}
k=N;

页面置换算法 实验报告(DOC)

页面置换算法 实验报告(DOC)

综合性实验报告一、实验目的1.学习常见的4种页面置换算法:最佳置换算法(OPT),先进先出页面置换算法(FIFO),最近最久未使用页面算法(LRU),最少使用置换算法(LFU)。

2.编写函数并计算输出上述各种算法的命中率。

二、总体设计(设计原理、设计方案及流程等)设计原理:OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。

因此如何找出这样的页面是该算法的关键。

可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。

FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。

LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。

该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上次的访问时间,因此,当须淘汰一个页面时,选择处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。

LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter),一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。

设计流程:1.通过随机数产生一个指令序列,共320条指令。

2.指令序列变换成页地址流3.计算并输出下述各种算法在不同内存容量下的命中率。

4.在主函数中生成要求的指令序列,并将其转换成页地址流;在不同的内存容量下调用上述函数使其计算并输出相应的命中率。

【精品】页面置换算法实验报告

【精品】页面置换算法实验报告

【精品】页面置换算法实验报告一、实验目的了解操作系统中的页面置换算法,并实现FIFO、LRU和Clock算法。

二、实验原理页面置换算法是操作系统中用到的一种算法,其作用是在内存不够用时,选择牺牲已经在内存中的一些页,腾出更多的空间给新的内容。

本次实验主要实现了FIFO、LRU和Clock算法。

1、FIFO算法FIFO算法是最简单的页面置换算法,它采用先进先出的原则,即最先进入内存的页面应该最早被替换出去。

该算法的实现非常简单,只需要维护一个队列即可。

当需要置换页面时,选择队列的第一个页面进行替换即可。

2、LRU算法LRU算法是Least Recently Used的缩写,即最近最少使用算法。

该算法的核心思想是选择最久没有被使用的页面进行替换。

为了实现该算法,需要维护记录页面使用时间的链表、栈或队列等结构。

3、Clock算法Clock算法也叫做二次机会算法,是一种改良的FIFO算法。

它是基于FIFO算法的思想,并且每个页面都设置了一个使用位(use bit),用于记录该页面是否被使用过。

当需要置换一个页面时,检查该页面的使用位,如果该页面的使用位为1,则将该页面的使用位设置为0并移到队列的末尾,表示该页面有“二次机会”继续待在内存中;如果该页面的使用位为0,则选择该页面进行替换。

三、实验过程本次实验采用Python语言实现页面置换算法,并使用样例进行测试。

1、FIFO算法实现FIFO算法的实现非常简单,只需要用一个队列来维护已经在内存中的页面,当需要置换页面时,选择队列的第一个元素即可。

代码如下:```pythonfrom collections import dequeclass FIFO:def __init__(self, frame_num):self.frame_num = frame_numself.frames = deque(maxlen=frame_num)def access(self, page):if page in self.frames:return Falseif len(self.frames) >= self.frame_num:self.frames.popleft()self.frames.append(page)return True```2、LRU算法实现LRU算法的实现需要维护一个记录页面使用时间的链表或队列。

一种量化的页面淘汰算法

一种量化的页面淘汰算法
相 比, L U2 时间上节省 1 ~3 %。 ER 在 5 O
Ab ta tLRU-ki n ft emo twi ey a pid p g -e lcme tag rt msi h d r p r t g s se n sr c : so eo h s d l p l a erpa e n lo i e h n temo en o eai y tmsa d n d tb s y tm s Ho v r aa aes se . we e ,wi heice n fte n mb r o eo d r trg e ie a ig dfee tra - i t t n rme to h u e fs cn ay so a ed vcs h vn i rn e dwrt h f e s e d h y tm ,t ed a ak o RU- h t n ytefe u n yo e e tp g eee csi a e t c o n Op e p e si t es se n h rwb c fL kt a l rq e c frc n a erfrn e stk n i oa c u tt r — o h n
dc h o a e n t e n a u u e i o n p I hs p p r u n i t n ag rt m a d EL itt eh t g s i h e r f t r s c mi g u . n t i a e ,a q a tz i l o i p ao h n me RUK s p o o e o i r p sd f r
mo e i c m nyu e r y tm i i ee t id f eo d r trg e i sd mo sr t h t RU 尼i j s a d ls o mo l sd f s se w t df r n n s c n ay so a ed v e e n t e t a L - s u t o a h f k o s c a s

页面置换算法实验报告实验心得

页面置换算法实验报告实验心得

页面置换算法实验报告实验心得
1. 实验背景
页面置换算法是操作系统中的重要概念,主要用于解决内存不足的问题。

它通过将当前不需要的页面从内存中移出,以腾出空间给即将到来的页面。

本次实验主要是通过模拟不同页面置换算法的过程,来更好地了解和掌握这些算法的实现原理及其优缺点。

2. 实验过程
本次实验中,我们使用了三种页面置换算法,分别是最优页面置换算法(OPT)、先进先出页面置换算法(FIFO)和最近最久未使用页面置换算法(LRU)。

在模拟的过程中,我们需要先给每个页面设置一个访问时间,然后根据不同算法的实现原理来决定哪个页面被置换出去。

通过实验,我们发现不同的算法在不同情况下的效果也会不同。

比如,当页面访问时间相对均匀分布时,FIFO算法的效果会比较好,而当页面访问时间存在一定规律性时,LRU算法的效果则会更好。

而OPT 算法则需要未来时间的信息,一般情况下难以实现,但是在某些特殊情况下,它也可以发挥出比较好的效果。

3. 实验心得
通过本次实验,我更深入地了解了页面置换算法的实现原理,学会了如何根据不同算法的特点来选择合适的算法来解决内存不足的问题。

在实验过程中,我也学会了如何使用Python编程语言来模拟不同算法的过程,提高了我的编程能力。

通过不断地调试和实验,我还学会了如何发现问题和解决问题的方法,这对我今后的学习和工作都大有裨益。

总之,本次实验不仅加深了我对操作系统中重要概念的理解,也提高了我的编程和分析问题的能力,让我对未来的学习和工作充满信心和热情。

分页置换实验报告

分页置换实验报告

一、实验目的1. 理解分页置换算法的基本原理及其在虚拟内存管理中的作用。

2. 掌握几种常见的分页置换算法(如FIFO、LRU等)的模拟实现方法。

3. 分析不同分页置换算法的性能差异,并评估其在实际应用中的适用性。

二、实验原理分页置换算法是虚拟内存管理中的一种关键技术,其主要目的是在有限的物理内存中模拟更大的内存空间,以满足程序对内存的需求。

当物理内存不足时,系统会根据一定的置换算法选择某些页面进行淘汰,以腾出空间给新的页面。

常见的分页置换算法包括:1. FIFO(先进先出)算法:根据页面进入内存的顺序进行淘汰,即先进入内存的页面先被淘汰。

2. LRU(最近最少使用)算法:淘汰最近一段时间内最长时间未被访问的页面。

3. OPT(最佳置换)算法:淘汰未来最长时间内不再被访问的页面。

三、实验内容1. FIFO算法实现:模拟FIFO算法,记录缺页中断次数和缺页率。

2. LRU算法实现:模拟LRU算法,记录缺页中断次数和缺页率。

3. 性能对比分析:对比FIFO和LRU算法的性能差异,分析其适用场景。

四、实验步骤1. 数据准备:生成一系列页面访问序列,用于模拟分页置换过程。

2. FIFO算法模拟:- 初始化一个固定大小的内存缓冲区。

- 遍历页面访问序列,对于每个页面:- 检查是否已在内存缓冲区中。

- 如果不在,则将内存缓冲区中最先进入的页面淘汰,并将当前页面加入内存缓冲区。

- 记录缺页中断次数。

3. LRU算法模拟:- 初始化一个内存缓冲区,并维护一个访问顺序链表。

- 遍历页面访问序列,对于每个页面:- 检查是否已在内存缓冲区中。

- 如果不在,则将内存缓冲区中最少访问的页面淘汰,并将当前页面加入内存缓冲区。

- 更新访问顺序链表。

- 记录缺页中断次数。

4. 性能对比分析:- 对比FIFO和LRU算法的缺页中断次数和缺页率。

- 分析两种算法的性能差异及其适用场景。

五、实验结果与分析1. FIFO算法:FIFO算法简单易实现,但性能较差。

实验三页面置换算法

实验三页面置换算法

操作系统实验报告班级:姓名:学号:实验三:页面置换算法一、实验目的1、熟悉内存分页管理策略。

2、编写OPT、FIFO、LRU,LFU四种置换算法并模拟实现。

3、锻炼知识的运用能力和实践能力。

二、实验内容设计主界面,输入一串系列模拟页面请求,实现以下算法:1) 最佳置换算法(OPT):将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。

2) 先进先出算法(FIFO):淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

3) 最近最久未使用算法(LRU):淘汰最近最久未被使用的页面。

4) 最不经常使用算法(LFU)三、代码及运行结果分析#include <stdio.h>#include <stdlib.h>int mSIZE;int pSIZE;static int memery[10]={0};static int page[100]={0};static int temp[100][10]={0};void FIFO();void LRU();void OPT();void print(unsigned int t);void read();void mDelay(unsigned int Delay);int main(){int i,k,code;printf("请输入物理块的个数(M<=10):");scanf("%d",&mSIZE);printf("请输入页面号引用串的个数(P<=100):"); scanf("%d",&pSIZE);puts("请依次输入页面号引用串:");for(i=0;i<pSIZE;i++)scanf("%1d",&page[i]);read();do{puts("输入的页面号引用串为:");for(k=0;k<=(pSIZE-1)/20;k++){for(i=20*k;(i<pSIZE)&&(i<20*(k+1));i++){if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))printf("%d\n",page[i]);elseprintf("%d ",page[i]);}}printf("---------------------------------------------\n");printf("* 请选择页面置换算法:\t\t\t *\n");printf("* ----------------------------------------- *\n");printf("* 1.先进先出(FIFO) 2.最近最久未使用(LRU) *\n"); printf("* 3.最佳(OPT) 4.退出*\n");printf("--------------------------------------------\n");printf("请选择操作:[ ]\b\b");scanf("%d",&code);switch(code){case 1:FIFO();break;case 2:LRU();break;case 3:OPT();break;case 4:system("cls");exit(0);default:printf("输入错误,请重新输入:");}printf("按任意键重新选择置换算法:>>>"); getchar();}while (code!=4);getchar();}void read(){int i;for(i=0;i<51;i++)printf("\b");for(i=0;i<50;i++) {mDelay((pSIZE+mSIZE)/2);printf(">"); }printf("获取成功,按任意键进入置换算法选择界面:");getchar(); }void mDelay(unsigned int Delay){unsigned int i;for(;Delay>0;Delay--){for(i=0;i<124;i++){printf(" \b");}}}void print(unsigned int t) {int i,j,k,l;int flag;for(k=0;k<=(pSIZE-1)/20;k++){for(i=20*k;(i<pSIZE)&&(i<20*(k+1));i++){if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1))) printf("%d\n",page[i]);elseprintf(" %d ",page[i]);}for(j=0;j<mSIZE;j++){for(i=20*k;(i<mSIZE+20*k)&&(i<pSIZE);i++) {if(i>=j)printf(" |%d|",temp[i][j]);elseprintf(" | |");}for(i=mSIZE+20*k;(i<pSIZE)&&(i<20*(k+1));i++) { for(flag=0,l=0;l<mSIZE;l++)if(temp[i][l]==temp[i-1][l])flag++;if(flag==mSIZE)/*页面在物理块中*/printf(" ");elseprintf(" |%d|",temp[i][j]);}if(i%20==0)continue;printf("\n");}}printf("----------------------------------------\n");printf("缺页次数:%d\t\t",t+mSIZE);printf("缺页率:%d/%d\n",t+mSIZE,pSIZE);printf("置换次数:%d\t\t",t);printf("访问命中率:%d%%\n",(pSIZE-(t+mSIZE))*100/pSIZE); printf("----------------------------------------\n");}/*计算过程延迟*/void compute(){int i;printf("正在进行相关计算,请稍候");for(i=1;i<20;i++){mDelay(15);if(i%4==0)printf("\b\b\b\b\b\b \b\b\b\b\b\b"); elseprintf("...");}for(i=0;i++<30;printf("\b"));for(i=0;i++<30;printf(" "));for(i=0;i++<30;printf("\b"));}void FIFO(){int memery[10]={0};int time[10]={0};int i,j,k,m;int max=0;int count=0;for(i=0;i<mSIZE;i++){memery[i]=page[i];time[i]=i;for(j=0;j<mSIZE;j++) temp[i][j]=memery[j];}for(i=mSIZE;i<pSIZE;i++) {for(j=0,k=0;j<mSIZE;j++) {if(memery[j]!=page[i])k++;}if(k==mSIZE){count++;max=time[0]<time[1]?0:1; for(m=2;m<mSIZE;m++) if(time[m]<time[max]) max=m;memery[max]=page[i]; time[max]=i;for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}else{for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}}compute();print(count);}/*最近最久未使用置换算法*/void LRU(){int memery[10]={0};int flag[10]={0}; /*记录页面的访问时间*/ int i,j,k,m;int max=0;int count=0;for(i=0;i<mSIZE;i++){memery[i]=page[i];flag[i]=i;for(j=0;j<mSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;i<pSIZE;i++){for(j=0,k=0;j<mSIZE;j++){if(memery[j]!=page[i])k++;elseflag[j]=i;}if(k==mSIZE){count++;max=flag[0]<flag[1]?0:1;for(m=2;m<mSIZE;m++)if(flag[m]<flag[max])max=m;memery[max]=page[i];flag[max]=i; /*记录该页的访问时间*/temp[i][j]=memery[j]; }else{for(j=0;j<mSIZE;j++) temp[i][j]=memery[j]; }}compute();print(count);}void OPT(){int memery[10]={0}; int next[10]={0};int i,j,k,l,m;int max;int count=0;for(i=0;i<mSIZE;i++) {memery[i]=page[i];temp[i][j]=memery[j];}for(i=mSIZE;i<pSIZE;i++) {for(j=0,k=0;j<mSIZE;j++) {if(memery[j]!=page[i])k++;}if(k==mSIZE){count++;for(m=0;m<mSIZE;m++) {for(l=i+1;l<pSIZE;l++)if(memery[m]==page[l]) break;next[m]=l;}max=next[0]>=next[1]?0:1;for(m=2;m<mSIZE;m++) if(next[m]>next[max]) max=m;for(j=0;j<mSIZE;j++) temp[i][j]=memery[j];}else {for(j=0;j<mSIZE;j++) temp[i][j]=memery[j];}}compute();print(count);}四、实验心得。

页面淘汰算法实验报告

页面淘汰算法实验报告

操作系统实验报告课题:页面淘汰算法专业:班级:学号:姓名:年月日目录一实验目的 (3)二实验要求 (3)三背景知识 (3)四总体设计 (4)五详细设计 (7)六运行结果分析 (9)七心得体会 (13)八参考文献 (14)附:源代码 (15)一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。

学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。

利用简单的数据结构,模拟实现操作系统中的页面置换机制,通过写程序模拟实现上述三种内存页面置换算法,使学生进一步掌握内存页面置换的方法。

对操作系统中内存的管理有一个实践上的认识。

1、用C语言编写OPT、FIFO、LRU三种置换算法。

2、熟悉内存分页管理策略。

3、了解页面置换的算法。

4、掌握一般常用的调度算法。

5、根据方案使算法得以模拟实现。

6、锻炼知识的运用能力和实践能力。

二、实验要求●设计随机页面序号产生程序,并说明随机的性能和其性能可能对算法的影响●编写页面淘汰算法(FIFO、OPT、LRU)●结果数据的显示或提取●结果数据的分析几点说明:●设计并绘制算法流程,附加说明所需的数据结构●如何标记时间的先后、最久的将来、最久未被使用●描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。

1)初始化:输入作业可占用的总页框数,初始化置空。

2)输入请求序列:输入一个作业页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock 算法,淘汰1个页面后装入新的页号。

4)显示当前分配淘汰序列:显示淘汰的页号序列。

三、背景知识:在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。

页面置换算法实验报告

页面置换算法实验报告

页面置换算法实验报告背景页面置换算法是计算机操作系统中的一个重要概念,它用于解决操作系统需要共享有限的物理内存资源给多个进程使用的问题。

在操作系统中,每个进程都有自己的虚拟地址空间,但实际的物理内存资源是有限的。

当物理内存不足时,操作系统需要根据一定的策略将一部分进程暂时从内存中移出,以便为其他进程让出空间,而后再从外存中将其重新加载到内存中。

这个过程就是页面置换。

页面置换算法有很多种,比如最优页面置换算法(Optimal)、先进先出页面置换算法(FIFO)、最近最久未使用页面置换算法(LRU)等等。

不同的算法对于系统性能、响应时间等指标有着不同的影响,因此在实际应用中需要选择合适的算法来平衡各种需求。

本实验旨在通过模拟页面置换算法,并对不同算法进行性能分析,以便了解各种算法的优缺点,为实际系统的选择提供依据。

分析在实验中,我们选择了三种常用的页面置换算法,分别是FIFO、LRU和Optimal。

下面对这三种算法进行详细的分析和说明。

先进先出页面置换算法(FIFO)FIFO算法是最简单和最直观的页面置换算法。

它按照页面进入内存的顺序来选择被淘汰的页面。

当内存不足时,选择最早进入内存的页面进行置换,即将其从内存中移出。

FIFO算法不需要进行进一步的页面访问计算,只需要维护一个页面进入内存的队列即可,因此实现起来比较简单。

然而,由于FIFO算法没有考虑页面的访问频率和重要性,所以可能会导致被频繁访问的页面被淘汰出内存,从而影响系统的性能。

最近最久未使用页面置换算法(LRU)LRU算法是一种基于”最近使用原则”的页面置换算法。

它根据页面最近被访问的时间来选择被淘汰的页面。

当内存不足时,选择最长时间未被访问的页面进行置换,即将其从内存中移出。

LRU算法需要维护一个页面访问时间的记录,以便在需要置换时能够快速找到最近最久未使用的页面。

相比于FIFO算法,LRU算法更加合理地利用了页面的访问情况,但实现起来相对复杂一些。

FIFO算法实验报告

FIFO算法实验报告

实验报告课程名称学生所在系部年级专业、班级学生姓名学号任课教师实验成绩软件工程系制一、实验题目:先进先出(FIFO)页面置换算法和最近最久未使用(LRU)置换算法程序设计二、实验目的:通过对FIFO,LRU算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。

三、实验设备及环境:1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。

四、实验内容及要求:(1)用C语言编程实现对FIFO,LRU算法的模拟。

(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:五、实验方法内容1.算法流程图2.主要的常量变量char a;int m=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5};主要模块void FIFO(void);void LRU(void);void Xunhuan()void main()四.代码#include"stdio.h"#include"stdlib.h"#include"time.h"void FIFO(void);void LRU(void);char a;int m=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5}; /*m为物理块数,n为要访问的页面数*/typedef struct page{int num;int time;}Page;Page x[10];int GetMax(page *x){int i;int max=-1;int tag=0;for(i=0;i<m;i++){if(x[i].time>max){ max=x[i].time;tag=i;}}return tag;}void Xunhuan(){printf("Please select 1:FIFO算法\n 2:LRU算法\n"); scanf("%s",&a);printf("物理块数:4\n");//scanf("%d",&m);for(i=0;i<m;i++){x[i].num=-1;}printf("所要访问的页面数:12\n");//scanf("%d",&n);//srand(time(NULL));printf("所要访问的页面号序列为:");for(i=0;i<n;i++)printf("%d ",y[i]);printf("\n");printf("页面置换步骤如下:\n");switch(a){case '1':FIFO();break;case '2':LRU(); break;}}void main(){char a;Xunhuan();while(1){printf("Continue or Exit:C/Anykey:\n");scanf("%s",&a);if(a=='c'||a=='C')Xunhuan();else break;}exit(0);}void FIFO(void){int i,j,u;for(i=0;i<m;i++)x[i].time=0;x[0].num=y[0];x[0].time=1;printf(" %d \n",x[0].num);for(i=1;i<n;i++){ u=0;for(j=0;j<m;j++)if(x[j].num==y[i]){u=1;break;}if(u!=1&&x[m-1].num!=-1){j=GetMax(x);x[j].num=y[i];x[j].time=0;}if(u!=1&&x[m-1].num==-1){for(j=0;j<m;j++){if(x[j].num==-1){x[j].num=y[i];break;}}}for(j=0;j<m;j++)if(x[j].num!=-1)x[j].time++;for(j=0;j<m;j++)if(x[j].num==-1)printf("%2c ",32);elseprintf("%2d ",x[j].num);printf("\n");}}void LRU(){int i,j,u;for(i=0;i<m;i++)x[i].time=0;x[0].num=y[0];x[0].time=1;printf(" %d \n",x[0].num);for(i=1;i<n;i++){ u=0;for(j=0;j<m;j++)if(x[j].num==y[i]){x[j].time=0;u=1;break;}if(u!=1&&x[m-1].num!=-1){j=GetMax(x);x[j].num=y[i];x[j].time=0;}if(u!=1&&x[m-1].num==-1){for(j=0;j<m;j++){if(x[j].num==-1){x[j].num=y[i];break;}}}for(j=0;j<m;j++)if(x[j].num!=-1)x[j].time++;for(j=0;j<m;j++)if(x[j].num==-1)printf("%2c ",32);elseprintf("%2d ",x[j].num);printf("\n");}}五、实验结果1.执行结果2.结果分析由结果可以看出,使用FIFO算法,总是淘汰最先进入内存的页面,即即选择在内存中驻留时间最久的页面予以淘汰。

实验3、FIFO算法模拟

实验3、FIFO算法模拟

实验三、FIFO LRU算法模拟一、实验目的一个作业有多个进程,处理机只分配固定的主存块供该作业执行。

往往块数小于进程页数,当请求调页程序调进一个块时,可能碰到主存中并没有空闲块的情况,此时就产生了在主存中淘汰哪个块的情况。

本实验要求模拟FIFO算法/二、实验原理此算法的实质是,总是选择在主存中停留最长时间的页面淘汰。

理由是:最早调入主存的页,其不再被访问的可能性最大。

三、实验环境1、pc2、vc++四、程序源代码:#define MAXSIZE 20#include <iostream.h>void main(){int label=0; //标记此页是否已经装入内存int input=0; //用于输入作业号int worknum=0; //记录作业个数int storesize=0; //系统分配的存储块数int interrupt=0; //中断次数int quence[MAXSIZE]; //队列,FIFO算法的主要数据结构int workstep[MAXSIZE]; //用于记录作业走向/*初始化*/for(int i=0;i<MAXSIZE;i++){quence[i]=0;workstep[i]=0;}cout<<"请输入存储区块数:";cin>>storesize;cout<<"请输入作业走向(输入0结束):\n";for(int j=0;j<MAXSIZE;j++){cout<<"页面号:"<<j+1<<” :”;cin>>input;workstep[j]=input;if(input==0){cout<<"输入结束!\n";break;}worknum++;}if(workstep[0]==0){cout<<"未输入任何作业,系统将退出!\n";return;}cout<<"置换情况如下:\n";for(int k=0;k<worknum;k++){label=0;/*看队列中是否有相等的页号或空位置*/for(int l=0;l<storesize;l++){/*是否有相等的页号*/if(quence[l]==workstep[k]){cout<<"内存中有"<<workstep[k]<<"号页面,无须中断!\n";label=1; //标记此页面已装入内存break;}/*是否有空位置*/if(quence[l]==0){quence[l]=workstep[k];cout<<"发生中断,但内存中有空闲区,"<<workstep[k]<<"号页面直接调入!\n";interrupt++;label=1;break;}}/*上述情况都不成立则调出对首,将调入页面插入对尾*/if(label==0){cout<<"发生中断,将"<<quence[0]<<"号页面调出,"<<workstep[k]<<"号装入!\n";interrupt++;for(int m=0;m<storesize;m++){quence[m]=quence[m+1];}quence[storesize-1]=workstep[k];}}cout<<"作业"<<worknum<<"个,"<<"中断"<<interrupt<<"次,"<<"缺页率:"<<float(interrupt)/float(worknum)*100<<"%\n";}用高级语言模拟页面置换算法LRU,加深对LRU算法的认识。

页面置换算法实践报告

页面置换算法实践报告

页面置换算法实践报告页面置换算法(Page Replacement Algorithm)是操作系统中用于管理虚拟内存的重要算法之一。

其目的是在有限的物理内存空间中,将进程所需的页面加载到内存中,并根据一定的策略替换掉不再被使用的页面,以提高内存利用率和系统性能。

在本次实践报告中,我将重点介绍三种常见的页面置换算法:先进先出(FIFO)、最近最久未使用(LRU)和最不经常使用(LFU)。

先进先出(FIFO)算法是最简单的页面置换算法之一。

它根据页面进入内存的先后顺序进行页面置换。

当一个页面需要被替换时,选择最早进入内存的页面进行替换。

虽然FIFO算法的实现简单,但它无法很好地反映页面的使用频率和重要性,容易发生“缺页率抖动”的问题。

缺页率抖动指的是在某些场景下,缺页率会频繁地快速上升,然后又快速下降。

最近最久未使用(LRU)算法是一种基于页面历史访问记录的页面置换算法。

它认为最近被访问过的页面是最有可能在未来被访问的,因此选择最近最久未使用的页面进行替换。

LRU算法可以较为准确地反映页面的使用频率,避免了FIFO算法的缺点。

但由于需要记录页面的访问历史,因此实现相对复杂,需要额外的开销。

最不经常使用(LFU)算法是一种基于页面使用频率的页面置换算法。

它认为使用频率最低的页面是最不重要的,因此选择最不经常使用的页面进行替换。

LFU算法可以较好地反映页面的使用频率,对于一些热点页面和冷门页面的处理较为准确。

但由于需要记录页面的使用次数,因此实现相对复杂,需要额外的开销。

根据实际情况选择合适的页面置换算法对于系统的性能影响非常重要。

一般来说,FIFO算法比较适用于缺页率较低的情况,而LRU算法则适用于需要较高精确度的场景,而LFU算法则适用于需要特别关注页面使用频率的场景。

在实践中,我们可以使用模拟算法来进行页面置换算法的实验。

通过构造不同的页面访问序列,我们可以测试不同算法的效果并进行比较。

在实验过程中,我们可以观察不同算法的缺页率、替换次数、访问延迟等指标,以评估算法的性能。

内存页面置换算法实验报告

内存页面置换算法实验报告

竭诚为您提供优质文档/双击可除内存页面置换算法实验报告篇一:内存页面置换算法的设计实验报告内存页面置换算法的设计一、实验题目:实现最近最久未使用(LRu)置换算法二、实验目的:LInux中,为了提高内存利用率,提供了内外存进程对换机制,内存空间的分配和回收均以页为单位进行,一个进程只需将其一部分调入内存便可运行,还支持请求调页的存储管理方式。

本实习要求通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

三、实验原理:最近最久未使用(LRu)置换算法原理就是:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰,即淘汰距当前最远的上次使用的页。

例如:分配给该进程的页块数为3,一个20位长的页面访问序列为:12560,36536,56042,70435,则缺页次数和缺页率按下图给出:2.假定分配给该进程的页块数为3,页面访问序列长度为20。

本实验可以采用数组结构实现,首先随机产生页面序列,当发生请求调页时,若内存已满,则需要利用LRu算法,将当前一段时间内最久未使用过的页替换出去。

模拟程序的算法如下图:四、数据结构:数组五、程序代码:package页面置换;publicclassLRu{staticintblocknum=3;//页面数staticintlistnum=20;//序列页数staticintpageorder[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};的访问页面序列staticinttime[]=newint[blocknum];用的//随机生成//记录最近使staticintpageFrame[][]=newint[listnum][blocknum];//模拟页面置换staticintcount=0;//记录缺页数booleanfound;publicstaticvoidshow(){for(inti=0;isystem.out.print(pageorder[i]+"");system.out.println("");for(inti=0;i system.out.print("--");system.out.println("");for(intj=0;j for(inti=0;iif(pageFrame[i][j]==-1)system.out.print(+"");elsesystem.out.print(pageFrame[i][j]+"");}system.out.println("");}system.out.println("缺页数:"+count);}publicstaticvoidinit(){for(inti=0;i for(intj=0;jpageFrame[i][j]=-1;}}count=1;}publicstaticvoidLeastused(){init();pageFrame[0][0]=pageorder[0];inttemp,flag=0;time[0]=0;inti,j,k;for(i=1;i for(j=0;jif(pageorder[i]==pageFrame[flag][j]){//(与前一行的每一块比较)time[j]=i;break;}}if(j!=blocknum)//若该页面已经在内存中就跳出此次for循环进入下一个页面continue;for(k=0;k if(pageFrame[flag][k]==-1)break;elsepageFrame[i][k]=pageFrame[flag][k];}for(j=0;j if(pageFrame[i][j]==-1){//是否还有可用的块空间来分配给页面pageFrame[i][j]=pageorder[i];time[j]=i;count++;flag=i;break;}}if(j!=blocknum)//说明已经有空间放置该页面则已经分配好,跳出此次for循环continue;temp=0;for(j=0;j //很久不被访问的页面,即time值最小的那一个if(time[temp]>time[j])temp=j;}pageFrame[i][temp]=pageorder[i];time[temp]=i;count++;flag=i;}}}publicstaticvoidmain(string[]args){Leastused ();show();}六、运行结果:七、实验心得:这次的实验是内存页面的置换,相较上次的内存分配管理在算法实现上简单一些,但是代码不足在于使用到了较多的static全局变量使得整个代码质量不是很好,而且也只是简单的根据算法设计来模拟实现整个过程。

fifo页面淘汰算法总结(共5篇)

fifo页面淘汰算法总结(共5篇)

fifo页面淘汰算法总结第1篇假设虚拟内存的地址是16位,页面大小为1K,则进程的大小为 2 16 = 64 K B2^{16}=64KB 216=64KB分页个数 = 进程的大小页面的大小 = 逻辑地址表示的大小页面的大小 = 2 16 B 1 K B = 2 6 页分页个数=\frac{进程的大小}{页面的大小}=\frac{逻辑地址表示的大小}{页面的大小}=\ frac{2^{16B}}{1KB}=2^{6}页分页个数=页面的大小进程的大小=页面的大小逻辑地址表示的大小=1KB216B=26页因此页号P占用前6位,页内偏移量W=16-6=10位。

每一个页表项占用2B,因此页表存储空间需要 2 6 ∗ 2 B = 128 B 2^6*2B=128B 26∗2B=128B页面结构以及页表项设计如下:算法流程如下:具体实现如下:算法流程如下:具体实现如下:算法流程如下:其中调用了randBool()函数,随机的生成0或者1,其具体实现如下算法规则:选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。

假定系统为某进程分配了三个物理块,并考虑有以下页面访问序列: [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1] 进程运行时,先将7, 0,1三个页面依次装入内存。

进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。

然后,访问页面0时,因为已在内存中所以不必产生缺页中断。

访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推。

算法流程图如下:OPT算法具体实现如下:算法规则:在发生页面替换时,被替换的对象应该是最早进入内存的。

仍然采用上述的例子,此时页面置换过程如下表所示FIFO算法流程图如下所示:FIFO页面置换算法具体实现如下:初始化设置m=8,e=8,s=10; 页框数=3,访问序列长度=20;选择算法2:先进先出淘汰算法置换过程算法规则:在发生页面替换时,被替换的页面应该满足,在之前的访问队列中,该对象截止目前未被访问的时间最长。

页面置换算法实验报告实验心得

页面置换算法实验报告实验心得

页面置换算法实验报告实验心得
一、实验背景
页面置换算法是操作系统中的一个重要概念,是内存管理机制的核心内容之一。

页面置换算法是为了解决内存有限的问题,通过将不常用的页面换出,腾出空间给新的页面使用。

页面置换算法有多种,如LRU、FIFO、Clock等。

本次实验主要研究这几种置换算法的实现原理并通过编程实现。

二、实验过程
本次实验首先通过查阅相关资料了解了LRU、FIFO、Clock等页面置换算法的实现原理。

在了解了原理之后,我们通过使用Python语言编写程序来模拟这些算法的实现。

实验中,我们首先编写了一段程序来生成一个不同大小的访问页面序列,并将生成的页面序列分别输入到LRU、FIFO、Clock算法的模拟程序中,观察算法的置换效果,并通过比较不同算法的置换效果来评估各个算法的优劣。

三、实验结果
通过实验,我们观察到在不同的访问页面序列下,各个算法的置换效果都有所不同。

在某些情况下,FIFO算法的置换效果最好,而在
其他情况下,LRU算法的置换效果最佳。

同时,在一些场景下,Clock算法的置换效果也不错。

这说明不同的页面置换算法对于不同的内存使用情况有着不同的适用性。

四、实验心得
通过本次实验,我们深入了解了页面置换算法的实现原理,并通过编程实现了这些算法。

通过实验,我们发现在不同的场景下,不同的页面置换算法的效果会有所不同。

因此,在实际应用中,我们需要考虑内存使用情况,选择最适合的页面置换算法来提高内存利用率和程序性能。

同时,通过这次实验,我们也了解了Python编程的基本语法和常用库的使用方法,对我们的编程能力有了一定的提高。

操作系统第三次实验报告_页面替换算法

操作系统第三次实验报告_页面替换算法

实验三页面替换算法3.1实验简介本实验要求实现多种页面替换算法,然后利用随机产生的引用串测试其性能。

3.2 页面替换算法我们做如下假设:• 虚拟内存页面总数为P,标号从0 到P -1• 引用串RS(reference string) 是一个整数序列,整数的取值范围为0到P -1。

RS 中的每个元素p 表示对页面p 的一次引用• 物理内存由F 帧组成,标号从0 到F -1。

我们引入一个数组M[F],数组元素M[f] 中包含数字p,它表示帧f 中包含页面p页面替换算法顺次读取RS 中的每个元素。

对于RS 中的元素值p,算法搜索数组M[F],判断是否存在某个f,使得M[f] == p。

如果未发现,则表示页面缺失。

这时,算法必须根据其特定的替换规则,选择一帧M[i],用页面p 替换其中的内容,即令M[i] = p。

下面讨论各种替换算法所需要的不同数据结构:• 最佳替换算法和随机替换算法不需要其它的数据结构。

对于最佳替换算法,通过搜索RS 即足以确定应被替换的页面;对于随机替换算法,产生一个取值范围在0 和F -1 之间的随机数,该随机数即可表示应被替换的页面。

• FIFO 需要一个指向最老页面的指针(数组索引)。

每当该页面被替换的时候,把该指针加1(模F) 即可。

• LRU 算法则需要一个尺寸为F 的数组,该数组用来实现排队功能:每次处理一个新的页面引用时,则把该页放置在队列的末尾。

这样,每当需要淘汰一个页面时,从队首取到的即最长时间未被用到的页面。

• Clock 算法(也叫second -chance 算法)和FIFO 算法一样,需要一个指针。

此外,它还需要一个数组,用来记录每一帧的使用情况。

3.3 试验程序#include<stdio.h>#include <windows.h>static int a,b,c;//三个存储单元static int flag_a,flag_b,flag_c;//存储单元标志位int optimal(int rs[200]){int *p1,*p2;int count=0;a=0;b=0;c=0;a=rs[0];b=rs[1];c=rs[2];p1=&rs[3];do{flag_a=0;flag_b=0;flag_c=0;p2=p1;if ((*p2!=a)&&(*p2!=b)&&(*p2!=c)){while(flag_a+flag_b+flag_c<2&&p2<=&rs[200]){if(*p2==a){flag_a=1;p2++;}else if(*p2==b){flag_b=1;p2++;}else if(*p2==c){flag_c=1;p2++;}else p2++;}if (flag_a+flag_b+flag_c==0){do{a=*p1;p1++;count++;}while(p1<=&rs[199]);}else if(flag_a+flag_b+flag_c==1) {if((*p1==a)||(*p1==b)||(*p1==c)) {p1++;}else{if(p1!=&rs[199]){a=*p1;p1++;}else{flag_a=0;flag_b=0;flag_c=0;}}}else{if (flag_a==0){a=*p1;p1++;count++;}else if (flag_b==0){b=*p1;p1++;count++;}else if (flag_c==0){c=*p1;p1++;count++;}}}else p1++;}while(p1<=&rs[199]&&p2<=&rs[199]); return count;}int FIFO(int rs[200]){int *p1,*p2;int count=0;a=0;b=0;c=0;a=rs[0];b=rs[1];c=rs[2];p1=&rs[3];p2=p1;while(p1<=&rs[200]&&p2<=&rs[200]){ p2=p1;if ((*p2!=a)&&(*p2!=b)&&(*p2!=c)) {a=*p2;b=c;c=*p2;count++;}else p1++;}return count;}int rand(int rs[200]){int *p1,*p2;int count=0;a=0;b=0;c=0;a=rs[0];b=rs[1];c=rs[2];p1=&rs[3];p2=p1;while(p1<=&rs[200]&&p2<=&rs[200]){ p2=p1;if ((*p2!=a)&&(*p2!=b)&&(*p2!=c)) {int k=rand();if(k%3==0){a=*p2;count++;}else if(k%3==1){b=*p2;count++;}else if(k%3==2){c=*p2;count++;}}else p1++;}return count;}int LRU(int rs[200]){int *p1,*p2;int count=0;a=0;b=0;c=0;a=rs[0];b=rs[1];c=rs[2];p1=&rs[3];p2=p1;while(p1<=&rs[200]&&p2<=&rs[200]){ p2=p1;if ((*p2!=a)&&(*p2!=b)&&(*p2!=c)) {c=b;b=a;a=*p2;count++;}else{if (*p2==a){p1++;}else if (*p2==b){b=a;a=*p2;p1++;}else{c=b;b=a;a=*p2;p1++;}}}return count;}int main(){int count1=0;int count2=0;int count3=0;int count4=0;int RS[200];for(int a=0;a<200;a++) {RS[a]=rand()%10;printf("%d,",RS[a]);}count1=optimal(RS);count2=FIFO(RS);count3=LRU(RS);count4=rand(RS);printf("最佳值换算法的次数是:%d次\n",count1);printf("先进先出算法的次数是:%d次\n",count2);printf("最近最久未使用算法的次数是:%d次\n",count3);printf("随机算法的次数是:%d次\n",count4);return 0;}3.4 实验结果3.5 性能评测测试不同的引用串以及不同的虚拟内存尺寸,回答如下问题:1. FIFO 算法是否比随机替换算法优越LRU 算法比FIFO 算法优越多少?解:FIFO算法比随机替换算法优越,最近最久未使用算法在rs长度为200的引用串中,替换了148次而先进先出算法替换了164次。

页面置换算法实验总结

页面置换算法实验总结

页面置换算法实验总结
在操作系统中,页面置换算法是为了解决内存不足的问题,当内存中的页面不足时,需要选择一些页面进行置换,将其换出到磁盘上,从而为新的页面腾出空间。

在本次实验中,我实现了三种页面置换算法,分别是FIFO(先进先出)、LRU(最近最少使用)和OPT(最佳置换)。

下面是对这三种算法的总结:
1. FIFO算法:FIFO算法是最简单的页面置换算法,它按照页面进入内存的顺序进行置换。

实验结果显示,FIFO算法在某些情况下可能会导致“抖动”现象,即不断发生页面置换,性能较差。

2. LRU算法:LRU算法是根据页面的使用历史进行置换,将最长时间没有被使用的页面置换出去。

实验结果显示,LRU算法相比于FIFO算法在减少页面抖动方面表现更好,但是实现起来较为复杂,需要维护一个访问历史记录的数据结构。

3. OPT算法:OPT算法是一种理想情况下的页面置换算法,它通过预测未来的页面访问情况来选择最佳的页面进行置换。

实验结果显示,OPT算法在减少页面抖动方面表现最好,但是实现起来较为困难,需要对未来的页面访问情况进行预测。

综上所述,不同的页面置换算法在不同的场景下有着不同的表现。

FIFO算法简单易实现,但性能较差;LRU算法在某些情况下能够较好地减少页面抖动;OPT算法在理论上是最佳的页面置换算法,但实现起来较为困难。

实际中的选择需要根据具体的应用场景
和系统需求来确定。

实验12章页面淘汰算法

实验12章页面淘汰算法

3.比较各种页面置换算法的优缺点。
1
实验1 Linux系统的安装
二.实验内容 模拟实现各种页面置换算法。具体步骤为: 1.使用产生随机数函数得到一个随机的数列,做为将 要载入的页面序列。 2 .可以选择使用先进先出( FIFO )算法、最近最久 未使用( LRU )置换算法和最佳( OPT )置换算法,给出 所需淘汰的页面号序列。 3.列出缺页中断次数。 三.实验环境 本实验可以在Turbo C环境下实现,也可以使Linux系 统的gcc实现。
2
实验1 Linux系统的安装
四.实验源程序清单 程序说明: 本程程假设内存为程序分配的内存块数为4. 进入程序后可以根据菜单项进入不同的模块。 1. 使用首次适应算法分配空间 2. 最近最久未使用的页面 3. 使用最佳适应算法分配空间 4. 显示有多少个缺页中断 5. 退出系统
3
实验1 Linux系统的安装
实验12章页面淘汰算法页面置换算法实验报告页面淘汰算法fifo页面淘汰算法页面置换算法实验lru页面淘汰算法银行家算法实验报告算法设计与实验题解des加密算法实验报告遗传算法实验报告
实验1 Linux系统的安装
实验12 页面置换算法模拟实验
一.实验目的
1.进一步掌握虚拟存储器的实现方法。
2.掌握各种页面置换算法。
பைடு நூலகம்
THE END
4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告课题:页面淘汰算法专业:班级:学号:姓名:年月日目录一实验目的……………………………………………………错误!未定义书签。

二实验要求 (3)三背景知识 (3)四总体设计 (4)五详细设计……………………………………………………错误!未定义书签。

六运行结果分析 (9)七心得体会 (13)八参考文献 (14)附:源代码 (15)一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。

学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。

利用简单的数据结构,模拟实现操作系统中的页面置换机制,通过写程序模拟实现上述三种内存页面置换算法,使学生进一步掌握内存页面置换的方法。

对操作系统中内存的管理有一个实践上的认识。

1、用C语言编写OPT、FIFO、LRU三种置换算法。

2、熟悉内存分页管理策略。

3、了解页面置换的算法。

4、掌握一般常用的调度算法。

5、根据方案使算法得以模拟实现。

6、锻炼知识的运用能力和实践能力。

二、实验要求●设计随机页面序号产生程序,并说明随机的性能和其性能可能对算法的影响●编写页面淘汰算法(FIFO、OPT、LRU)●结果数据的显示或提取●结果数据的分析几点说明:●设计并绘制算法流程,附加说明所需的数据结构●如何标记时间的先后、最久的将来、最久未被使用●描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。

1)初始化:输入作业可占用的总页框数,初始化置空。

2)输入请求序列:输入一个作业页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock 算法,淘汰1个页面后装入新的页号。

4)显示当前分配淘汰序列:显示淘汰的页号序列。

三、背景知识:在操作系统当中,在进程运行过程中,若其访问的页面不在内存中而需把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常的运行,系统必须从内存中调出一页程序或数据送到磁盘的兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定。

通常,我们把这一类的算法称为“页面置换算法”,页面置换算法执行效率的高低,往往直接影响到操作系统的性能。

内存页面置换算法:1、<1> 先进先出调度算法(FIFO)先进先出调度算法根据页面进入内存的时间先后选择淘汰页面。

本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次置换掉最早进入的页面。

这是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面换出,予以淘汰。

该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。

但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。

<2>最近最久未使用的置换算法(LRU)最近最久未使用的置换算法,是根据页面调入内存后的使用情况进行决策的。

由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU 置换算法是选择最近最久未使用的页面予以淘汰。

该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

<3> 最佳置换算法(OPT)最佳置换算法是可以说的一种理想的页面置换算法,它是由Belady于1966 年提出的一种理论上的算法。

其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。

采用最佳置换算法,通常可保证获得最低的缺页率。

但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用此算法来评价其它算法。

<4>时钟页面置换算法时钟页面置换算法是把所有的页面都保存在一个类似钟面的环形链表中,一个表针指向最老的页面,如图所示。

当发生缺页中断时,算法首先检查表针指向的页面,如果它的R位是0就淘汰该页面,并把新的页面插入这个位置,然后把表针前移一个位置;如果R位是1就清除R位并把表针前移一个位置,重复这个过程直到找到了一个R位为0的页面为止。

四、总体设计●根据要求设计页面淘汰算法的活动图运行程序进入主页面,在正上方,已经通过随机生成函数生成了页面号,在其下方,显示可选项:0、退出程序1、FIFO算法2、OPT算法3、LRU算法。

根据需要,选择相应的法,程序自动生成页面淘汰的先后顺序,以及置换次数和缺页次数,并打印在下方,执行完以后,再次进入主页面,到输入0,退出程序。

●算法流程图FIFO算法流程图:新的指令页面内存中的所有页面time+1载入新页面time=0内存物理块集合已满?已在内存物理块中?内存中所有页面time+1选择time值最大的页面换出否否是是O PT算法流程图新的指令页面载入该页面内存物理块集合已满?已在内存物理块中?对内存中每个页面,向后遍历剩余指令集合,记录每个页面距离再次被利用的页面跨度否否是是选择跨度最大的页面换出L RU算法流程图:新的指令页面内存中的所有页面time+1载入新页面time=0内存物理块集合已满?已在内存物理块中?内存中所有页面time+1选择time值最大的页面换出否否是是该页面time=0五、详细设计(一)、设计思想1、最佳置换算法(OPT)用数组Temppages[]存储当前物理块中页面信息,数组TimeArry[]存储当前在物理块中的页面的获得内存时的时间,当页面不在内存中时,根据当前已获得物理块数的页面在所有的页面当中将来不在请求内存或者很少请求内存的情况进行置换2、先进先出算法(FIFO)用数组Temppages[]存储当前物理块中页面信息,变量temp记录内存中物理块页面置换状态,每进行一次置换,页面置换状态变化,便于下一次的置换。

3、最近最久未使用算法(LRU)用数组Temppages[]存储当前物理块中页面信息,数组TimeArry[]存储当前在物理块中的页面的获得内存时的时间,当页面不在内存中时,选择TimeArry[]数组中值最小并且对应物理块中的页面进行置换。

(二)、设计步骤首先根据程序要求,我们分别定义两个宏,用以存放我们的物理块数目以及页面数目,再定义一个结构体,用以物理块的存储,代码如下:#define MemPageCount 4#define InstructionCount 20struct page{int serial; //页面号int time; //时间计数}mempage[MemPageCount];其次,建立主函数,根据程序需要,定义相应的变量,建立switch语句,用以算法的选择,部分定义如下:int i,j,k,m,n; //指令页面集合,可以考虑让页面指令集合随机生成int instruction[InstructionCount];int mem_counter; //内存页面集合计数器int switch_counter; //置换次数最后,根据算法流程图,实现相应算法的代码编写。

(三)、算法流程设计主函数流程:STEP1:输入分配的页框数,页面访问次数和要访问的页面号序列STEP2:内存页面初始化。

内存中页面的数据结构为单循环链表,含有页号值yehao和访问位值a。

开始时页号均为-1,访问位为0.STEP3:测试数据。

具体算法是依要访问的页面号,调用find()函数查找是否已经存在于内存中。

若存在,则修改其访问位为1.若不存在,触发缺页中断,调用tihuan()函数。

最后,打印当前内存状态。

如此循环直至测试串都访问完毕。

1)主要函数实现a)Makenode(double)函数:用于初始化一个节点。

b)Find(double)函数:依据输入的页号,查询内存中是否已存在此页面。

若存在返回值1,不存在返回值0.c)Tihuan(double)函数:在发生缺页中断时,时钟指针查找访问位为0的页面进行替换,指针扫过的页面访问位置0,新加入的页面访问位置1。

替换后指针下移。

d)Print_state()函数:打印当前内存中存在的页面的状态以及当前时钟指针所指向的页面位置。

2)测试数据估计输入:输入分配的页框数3输入页面访问次数15输入要访问的页面号序列3 4 2 6 4 3 7 4 3 6 3 4 8 4 6输出(仅最后一项):3)结果分析以下是clock算法对应输入页面号序列3 4 2 6 4 3 7 4 3 6 3 4 8 4 6的分析表六、运行结果分析:a)开始界面2、采用随机数产生的结果2、采用自定义页面信息产生结果自定义页面数为:15 物理块数为:4页面序列为:1 2 3 4 5 6 7 8 9 4 5 6 7 0 8根据结果,我们不难发现,OPT算法,是三种算法中性能最好的,它的置换次数最少,LRU次之,,不过性能最差的还是FIFO,由于缺页率=缺页次数/总的页面数,所以我们不难发现,随着物理块数的增加,缺页率都相应有所增加,但是OPT算法的增加较为明显,即产生了belady现象。

七、心得体会:这次课程设计,让我对算法的编写更加的熟练,同时更加了解页面置换的相关算法,也提高了我对算法设计的严密性,对以后的程序设计有很大帮助。

我们不仅对常用的算法进行了编写,还对一些理想的算法也进行了编写,并且通过适当的方法,得以了验证。

就该程序而言,随机性使得程序出现了更多的可能性,为我们验证算法提供很大的方便,电脑自动分配,大大的节约了我们的时间,但是我们通过实验不难发现,如果所设的页面项目过大,也会影响我们算法的性能执行效率。

对我们所涉及的算法,让我有很大的感触。

在FIFO 算法中,无论有无发生缺页或者置换,都需要对每个在内存中的页面的time 值进行增加操作,以保持最先进入的那个页面的time 值是最大的;一个新进来的页面,其time值设置为0。

当然,该算法也可以通过队列结构来实现,利用队列的先进先出(FIFO)特性完成,无需设置time字段。

distance 用于记录内存物理块集合中每个页面距离再次被使用的页面跨度,缺省值为9999,如果某个页面在后续指令集合中不再出现,则用最大值9999 缺省取代;如果页面再次被使用,则两次使用所跨的页面数,为页面跨度。

用最大页面跨度表示以后永不使用或未来最长时间内不再被访问。

在LRU 算法中,无论是否发生缺页或者置换,除了命中(刚刚被访问过的页面)页面time 值清零之外,其它所有内存中的页面的time 值都加一,以保证最近刚刚被访问的页面的time 值最小,相应time 值最大的页面就是最近最久没有被访问的页面。

相关文档
最新文档