operating systems memory management paging scheme in c -
i'm working on operating system memory management paging scheme simulation in c,so here i've done far:
#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 physical address space:"); scanf("%d",&pa); printf("\n\t enter 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 fit 1 one temp=rand()%nf; while( alloc[temp] == 1 ) temp=rand()%nf; alloc[temp]=1; frame[i]=temp; // main algo 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 job can not fit in memory printf("job %d can't fit in memory.\n",i+1); break; } } getch(); } i want implement below program require;
1.first when enter physical address , page size according page number can enter jobs
2.second each job can fit in number of pages according job size
3.third each time enter job memory block table (mbt) should reload , tells how memory available or occupied
4.and if there not enough space put larger job gives error
#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 logical address space:"); scanf("%d",&log); printf("\n\t enter page size:"); scanf("%d",&ps); printf("\n\t enter 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(); }
the solution is
#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 physical address space:"); scanf("%d",&pa); printf("\n\t enter block size:"); scanf("%d",&bs); bfree = pa / bs; printf("\n\t number of blocks = %d\n",bfree); bfree_mode = bfree; for( = 0 ; < bfree ; i++ ) { mbt[i] = 0; } printf("how many jobs want enter memory ?\n"); scanf("%d",&jn); ( 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; ( k ; k < var2 ; k++ ) { mbt[k] = j+1; } bfree -= var; printf("mbt[0] = os reserved!\n"); ( = 1 ; < bfree_mode ; i++) printf("mbt[%d] = %d\n",i,mbt[i]); }else if ( var > bfree ) { printf("\nthe memory not enough %d job",j+1); break; } } getch(); }
Comments
Post a Comment