Tuesday, 4 March 2014

SPOS Banker's Algorithm

// Program to implement Banker's Algorithm



#include<stdio.h>

char res[10]={'A','B','C','D','E','F','G','H','I','J'};

void disp(int m,int n,int alloc[5][5],int max[5][5],int avble[5],int need[5][5]);

void safesq(int m,int n,int alloc[5][5],int avble[5],int need[5][5]);



 main()

{

    int i,j,ch,n,m,work1[5];

    int avble[5],alloc[5][5],max[5][5],need[5][5];

    printf("\nENTER THE NUMBER OF PROCESSES : \t");

    scanf("%d",&n);

    printf("\nENTER THE NUMBER OF RESOURCES : \t");

    scanf("%d",&m);

    printf("\nENTER THE MAXIMUM INSTANCES OF EACH RESOURCE\n");

    for(i=0;i<m;i++)

    {

        printf("\n\tRESOURCE %c:\t",res[i]);

        scanf("%d",&avble[i] );

    }

    printf("\nENTER THE MAXIMUM DEMAND OF EACH PROCESS FOR A RESOURCE\n");

    for(i=0;i<n;i++)

    {

        printf("\n\tFOR PROCESS P%d \n",i);

        for(j=0;j<m;j++)

        {

            printf("\n\tRESOURCE %c : \t",res[j]);

            scanf("%d",&max[i][j]);

        }

    }

    printf("\nENTER THE MAX NO. OF INSTANCES OF A RESOURCE ALLOCATED TO");

    printf(" A PROCESS.\n");

    for(i=0;i<n;i++)

    {

        printf("\n\tFOR PROCESS P%d \n",i);

        for(j=0;j<m;j++)

        {

            printf("\n\tRESOURCE %c : \t",res[j]);

            scanf("%d",&alloc[i][j]);

        }

    }

    for(i=0;i<m;i++)

    {

        work1[i]=0;

        for(j=0;j<n;j++)

        work1[i]+=alloc[j][i];

        avble[i]=avble[i] - work1[i];

    }

    for(i=0;i<n;i++)

    {

        for(j=0;j<m;j++)

        {

            need[i][j]=max[i][j]-alloc[i][j];

        }

    }

    while(1)

    {

        printf("\n\n\tMENU:\n\t1]DISPLAY DATA\n\t2]GENERATE SAFE SEQUENCE");

        printf("\n\t3]EXIT\n\tENTER YOUR CHOICE:\t");

        scanf("%d",&ch);

        switch(ch)

        {

            case 1:

                disp(m,n,alloc,max,avble,need);

                break;

            case 2:

                safesq(m,n,alloc,avble,need);

                break;

           
            case 3:

                exit(0);

            default:

                printf("\n\tINVALID CHOICE ENTERED.\n");

        }

    }

}

void disp(int m,int n,int alloc[5][5],int max[5][5],int avble[5],int need[5][5])

{

    int i,j;

    printf("\n\t\tALLOCATION\tMAX\tNEED\t AVAILABLE");

    printf("\t\t");

    for(i=0;i<4;i++)

    {

        for(j=0;j<m;j++)

            printf("%c ",res[j]);

        printf(" ");

    }

    for(i=0;i<n;i++)

    {

        printf("\n\tP%d\t",i);

        for(j=0;j<m;j++)

            printf("%d ",alloc[i][j]);

        printf(" ");

        for(j=0;j<m;j++)

            printf("%d ",max[i][j]);

        printf("\t");

        for(j=0;j<m;j++)

            printf("%d ",need[i][j]);

        printf(" ");

        if(i==0)

        {

            for(j=0;j<m;j++)

                printf("%d ",avble[j]);

        }

    }

}

void safesq(int m,int n,int alloc[5][5],int avble[5],int need[5][5])

{

    int i,j,k=0,l,work[5],work1[5],fin[5],flag=0,flag1=0,safesq[6];

    for(i=0;i<m;i++)

        work[i]=avble[i];

    for(i=0;i<n;i++)

        fin[i]=0;

    for(l=0;l<n;l++)

    {

        for(i=0;i<n;i++)

        {

            flag1=0;

            if(fin[i]==0)

            {

                for(j=0; j<m; j++)

                {

                    if(need[i][j] > work[j])

                    {

                        flag1=1;

                        break;

                    }

                }

                if(flag1==0)

                {

                    for(j=0;j<m;j++)

                        work[j]=work[j]+alloc[i][j];

                    fin[i]=1;

                    safesq[k]=i;

                    k++;

                }

            }

        }

    }

    for(i=0;i<n;i++)

    {

        if(fin[i]==0)

        {

            printf("\n\tFOR THE GIVEN REQUIREMENT THE SYSTEM IS");

            printf(" NOT IN A SAFE STATE.\n");

            flag=1;

            break;

        }

    }

    if(flag==0)

    {

        printf("\n\tTHE SAFE SEQUENCE IS:\t");

        for(i=0;i<n;i++)

            printf("P%d ",safesq[i]);

    }
}


 ---------------------------------------------------O/P---------------------------------------------------------------

 
computer@computer-OptiPlex-745:~$ cc bka.c
bka.c: In function ‘main’:
bka.c:138:5: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
computer@computer-OptiPlex-745:~$ ./a.out

ENTER THE NUMBER OF PROCESSES : 4

ENTER THE NUMBER OF RESOURCES : 3

ENTER THE MAXIMUM INSTANCES OF EACH RESOURCE

RESOURCE A: 13

RESOURCE B: 7

RESOURCE C: 10

ENTER THE MAXIMUM DEMAND OF EACH PROCESS FOR A RESOURCE

FOR PROCESS P0

RESOURCE A : 4

RESOURCE B : 3

RESOURCE C : 3

FOR PROCESS P1

RESOURCE A : 7

RESOURCE B : 2

RESOURCE C : 4

FOR PROCESS P2

RESOURCE A : 4

RESOURCE B : 2

RESOURCE C : 5

FOR PROCESS P3

RESOURCE A : 5

RESOURCE B : 3

RESOURCE C : 3

ENTER THE MAX NO. OF INSTANCES OF A RESOURCE ALLOCATED TO A PROCESS.

FOR PROCESS P0

RESOURCE A : 2

RESOURCE B : 1

RESOURCE C : 1

FOR PROCESS P1

RESOURCE A : 7

RESOURCE B : 2

RESOURCE C : 3

FOR PROCESS P2

RESOURCE A : 3

RESOURCE B : 2

RESOURCE C : 2

FOR PROCESS P3

RESOURCE A : 1

RESOURCE B : 1

RESOURCE C : 3


MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 1

ALLOCATION MAX NEED AVAILABLE A B C A B C A B C A B C
P0 2 1 1 4 3 3 2 2 2 0 1 1
P1 7 2 3 7 2 4 0 0 1
P2 3 2 2 4 2 5 1 0 3
P3 1 1 3 5 3 3 4 2 0

MENU:
1]DISPLAY DATA
2]GENERATE SAFE SEQUENCE
3]EXIT
ENTER YOUR CHOICE: 2

THE SAFE SEQUENCE IS: P1 P2 P3 P0

guest-stEO95@computer-OptiPlex-745:~$ gedit 123.c

guest-stEO95@computer-OptiPlex-745:~$ cc 123.c

123.c: In function ‘main’:

123.c:138:17: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]

guest-stEO95@computer-OptiPlex-745:~$ ./a.out

ENTER THE NUMBER OF PROCESSES : 4
ENTER THE NUMBER OF RESOURCES : 3

ENTER THE MAXIMUM INSTANCES OF EACH RESOURCE

RESOURCE A: 2
RESOURCE B: 3
RESOURCE C: 2

ENTER THE MAXIMUM DEMAND OF EACH PROCESS FOR A RESOURCE

FOR PROCESS P0

RESOURCE A : 4
RESOURCE B : 5
RESOURCE C : 3
FOR PROCESS P1

RESOURCE A : 6
RESOURCE B : 3
RESOURCE C : 1

FOR PROCESS P2

RESOURCE A : 4
RESOURCE B : 0
RESOURCE C : 0

FOR PROCESS P3

RESOURCE A : 5
RESOURCE B : 6
RESOURCE C : 1

ENTER THE MAX NO. OF INSTANCES OF A RESOURCE ALLOCATED TO A PROCESS.


FOR PROCESS P0

RESOURCE A : 4
RESOURCE B : 2
RESOURCE C : 0

FOR PROCESS P1

RESOURCE A : 2
RESOURCE B : 3
RESOURCE C : 4

FOR PROCESS P2

RESOURCE A : 2
RESOURCE B : 0
RESOURCE C : 5

FOR PROCESS P3

RESOURCE A : 6
RESOURCE B : 2
RESOURCE C : 3


MENU:

1]DISPLAY DATA

2]GENERATE SAFE SEQUENCE

3]EXIT

ENTER YOUR CHOICE: 1



ALLOCATION MAX NEED AVAILABLE A B C A B C A B C A B C

P0 4 2 0 4 5 3 0 3 3 -12 -4 -10

P1 2 3 4 6 3 1 4 0 -3

P2 2 0 5 4 0 0 2 0 -5

P3 6 2 3 5 6 1 -1 4 -2



MENU:

1]DISPLAY DATA

2]GENERATE SAFE SEQUENCE

3]EXIT

ENTER YOUR CHOICE: 2


FOR THE GIVEN REQUIREMENT THE SYSTEM IS NOT IN A SAFE STATE.








No comments:

Post a Comment