操作系统--虚拟存储器管理实验

      设计程序模拟FIFO和LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,并计算每种算法缺页次数和缺页率。

代码实现:

#include<stdio.h>
#define n 12

void FIFO()
{
	int m; 
	printf("请输入物理块的数目:");
	scanf("%d",&m);
	
	int ym[n],i,j,q,mem[m]={0},table[m][n];
	char flag,f[n];
	printf("请输入页面访问序列\n");
	
	for(i=0;i<n;i++)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
	scanf("%d",&ym[i]);
	printf("\n");
	for(i=0;i<n;i++)                    //查页表,看是否缺页
 {  
	q=0;
 	while((ym[i]!=mem[q])&&(q!=m)) q++;
 	if(q==m)  flag='*';                 //缺页,则置标志flag为‘*’
 	else flag=' ';
 		if(flag=='*')
 		{
		for(j=m-1;j>0;j--)              //淘汰最先调入的页面调入当前访问的
 		mem[j]=mem[j-1];
 		mem[0]=ym[i];
 		}
 		for(j=0;j<m;j++)               
 		table[j][i]=mem[j];
 		f[i]=flag;
 }
 printf("输出结果为下表(0代表为空,*代表有缺页):\n");
 for(i=0;i<m;i++)
 {
 	for(j=0;j<n;j++)
printf("%3d",table[i][j]);
printf("\n");
 }
 for(i=0;i<n;i++)
 	printf("%3c",f[i]);
}


void LUR()
{
	int m; 
	printf("请输入物理块的数目:");
	scanf("%d",&m);
	
	int ym[n],i,j,q,mem[m]={0},table[m][n];
	char flag,f[n];
	printf("请输入页面访问序列\n");
	for(i=0;i<n;i++)                    
	scanf("%d",&ym[i]);
	printf("\n");
	for(i=0;i<n;i++)                    //查页表,看是否缺页
 {  
	q=0;
 	while((ym[i]!=mem[q])&&(q!=m)) q++; 
 	if(q==m)  flag='*';                 //缺页,则置标志flag为'*'
 	else flag=' ';
 		for(j=q;j>0;j--)
 		mem[j]=mem[j-1];
 		mem[0]=ym[i];
 		for(j=0;j<m;j++)
 		table[j][i]=mem[j];
 		f[i]=flag;
 }
 printf("输出结果为下表(0代表为空,*代表有缺页):\n");
 for(i=0;i<m;i++)
 {
 	for(j=0;j<n;j++)
printf("%3d",table[i][j]);
printf("\n");
 }
 for(i=0;i<n;i++)
 printf("%3c",f[i]);
}


int main()
{
	int a;
	printf("**********请选择调用的算法**********\n");
	printf("1.FIFO\t\t2.LUR\n");
	printf("************************************\n");
	scanf("%d",&a);
	if(a==1)
	{
		FIFO();
	}
	else
	{
		LUR();
	}
	return 0;
} 




运行结果:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值