운영 체제 실험 4 페이지 교체 알고리즘 (fifo 알고리즘 코드 --- 페이지 교체 코드 집합)
5605 단어 운영 체제 탑승 실험
하나 실험 목적
1. 연속 저장 관리 방식 의 원리 와 분 류 를 이해 하 다.
2. 분 산 된 저장 관리 방식 의 원리 와 분 류 를 이해 하 다.
3. 가상 메모리 의 원리 와 분 류 를 이해 하 다.
4. 동적 구역 분배 의 상용 알고리즘 을 파악 하 다.
5. 페이지 가상 관리 에서 자주 사용 하 는 페이지 교체 알고리즘 을 파악 합 니 다.
둘째, 실험 설비
1. 윈도 우즈 나 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("
pfn pn");
for(j=0;j<=total_pf-1;j++)
{if(pf[j].pn!=-1)
printf("
%d%8d",pf[j].pfn,pf[j].pn);
}
}
printf("
:%6.4f
%d
",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("©§Çë°´ÈÎÒâ¼ü½øÐгõʼ»¯²Ù×÷... ©§
");
printf("©»©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¿
");
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¨[
");
printf("¨UÕýÔÚÔØÈëÊý¾Ý£¬ÇëÉÔºò !!!¨U
");
printf("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a
");
printf("Loading...
");
printf(" O");
for(i=0;i<51;i++)
printf("\b");
for(i=0;i<50;i++)
{
mDelay((pSIZE+mSIZE)/2);
printf(">");
}
printf("
Finish.
ÔØÈë³É¹¦£¬°´ÈÎÒâ¼ü½øÈëÖû»Ë㷨ѡÔñ½çÃ棺>>>");
getchar();
}
/*ÉèÖÃÑÓ³Ù*/
void mDelay(unsigned int Delay)
{
unsigned int i;
for(;Delay>0;Delay--)
{
for(i=0;i<124;i++)
{
printf(" \b");
}
}
}
/*ÏÔʾÉè¼ÆÕßÐÅÏ¢*/
void designBy()
{
printf("©³©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©·
");
printf("©§ ʵÑéËÄ£ºÒ³ÃæÖû»Ëã·¨ ©§
");
printf("©§ °à¼¶£º ©§
");
printf("©§ ÐÕÃû£ºÕÅͬѧ ©§
");
printf("©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï
");
}
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