• Breaking

    You'll get reports of electrical and computer engineering here.

    Friday, October 4, 2019

    Banker's algorithm


    Problem No: 12
    Name of the problem: Banker’s algorithm

    Theory: The banker’s algorithm is a resource allocation and deadlock avoidance algorithm that tests for safety by simulating the allocation for predetermined maximum possible amounts of all resources then make an “s-state” check to test for possible activities, before deciding whether allocation should be allowed to continue.
    Code:


    #include<bits/stdc++.h>
    using namespace std;
    #include<string.h>
    int main()
    {
     int n,m,i,j,k,f=0,ar[10],z=0;//n=no_of_process,m=no_of_resources
        printf("Enter the number of processes   -");
        scanf("%d",&n);
        int finished[n];
        memset(finished+0,0,n*sizeof(int));
        printf("Enter the number of resources   -");
        scanf("%d",&m);
        int allocation[n][m],need[n][m],max[n][m],available[m],request[m];
        for(i=0; i<n; i++)
        { printf("Enter details for P%d\nEnter allocation\t\t-",i);
            for(j=0; j<m; j++)
            {scanf("%d",&allocation[i][j]);
            }
            printf("Enter max\t\t\t-");
            for(j=0; j<m; j++)
            {
                scanf("%d",&max[i][j]);
                need[i][j]=max[i][j]-allocation[i][j];
            }
    }
        printf("Enter Available Resources\t-");
        for(i=0; i<m; i++)
            scanf("%d",&available[i]);
        printf("Enter new request details--\nEnter pid\t\t\t");
        int temp;
        scanf("%d",&temp);
        printf("Enter new request details\t-");
        for(i=0; i<m; i++)
        {scanf("%d",&request[i]);
            available[i]=available[i]-request[i];
            allocation[temp][i]= allocation[temp][i]+request[i];
            need[temp][i]=max[temp][i]-allocation[temp][i];
        }


        cout<<"----------------OUTPUT-----------------"<<endl<<endl;
        int loop=n;
        while(loop--)
        {for(i=0; i<n; i++)
            {if(finished[i]==0)
                {
                    k=0;
                    for(j=0; j<m; j++)
                    {
                        if(need[i][j]<=available[j])
                            k++;
                        else
                            break;
                    }
                    if(k==m)
                    {
                        finished[i]=1;
                        f++;
                        printf("\nP%d is visited ",i);
                        ar[z++]=i;
                        for(j=0; j<m; j++)
                        {
                            available[j]=allocation[i][j]+available[j];
                            printf("%d ",available[j]);
                        }}}}
            if(f==n)
            {break; }
    }
        cout<<"System in safe state"<<endl<<"Safe sequence--( ";
        for(i=0; i<z; i++)
        {
            cout<<"P"<<ar[i]<<" ";
        }
        cout<<" )";
        printf("\n");
        for(i=0; i<n; i++)
        {
            printf("\nP%d\t",i);
            for(k=0; k<m; k++)
                printf("%d ",allocation[i][k]);
            printf("\t");
            for(k=0; k<m; k++)
                printf("%d ",max[i][k]);
            printf("\t");
            for(k=0; k<m; k++)
                printf("%d ",need[i][k]);
        }}



    No comments:

    Post a Comment