physical to logical address address mapping ( Paging ) program in c
On-campus and online computer science courses to Learn the basic concepts of Computer Science.This tutorial will cover c ,c++, java, data structure and algorithm,computer graphics,microprocessor,analysis of algorithms,Digital Logic Design and Analysis,computer architecture,computer networks,operating system.
code in Java:#include <stdio.h>
#include <math.h>
int bit_calc(int);
int bin_conv(int);
int dec_conv(int,int);
void disp_bin_res(int,int);
int bin_result[40],input[32];
void main()
{
int p_s, pg_s, ph_s,f_n,p_n;
int pg_tab[5][3];
int i;
int p_bits,l_bits,p_b,l_b;
int page_bits;
printf("Please enter the Process Size in KB: ");
scanf("%d",&p_s);
printf("Please enter Page Size in KB: ");
scanf("%d",&pg_s);
page_bits = bit_calc(pg_s*1024);
printf("Please enter Physical Memory Size in KB: ");
scanf("%d",&ph_s);
for(i=0;i<5;i++)
{
printf("Please enter data for Page Table entry %d\n",(i+1));
printf("Page No: ");
scanf("%d",&pg_tab[i][0]);
printf("Frame No: ");
scanf("%d",&pg_tab[i][1]);
printf("Valid/Invalid Bit: ");
scanf("%d",&pg_tab[i][2]);
}
f_n=ph_s/pg_s;
printf("The Total number of Frames in the Physical Memory are: %d\n",f_n);
p_n=p_s/pg_s;
printf("The Total number of entries in the Page Table are: %d\n",p_n);
p_bits = bit_calc(ph_s);
printf("The number of bits in the Physical Address are: %d\n",(p_bits+page_bits));
printf("The distribution is %d:%d\n",p_bits,page_bits);
p_b=p_bits+page_bits;
l_bits = bit_calc(p_s);
printf("The number of bits in the Logical Address are: %d\n",(l_bits+page_bits));
printf("The distribution is %d:%d\n",l_bits,page_bits);
l_b=l_bits+page_bits;
while(1)
{
printf("Please enter the logical address:\n");
for(i = 0; i < l_b; i++)
{
int temp;
scanf("%d",&temp);
if(temp == 2)
{
i = -1;
break;
}
input[i] = temp;
}
if(i == -1)
break;
printf("\n");
int page_no = dec_conv(0,l_bits);
int pos = -1;
for(i=0;i<5;i++)
{
if(page_no == pg_tab[i][0])
pos = i;
}
if(pos != -1)
{
if(pg_tab[pos][2] == 1)
{
printf("The generated Physical Address is: ");
int p_addr = pg_tab[pos][1];
p_addr = p_addr * pg_s * 1024;
p_addr += dec_conv(l_bits,l_b);
int start = bin_conv(p_addr);
disp_bin_res(start,p_b);
printf("\n");
}
else
printf("Page Fault!\n");
}
else
printf("Page not found!\n");
i = 0;
}
}
int dec_conv(int start,int stop)
{
int i;
int res=0;
int n = stop - start;
int j = 0;
for(i=start;i<stop;i++)
{
double temp = pow(2,(n-j-1));
res=res+(input[i]*(int)temp);
j++;
}
return res;
}
int bin_conv(int n)
{
int i=0;
while((n/2)>=2)
{
bin_result[i]=n%2;
n/=2;
i++;
}
i++;
bin_result[i]=1;
return i;
}
void disp_bin_res(int n,int min_l)
{
int i;
if(min_l > (n+1))
{
for(i=0;i<(min_l-n-1);i++)
{
printf("%d",0);
}
}
for(i=n;i>=0;i--)
{
printf("%d",bin_result[i]);
}
}
int bit_calc(int p_s)
{
int bits = 1;
while((p_s / 2) >= 2)
{
bits++;
p_s = p_s/2;
}
return bits;
}
output:-Please enter the Process Size in KB: 128 Please enter Page Size in KB: 1 Please enter Physical Memory Size in KB: 16 Please enter data for Page Table entry 1 Page No: 13 Frame No: 2 Valid/Invalid Bit: 0 Please enter data for Page Table entry 2 Page No: 2 Frame No: 8 Valid/Invalid Bit: 1 Please enter data for Page Table entry 3 Page No: 11 Frame No: 5 Valid/Invalid Bit: 1 Please enter data for Page Table entry 4 Page No: 12 Frame No: 3 Valid/Invalid Bit: 0 Please enter data for Page Table entry 5 Page No: 9 Frame No: 6 Valid/Invalid Bit: 1 The Total number of Frames in the Physical Memory are: 16 The Total number of entries in the Page Table are: 128 The number of bits in the Physical Address are: 14 The distribution is 4:10 The number of bits in the Logical Address are: 17 The distribution is 7:10 Please enter the logical address: 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 The generated Physical Address is: 10001010101010 --------------------------------

0 comments: