The output of the following problem should be: P1 -> P3 -> P4 -> P5 -> P0 -> P2  but the output I get when I run my code is: P1 -> P3 -> P4 -> P5   Note: I am sharing my code below. Please tell me what to fix in my code to get the desired output. P   Problem: Write a c program that will generate the safe sequence of process execution for the situation given below:(Use Banker’s Algorithm). Note: The code can be implemented in several different ways, but make sure the parameter remains the same as shown below. n = 6; // Number of processes m = 4; // Number of resources int alloc[6][4] = { { 0, 1, 0, 3 }, // P0// Allocation Matrix { 2, 0, 0, 3 }, // P1 { 3, 0, 2, 0 }, // P2 { 2, 1, 1, 5 }, // P3 { 0, 0, 2, 2 }, // P4 {1, 2 , 3, 1 } }; //P5 int max[6][4] = { { 6, 4, 3, 4 }, // P0 // MAX Matrix { 3, 2, 2, 4 }, // P1 { 9, 1, 2, 6 }, // P2 { 2, 2, 2, 8 }, // P3 { 4, 3, 3, 7 }, // P4 { 6, 2, 6, 5 } }; //P5 int avail[4] = { 2, 2, 2, 1 }; //Available resources   My code:  #include int main() {          int n, m;     n = 6; // Number of processes     m = 4; // Number of resources          // Allocation Matrix     int allocation[6][4] =  { { 0, 1, 0, 3 }, // P0                             { 2, 0, 0, 3 }, // P1                             { 3, 0, 2, 0 }, // P2                             { 2, 1, 1, 5 }, // P3                             { 0, 0, 2, 2 }, // P4                             {1, 2 , 3, 1 } }; //P5                                  // MAX Matrix     int max[6][4] = { { 6, 4, 3, 4 }, // P0                      { 3, 2, 2, 4 }, // P1                     { 9, 1, 2, 6 }, // P2                     { 2, 2, 2, 8 }, // P3                     { 4, 3, 3, 7 }, // P4                     { 6, 2 , 6, 5 } }; //P5          //Available resources     int avail[4] = { 2, 2, 2, 1 };          //calculating Need Matrix     int need[n][m];          for(int i = 0; i < n; i++){         for(int j = 0; j < m; j++)             need[i][j] = max[i][j]-allocation[i][j];     }          //Banker's Algorithm     int k, flag;     k = 0; //the variable k is the index of the safe sequence array          int completion[20], safe_sequence[20]; /* The completion array stores the processes' completion status.                                         It will store value 0 for an incomplete process and 1 for a                                          complete process */                                              // Initally all processes are incomplete     for(int i = 0; i < n; i++) {         completion[i] = 0;     }          for(int i = 0; i < n; i++) {         flag = 0;         if(completion[i] == 0)          {             //Process is incomplete. So execute the Process             for(int j = 0; j < m; j++) {                 if(need[i][j] > avail[j]) //If need is greater than available break out of the loop                  {                     flag = 1;                     break;                 }             }             if(flag==0) // Need is less than available             {                 completion[i] = 1;                 safe_sequence[k] = i;                 k++;                 //Calculate new available                 for(int j = 0; j < m; j++)                 {                     avail[j] += allocation[i][j];                 }                 i = i - 1; //loop from the first process                              }         }     }                         printf("Safe Sequence:\n");     for(int i = 0; i < k; i++)     {         printf("P%d", safe_sequence[i]);         if(i < k-1)         {             printf(" -> ");         }              }           }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
icon
Concept explainers
Question

The output of the following problem should be: P1 -> P3 -> P4 -> P5 -> P0 -> P2 

but the output I get when I run my code is: P1 -> P3 -> P4 -> P5

 

Note: I am sharing my code below. Please tell me what to fix in my code to get the desired output. P

 

Problem:

Write a c program that will generate the safe sequence of process execution for the situation
given below:(Use Banker’s Algorithm).
Note: The code can be implemented in several different ways, but make sure the parameter
remains the same as shown below.
n = 6; // Number of processes
m = 4; // Number of resources
int alloc[6][4] = { { 0, 1, 0, 3 }, // P0// Allocation Matrix
{ 2, 0, 0, 3 }, // P1
{ 3, 0, 2, 0 }, // P2
{ 2, 1, 1, 5 }, // P3
{ 0, 0, 2, 2 }, // P4
{1, 2 , 3, 1 } }; //P5
int max[6][4] = { { 6, 4, 3, 4 }, // P0 // MAX Matrix
{ 3, 2, 2, 4 }, // P1
{ 9, 1, 2, 6 }, // P2
{ 2, 2, 2, 8 }, // P3
{ 4, 3, 3, 7 }, // P4
{ 6, 2, 6, 5 } }; //P5
int avail[4] = { 2, 2, 2, 1 }; //Available resources

 

My code: 

#include <stdio.h>

int main() {
    
    int n, m;
    n = 6; // Number of processes
    m = 4; // Number of resources
    
    // Allocation Matrix
    int allocation[6][4] =  { { 0, 1, 0, 3 }, // P0
                            { 2, 0, 0, 3 }, // P1
                            { 3, 0, 2, 0 }, // P2
                            { 2, 1, 1, 5 }, // P3
                            { 0, 0, 2, 2 }, // P4
                            {1, 2 , 3, 1 } }; //P5
                            
    // MAX Matrix
    int max[6][4] = { { 6, 4, 3, 4 }, // P0 
                    { 3, 2, 2, 4 }, // P1
                    { 9, 1, 2, 6 }, // P2
                    { 2, 2, 2, 8 }, // P3
                    { 4, 3, 3, 7 }, // P4
                    { 6, 2 , 6, 5 } }; //P5
    
    //Available resources
    int avail[4] = { 2, 2, 2, 1 };
    
    //calculating Need Matrix
    int need[n][m];
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            need[i][j] = max[i][j]-allocation[i][j];
    }
    
    //Banker's Algorithm
    int k, flag;
    k = 0; //the variable k is the index of the safe sequence array
    
    int completion[20], safe_sequence[20]; /* The completion array stores the processes' completion status.
                                        It will store value 0 for an incomplete process and 1 for a 
                                        complete process */
                                        
    // Initally all processes are incomplete
    for(int i = 0; i < n; i++) {
        completion[i] = 0;
    }
    
    for(int i = 0; i < n; i++) {
        flag = 0;
        if(completion[i] == 0) 
        {
            //Process is incomplete. So execute the Process
            for(int j = 0; j < m; j++) {
                if(need[i][j] > avail[j]) //If need is greater than available break out of the loop 
                {
                    flag = 1;
                    break;
                }
            }
            if(flag==0) // Need is less than available
            {
                completion[i] = 1;
                safe_sequence[k] = i;
                k++;
                //Calculate new available
                for(int j = 0; j < m; j++)
                {
                    avail[j] += allocation[i][j];
                }
                i = i - 1; //loop from the first process
                
            }
        }
    }
     
    
    
   
    printf("Safe Sequence:\n");
    for(int i = 0; i < k; i++)
    {
        printf("P%d", safe_sequence[i]);
        if(i < k-1)
        {
            printf(" -> ");
        }
        
    }
    
    
}

 

Expert Solution
steps

Step by step

Solved in 4 steps with 3 images

Blurred answer
Knowledge Booster
Operators
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education