c中的操作系统内存管理分页方案
operating systems memory management paging scheme in c
我正在研究操作系统 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.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();
}
我正在研究操作系统 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.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();
}