操作系统实验四 页面置换算法(fifo 算法代码------页面置换代码集合)

实验四 存储器管理

一、     实验目的

1.       理解连续存储管理方式的原理和分类。 

2.       理解离散存储管理方式的原理和分类。

3.       理解虚拟存储器的原理和分类。

4.       掌握动态分区分配的常用算法。

5.       掌握页式虚拟管理中常用页面置换算法。 

二、     实验设备

1.     安装windows或者linux操作系统的PC机

2.     C程序编译环境

三、     实验内容

用C语言编程模拟实现一种或多种动态分区分配算法或页面置换算法。常见的动态分区分配算法有最先适应算法、循环首次适应算法、最佳适应算法、最坏适应算法等,常见的页面置换算法有先进先出(FIFO)页面置换算法、最近最久未使用(LRU)置换算法、最少使用(LFU)置换算法等。

四、     实验要求

1.     上机编写并调试动态分区分配算法(或页面置换算法)的模拟程序。

2.     要把相应的程序代码及程序运行结果写入实验报告中。


 先进先出(FIFO)页面置换算法

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

#include "conio.h"

#include "time.h"

#define TRUE 1

#define FALSE 0

#define NULL 0

#define total_instruction 20

#define total_vp 10

typedef struct

{ int pn,pfn;

}pv_type;

pv_type pv[10];

typedef struct pf_struct

{ int pn,pfn;

struct pf_struct *next;

}pf_type;

pf_type pf[20],*free_head,*busy_head,*busy_tail,*q;

int page[total_instruction];

int total_pf;

int count;

void initialiaze()

{ int i;

count=0;

for(i=0;ipfn,busy_head->pn);

p=busy_head->next;

pv[busy_head->pn].pfn=-1;

free_head=busy_head;

free_head->next=NULL;

busy_head=p;

}

p=free_head->next;

free_head->next=NULL;

free_head->pn=page[i];

pv[page[i]].pfn=free_head->pn;

if(busy_tail==NULL)

busy_head=busy_tail=free_head;

else

{ busy_tail->next=free_head;

busy_tail=free_head;

}

free_head=p;

}

else printf("命中,缺页次数不变,仍为count=%d",count);

printf("\npfn pn");

for(j=0;j<=total_pf-1;j++)

{if(pf[j].pn!=-1)

printf("\n%d%8d",pf[j].pfn,pf[j].pn);

}

}

printf("\n先进先出算法的命中率为:%6.4f\n缺页总次数为%d\n",1-(float)count/20,count);

}

int main()

{

srand((unsigned)time(NULL));

initialiaze();

FIFO();

return 0;

} 常见的页面置换算法有先进先出(FIFO)页面置换算法、最近最久未使用(LRU)置换算法、最少使用(LFU)置换算法等。

#include 
#include 
/*È«¾Ö±äÁ¿*/
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 designBy();
void download();
void mDelay(unsigned int Delay);
/*Ö÷º¯Êý*/
int main()
{
    int i,k,code;
	system("color 0A");
	designBy();
	printf("©§Çë°´ÈÎÒâ¼ü½øÐгõʼ»¯²Ù×÷...                       ©§\n");
	printf("©»©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¿\n");
	printf(" >>>");
	getchar();
	system("cls");
	system("color 0B");
	printf("ÇëÊäÈëÎïÀí¿éµÄ¸öÊý(M<=10)£º");
	scanf("%d",&mSIZE);
	printf("ÇëÊäÈëÒ³ÃæºÅÒýÓô®µÄ¸öÊý(P<=100)£º");
	scanf("%d",&pSIZE);
	puts("ÇëÒÀ´ÎÊäÈëÒ³ÃæºÅÒýÓô®(Á¬ÐøÊäÈ룬ÎÞÐè¸ô¿ª)£º");
	for(i=0;i>>");
		getchar();
		system("cls");
    }while (code!=4);
	getch();
	return 0;
}
/*ÔØÈëÊý¾Ý*/
void download()
{
	int i;
	system("color 0D");
	printf("¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[\n");
	printf("¨UÕýÔÚÔØÈëÊý¾Ý£¬ÇëÉÔºò !!!¨U\n");
	printf("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a\n");
	printf("Loading...\n");
	printf("                                                  O");
	for(i=0;i<51;i++)
		printf("\b");
	for(i=0;i<50;i++)
	{
		mDelay((pSIZE+mSIZE)/2);
		printf(">");
	}
	printf("\nFinish.\nÔØÈë³É¹¦£¬°´ÈÎÒâ¼ü½øÈëÖû»Ë㷨ѡÔñ½çÃ棺>>>");
	getchar();
}
/*ÉèÖÃÑÓ³Ù*/
void mDelay(unsigned int Delay)
{ 
    unsigned int i; 
    for(;Delay>0;Delay--) 
	{   
		for(i=0;i<124;i++) 
		{
			printf(" \b");
		} 
	} 
}
/*ÏÔʾÉè¼ÆÕßÐÅÏ¢*/ 
void designBy()
{
	printf("©³©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©·\n");
	printf("©§             ʵÑéËÄ£ºÒ³ÃæÖû»Ëã·¨                 ©§\n");
	printf("©§                °à¼¶£º                            ©§\n");
	printf("©§                  ÐÕÃû£ºÕÅͬѧ                    ©§\n");
	printf("©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï\n");
}
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=j)
					printf(" |%d|",temp[i][j]);
				else
					printf(" | |");
			}
			for(i=mSIZE+20*k;(i=next[1]?0:1;
			for(m=2;mnext[max])
					max=m;
			/*ÏÂÒ»´Î·ÃÎÊʱ¼ä¶¼ÎªpSIZE,ÔòÖû»ÎïÀí¿éÖеÚÒ»¸ö*/
			memery[max]=page[i];
			for(j=0;j



你可能感兴趣的:(操作系统上机实验)