c中的操作系统内存管理分页方案

operating systems memory management paging scheme in c

我正在研究操作系统 Memory Management Paging SchemeC 中的模拟,所以这是我到目前为止所做的:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
  int alloc[50], base[50], frame[50], job[50];
  int i, n, pa, fs, ps, nf, temp;

clrscr();
    printf("\n\t\t PAGING\n");

    printf("\n\t Enter the physical address space:");
        scanf("%d",&pa);
    printf("\n\t Enter the page size:");
        scanf("%d",&ps);

    nf=pa/ps;
    printf("\n\t Number of frames = %d",nf);
    for(i=0;i<nf;i++)
    {
        alloc[i]=0;
        printf("Enter job number %d",i+1);
            scanf("%d",job[i]);
        if (  // If job can fit  ) {
     // Here job will fit one by one
            temp=rand()%nf;
            while( alloc[temp] == 1 )
                temp=rand()%nf;
            alloc[temp]=1;
            frame[i]=temp;
     // The main algo will come here
            base[i]=frame[i]*ps;
            printf("\n %d\t\t %d\t\t %d\t\t",i,frame[i],base[i]);

        } else {
    //If the job can not fit in the memory
            printf("Job %d Can't fit in the Memory.\n",i+1);
            break;
        }

    }
getch();
}

我只想按照我的要求实现下面的程序;

1.首先当我根据页码输入物理地址和页面大小时,我可以输入我的职位

2.其次每份作业根据作业大小可容纳页数

3.Third 每次我进入工作时 Memory Block Table (MBT) 应该重新加载并告诉有多少内存可用或占用

4. 最后,如果没有足够的 space 来放置更大的作业,它会给出错误

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
  int ps,np,nf,log;
  int alloc[50],base[50],frame[50],page[50];
  int i,f,n,pa,fs,pno,add,offset;
  int temp;
  int f1;
clrscr();
    printf("\n\t\t PAGING\n");
    printf("\n\t Enter the logical address space:");
        scanf("%d",&log);
    printf("\n\t Enter the page size:");
        scanf("%d",&ps);
    printf("\n\t Enter the physical address space:");
        scanf("%d",&pa);
    fs=ps;
    np=log/ps;
    nf=pa/fs;
    printf("\n\t Number of pages  = %d",np);
    printf("\n\t Number of frames = %d",nf);
    for(i=0;i<nf;i++)
        alloc[i]=0;
    for(i=0;i<np;i++)
    {
        temp=rand()%nf;
        while(alloc[temp]==1)
            temp=rand()%nf;
        alloc[temp]=1;
        frame[i]=temp;
    }
    printf("\n Page No \t Frame No \t Base address ");
        for(i=0;i<np;i++)
        {
            base[i]=frame[i]*ps;
            page[i]=i;
            printf("\n%d\t\t %d\t %d\t\t",i,frame[i],base[i]);
        }
getch();
}

解决方案是

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
  int mbt[50];
  int i, j, k, pa, bs, bfree, bfree_mode, ps, js, var = 0, var2=0, jn, job;

clrscr();
    printf("\n\t\t PAGING\n");

    printf("\n\t Enter the physical address space:");
        scanf("%d",&pa);
    printf("\n\t Enter the Block size:");
        scanf("%d",&bs);
    bfree = pa / bs;
    printf("\n\t the number of blocks are = %d\n",bfree);
    bfree_mode = bfree;
    for( i = 0 ; i < bfree ; i++ ) {
        mbt[i] = 0;
    }

    printf("How many jobs do you want to enter to the memory ?\n");
        scanf("%d",&jn);
       for ( j = 0 ; j <= jn+2 ; j++  )  {

        printf("Enter %d Job size :\n",j+1);
            scanf("%d",&job);
        k = var;
        var = job / bs ;
        if (job % bs !=0)
            var +=1;
        if ( var <= bfree ) {
            var2 += var;
            for ( k ; k < var2 ; k++  ) {
                mbt[k] = j+1;
            }
            bfree -= var;
            printf("mbt[0] = OS Reserved!\n");
            for ( i = 1 ; i < bfree_mode ; i++)
                printf("mbt[%d] = %d\n",i,mbt[i]);


        }else if ( var > bfree ) {
            printf("\nThe Memory is not enough for the %d Job",j+1);
            break;
          }
    }

getch();
}