Monday, 21 October 2013

banker_banker

#include<stdio.h>
#include<stdlib.h>

typedef struct proc
{
    int rm[10];
    int ra[10];
    int rn[10];
    int pf;
    int pid;
}proc;

proc p[25];
int ar[10];
int np,nr;

int banker(proc p1[25],int ar1[10]);
void display();
void display1(proc p1[25]);
void request1();
void main()
{
    int i,j,val;
    proc p1[25];
    int ar1[10];
    printf("\n Enter No of proocesses : ");
    scanf("%d",&np);
    printf("\n Enter No of Resources : ");
    scanf("%d",&nr);
   
    printf("\n Enter Process Details.....");
    for(i=0;i<np;i++)
    {
        printf("\n Enter Process ID : ");
        scanf("%d",&p[i].pid);
        p[i].pf=0;
        printf("\n Enter Maximum Resources Needed : ");   
        for(j=0;j<nr;j++)
        {
            printf("\n R%d=",j);
            scanf("%d",&p[i].rm[j]);
        }
   
        printf("\n Enter Resources Allocated : ");   
        for(j=0;j<nr;j++)
        {
            printf("\n R%d=",j);
            scanf("%d",&p[i].ra[j]);
            p[i].rn[j]=p[i].rm[j]-p[i].ra[j];
        }
    }   
           
        printf("\n Enter Resources Available : ");   
        for(j=0;j<nr;j++)
        {
            printf("\n R%d=",j);
            scanf("%d",&ar[j]);
        }


        display();


    for(i=0;i<np;i++)
    {
        p1[i]=p[i];
    }   
       
    display1(p1);

    printf("\n Available Resources : ");
    for(i=0;i<nr;i++)
    {
        ar1[i]=ar[i];       
        printf("\t%d",ar1[i]);
    }
   

        val=banker(p1,ar1);
        request1();
       
}


void display()
{
    int i,j;
    system("clear");
    printf("\n PID     Max_Need_Resources      Allocated_Resources");
   
    for(i=0;i<np;i++)
    {
        printf("\n %d",p[i].pid);
        printf("     ");
        for(j=0;j<nr;j++)
        {
            printf("    %d",p[i].rm[j]);       
        }   
        printf("     ");
        for(j=0;j<nr;j++)
        {   
            printf("    %d",p[i].ra[j]);       
        }
    printf("\n");   
       
    }
   

}


int banker(proc p1[25],int ar1[10])
{
    int i,id,j,k=0,flg=0;
//    int ar1[10];
//    proc p1[25];
   
    printf("\n Sequence Of Execution : ");
    while(k<np)
    {
        for(i=0;i<np;i++)
        {
            if(p[i].pf==0)
            {
                for(j=0;j<nr;j++)
                {
                    if(p1[i].rn[j]<=ar1[j])
                    {
                        flg=0;
                    }
                    else
                    {
                        flg=1;
                        break;
                    }
                }   
           
                if(flg==0)
                {
                    for(j=0;j<nr;j++)
                    {
                        ar1[j]=ar1[j]+p1[i].ra[j];
                        p[i].pf=1;           
                    }
                    printf("=====>>%d",p[i].pid);
                    k++;
                    break;
                }
            }
        }//end for
       
        if(flg==1)
        {
            printf("\n System is in Unsafe state.....");
            return(0);       
        }
   
       
    }//end while   
    if(k==np)
    {
        printf("\n System is in Safe State......");
        return(1);       
    }
    printf("\n");
   
           
}

void request1()
{

    int i,id,r[10],j,val;
    proc p2[25];
    int ar2[10];
    //========requesting for resources========
       
   
    for(i=0;i<np;i++)
    {
        p2[i]=p[i];
    }   
       
    display1(p2);

    printf("\n Available Resources : ");
    for(i=0;i<nr;i++)
    {
        ar2[i]=ar[i];       
        printf("\t%d",ar2[i]);
    }
   
    printf("\n Enter Process Id : ");
    scanf("%d",&id);
   
    printf("\n Enter Requested resources : ");
    for(i=0;i<nr;i++)
    {
        scanf("%d",&r[i]);
        p2[id].ra[i]=p2[id].ra[i]+r[i];
        ar2[i]=ar2[i]-r[i];
        printf("Resource %d",i);
    }
    printf("\n caall to banker.....");
    val=banker(p2,ar2);
    if(val==1)
    {
        printf("\n Requested Resources Are Allocated.....");
    }
    else
    {
        printf("\n Requested Resources Are Not Allocated.....");
    }
}


void display1(proc p1[25])
{
    int i,j;
//    system("clear");
    printf("\n PID     Max_Need_Resources      Allocated      Cur_Need");
   
    for(i=0;i<np;i++)
    {
        printf("\n %d",p1[i].pid);
        printf("     ");
        for(j=0;j<nr;j++)
        {
            printf("    %d",p1[i].rm[j]);       
        }   
        printf("     ");
        for(j=0;j<nr;j++)
        {   
            printf("    %d",p1[i].ra[j]);       
        }
   
        printf("     ");
        for(j=0;j<nr;j++)
        {   
            printf("    %d",p1[i].rn[j]);       
        }
    printf("\n");   
       
    }
   

}




















No comments:

Post a Comment