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

时间:2015-05-30 15:55:54

标签: c memory-management operating-system paging

我正在Memory Management Paging Scheme进行操作系统C模拟,所以这是我到目前为止所做的:

#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. 第三次每次进入工作时,Memory Block Table (MBT)都应重新加载,并告知可用或占用的内存量

4. 和最后如果没有足够的空间来放置较大的作业,则会给出错误

#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();
}

1 个答案:

答案 0 :(得分:2)

解决方案

href