• LRU算法


    。。。。。。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    typedef struct item
    {
    	int num;
    	int time;
    }Pro;
    int pageNum;
    int memoryNum;
    void print(Pro *page1);
    int Search(int num1,Pro *memory1);
    int ans[100];
    
    int main()
    {
    	int cnt=0;
    	int i=0;
    	int curmemory;
    	int missNum=0;
    	float missRate;
    	Pro *page;
    	Pro *memory;
    	printf("输入系统分配给作业的主存中的页面数:");
    	scanf("%d",&pageNum);
    	printf("输入内存页面数:");
    	scanf("%d",&memoryNum);
    	page=(Pro *)malloc(sizeof(Pro) *pageNum);
    	memory=(Pro *)malloc(sizeof(Pro) *memoryNum);
    
    	for(i=0;i<pageNum;i++)
    	{
    		scanf("%d",&page[i].num);
    		page[i].time=0;
    	}
    	missNum=0;
    	curmemory=0;
    	printf("LRU页面置换情况: 
    ");
    	for(i=0;i<memoryNum;i++)
    	{
    		memory[i].num=-1;
    		memory[i].time=-1;
    	}
    	for(i=0;i<pageNum;i++)
    	{
    		int rec=Search(page[i].num,memory);
    		if(rec<0)
    		{
    			missNum++;
    			for(int j=0;j<memoryNum;j++)
    			if(memory[j].time==-1){   //刚开始没有插入的初始情况
    					curmemory=j;
    			break;}
    			else if(memory[j].time>memory[curmemory].time){
    				curmemory=j;
    			}
    			if (i>=memoryNum)
    				ans[cnt++]=memory[curmemory].num;
    
    			memory[curmemory].num=page[i].num; //内存块没有被赋值
    			memory[curmemory].time=0;
    			print(memory);
    		}
    		else memory[rec].time=0;
    		for(int j=0;j<memoryNum;j++)
    			if (memory[j].num!=-1)
    			memory[j].time++;
    	}
    
    	missRate=(float) missNum/pageNum*100 ;
    	missRate=(int) missRate;
    	printf("置换的序号是:
    ");
    	for(int k=0;k<cnt;k++)
    		cout<<ans[k]<<' ';
    	cout<<endl;
    	printf("缺页次数:%d    缺页率:       %.f%
    ",missNum,missRate);
    }
    
    void print(Pro *memory1)
    {
    	int j;
    	for(j=0;j<memoryNum;j++)
    		printf("%d ",memory1[j].num);
    	printf("
    ");
    }
    
    int Search(int num1,Pro *memory1)
    {
    	int j;
    	for(j=0;j<memoryNum;j++)
    	{
    		if(num1==memory1[j].num)
    			return j;
    	}
    	return -1;
    }
    
    /*输入 20
               3
    7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 */  
    

      

  • 相关阅读:
    sql server 去掉重复项
    mvc2.0与3.0 便利一行三个元素 便利多行代码
    新距离
    Android
    Java
    计算机文化基础期末考试复习
    立体的导航条
    腾讯微博
    1637
    私有变量
  • 原文地址:https://www.cnblogs.com/572354941hnit/p/11961194.html
Copyright © 2020-2023  润新知