操作系统页面置换算法实验报告,页面置换算法实验报告,18,操作系统页面置换算法,页面置换算法,lru页面置换算法,最佳页面置换算法,fifo页面置换算法,页面置换算法代码,opt页面置换算法

学 生 实 验 报 告

姓名: 年级专业班级 学号 成绩

课程名称操作系统实验名称实验3 请求分页系统的页面置换算法 实验类型验证 设计

综合 创新【实验目的、要求】

1.通过编程实现请求分页存储管理系统的Optimal、FIFO、LRU调度算法,使学生掌握计算机虚拟存储管理中有关缺页处理方法等内容,巩固有关虚拟存储管理的知识。2.了解Windows2000/XP中内存管理机制,掌握页式虚拟存储技术。3.理解内存分配原理,特别是以页面为单位的虚拟内存分配方法。

【实验内容】

在Windows XP或Windows 2000等操作系统环境下,使用VC、VB、Delphi、java或C等编程语言,实现请求分页存储管理系统的Optimal、FIFO、LRU调度算法。

【实验环境】(含主要设计设备、器材、软件等)

计算机 C语言编程软件

【实验步骤、过程】(含原理图、流程图

1.启动计算机,运行C语言编程软件。

2.分析理解页面的几种基本算法的特点和原理,在纸上画出原理图。

3.编辑源程序,关键代码如下。

(1)先进先出页面置换算法。

#include

void main()

{

int i,n,t,k=3,a[100];

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

for(i=3;i

if(a[i]!=a[0]&&a[i]!=a[1]&&a[i]!=a[2]) //该页面在内存中,不需要置换。

{

t=a[i];

a[i]=a[k%3]; //通过对k值对3取余的值来确定需要置换的当前页面。

a[k%3]=t;

k++; //仅当发生了页面置换时,k的值才发生改变。

printf("%d %d %d\n",a[0],a[1],a[2]);

}

else

{

printf("%d %d %d\n",a[0],a[1],a[2]);

}

}

(2)最佳置换算法

#include

void main()

{

int i,j,,n,a[100];

int c1,c2,c3; // 标志该页面再次被访问时在引用串中的位置

int p,k,r;

printf("请输入页面数:\n");

scanf("%d",&n);

printf("请输入页面号引用串:\n");

for(i=0;i

scanf("%d",&a[i]);

for(j=3;j

{

if((a[j]!=a[0])&&(a[j]!=a[1])&&(a[j]!=a[2])) //页面在内存不发生置换!

{

for(p=j;p

if(a[0]==a[p])

{c1=p;

break; //跳出循环,直接置c1=n!

}else c1=n; //标志该页面再次被访问时在引用串中的位置!若该页面不会再次被访问,则将c1置为最大n!

for(k=j;k

if(a[1]==a[k])

{ c2=k;

break;}

else

c2=n;

for(r=j;r

if(a[2]==a[r])

{c3=r;

break;

}

else c3=n; //通过比较c1,c2,c3的大小确定最长时间内不再访问的页面!

if((c1>c2)&&(c1>c3)||(c1==c3)||(c1==c2)) //当前a[0]页面未来最长时间不再访问!

{

t=a[j];

a[j]=a[0];

a[0]=t; //把当前访问页面和最佳页面交换!

printf("%d %d %d\n",a[0],a[1],a[2]);

}

if((c2>c1)&&(c2>c3)||(c2==c3)) //当前a[1]页面未来最长时间不