编辑代码

#include <stdlib.h>
#include<stdio.h>
#include<math.h>
#include<time.h>

#define MAXSIZE 50

typedef struct Block
{
    int num;
    int order;
}Block;

void init_mem(Block mem[],int m)
{
    for(int i=1;i<=m;i++)
    {
        mem[i].num=-1;
        mem[i].order=-1;
    }
}

void init_page(Block page[],int k)
{
    for(int i=1;i<=k;i++)
    {
        page[i].num=i;
        page[i].order=-1;
    }
}

void init_task(int task[],int l)
{
    for(int i=1;i<=l;i++)
    {
        task[i]=-1;
    }
}

void generate(int task[],int l)
{
    int x;
    srand(time(0));
    printf("页码串序列如下:\n");
    for(int i=1;i<=l;i++)
    {
        x=rand()%l+1;
        task[i]=x;
        printf("%d ",task[i]);
    }
    printf("\n");
}
void FIFO(int task[],int l,Block mem[],int m){
    int find;
    int lack_page=0;
    int block=0;
    int x;
    for(int i=1;i<=l;i++)
    {
        find=0;
        for(int j=1;j<=m;j++)
        {
            if(task[i]==mem[j].num)
            find=1;
        }
        if(find==1)
        {               
        }
        else{
            if(block<m)
            {
                mem[++block].num=task[i];
            }
            else{
                lack_page++;
                for(x=1;x<=m;x++)
                {
                    mem[x-1].num=mem[x].num;
                }
                mem[x-1].num=task[i];
            }
        }
        for(int y=1;y<=m;y++)
        {
            printf("%d ",mem[y].num);
        }
        printf("\n");
    }
    printf("缺页率为:%.2f%\n",((float)lack_page/(float)l*100));
}

void LRU(int task[],int l,Block mem[],int m){
    int find;
    int lack_page=0;
    int block=0;
    int x;
    for(int i=1;i<=l;i++)
    {
        find=0;
        for(int j=1;j<=m;j++)
        {
            if(task[i]==mem[j].num)
            {
                find=1;
                if(find==1)
                {
                    int t=mem[j].num;
                    for(int x=j;x<m;x++)
                    {
                        mem[x].num=mem[x+1].num;
                    }
                    mem[x].num=t;
                    for(int y=1;y<=m;y++)
                    {
                        printf("%d ",mem[y].num);
                    }
                    printf("\n");
                    break;
                }
                
            }
        }
        if(find==0){
            if(block<m)
            {
                mem[++block].num=task[i];
            }
            else{
                lack_page++;
                for(x=1;x<=m;x++)
                {
                    mem[x-1].num=mem[x].num;
                }
                mem[x-1].num=task[i];
            }
            for(int y=1;y<=m;y++)
            {
                printf("%d ",mem[y].num);
            }
            printf("\n");
        }
        
    }  
    printf("缺页率为:%.2f%\n",((float)lack_page/(float)l*100));  
}

int main()
{
    int m;//内存块表长度
    int l;//调度作业序列长度
    int k;//页表长度
    printf("请输入可用内存块个数:");
    scanf("%d",&m);
    printf("请输入页面走向长度:");
    scanf("%d",&l);
    printf("请输入页表的长度:");
    scanf("%d",&k);
    int task[l+1];//调度作业序列
    Block mem[m+1];//内存块表
    Block page[k+1];//页表
    init_mem(mem,m);
    init_page(page,k);
    init_task(task,l);
    generate(task,l);
    printf("FIFO算法结果如下:\n");
    FIFO(task,l,mem,m);
    init_mem(mem,m);
    printf("LRU算法结果如下:\n");
    LRU(task,l,mem,m);
}