#include <stdio.h>
#include <stdlib.h>
int main( ) {
int Max[ 10 ] [ 10 ] , need[ 10 ] [ 10 ] , alloc[ 10 ] [ 10 ] , avail[ 10 ] , completed[ 10 ] , safeSequence[ 10 ] ;
int p, r, i, j, process, count;
count = 0 ;
printf ( "Enter the no of processes: " ) ; for ( i= 0 ; i< p; i++ )
completed[ i] = 0 ;
printf ( "\n \n Enter the no of resources: " ) ; printf ( "\n \n Enter the Max Matrix for each process: " ) ; for ( i= 0 ; i< p; i++ ) {
printf ( "\n For process %d: " , i
+ 1 ) ; for ( j= 0 ; j < r; j++ )
}
printf ( "\n \n Enter the allocation for each process: " ) ; for ( i= 0 ; i< p; i++ ) {
printf ( "\n For process %d: " , i
+ 1 ) ; for ( j= 0 ; j< r; j++ )
scanf ( "%d" , & alloc
[ i
] [ j
] ) ; }
printf ( "\n \n Enter the Available Resources: " ) ; for ( i= 0 ; i< r; i++ )
for ( i= 0 ; i< p; i++ )
for ( j= 0 ; j< r; j++ )
need[ i] [ j] = Max[ i] [ j] - alloc[ i] [ j] ;
do {
printf ( "\n Max matrix:\t Allocation matrix:\n " ) ; for ( i= 0 ; i< p; i++ ) {
for ( j= 0 ; j< r; j++ )
for ( j= 0 ; j< r; j++ )
}
process = - 1 ;
for ( i= 0 ; i< p; i++ ) {
if ( completed[ i] == 0 ) { //if not completed
process = i;
for ( j= 0 ; j< r; j++ ) {
if ( avail[ j] < need[ i] [ j] ) {
process = - 1 ;
break ;
}
}
}
if ( process != - 1 )
break ;
}
if ( process != - 1 ) {
printf ( "\n Process %d runs to completion!" , process
+ 1 ) ; safeSequence[ count] = process + 1 ;
count++;
for ( j= 0 ; j< r; j++ ) {
avail[ j] += alloc[ process] [ j] ;
alloc[ process] [ j] = 0 ;
Max[ process] [ j] = 0 ;
}
completed[ process] = 1 ;
}
} while ( count != p && process != - 1 ) ;
if ( count == p) {
printf ( "\n The system is in a safe state!!\n " ) ; for ( i= 0 ; i< p; i++ )
printf ( "%d " , safeSequence
[ i
] ) ; }
else
printf ( "\n The system is in an unsafe state!!" ) ; }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KaW50IG1haW4oKXsKaW50IE1heFsxMF1bMTBdLCBuZWVkWzEwXVsxMF0sIGFsbG9jWzEwXVsxMF0sIGF2YWlsWzEwXSwgY29tcGxldGVkWzEwXSwgc2FmZVNlcXVlbmNlWzEwXTsKaW50IHAsIHIsIGksIGosIHByb2Nlc3MsIGNvdW50Owpjb3VudCA9IDA7CnByaW50ZigiRW50ZXIgdGhlIG5vIG9mIHByb2Nlc3NlczogIik7CnNjYW5mKCIlZCIsICZwKTsKZm9yKGk9MDsgaTxwOyBpKyspCiAgICBjb21wbGV0ZWRbaV0gPSAwOwpwcmludGYoIlxuXG5FbnRlciB0aGUgbm8gb2YgcmVzb3VyY2VzOiAiKTsKc2NhbmYoIiVkIiwgJnIpOwpwcmludGYoIlxuXG5FbnRlciB0aGUgTWF4IE1hdHJpeCBmb3IgZWFjaCBwcm9jZXNzOiAiKTsKZm9yKGk9MDsgaTxwOyBpKyspewogICAgcHJpbnRmKCJcbkZvciBwcm9jZXNzICVkOiAiLCBpKzEpOwogICAgZm9yKGo9MDsgaiA8cjsgaisrKQogICAgICAgIHNjYW5mKCIlZCIsICZNYXhbaV1bal0pOwp9CnByaW50ZigiXG5cbkVudGVyIHRoZSBhbGxvY2F0aW9uIGZvciBlYWNoIHByb2Nlc3M6ICIpOwpmb3IoaT0wOyBpPHA7IGkrKyl7CiAgICBwcmludGYoIlxuRm9yIHByb2Nlc3MgJWQ6ICIsaSsxKTsKICAgIGZvcihqPTA7ajxyOyBqKyspCiAgICAgICAgc2NhbmYoIiVkIiwgJmFsbG9jW2ldW2pdKTsKfQpwcmludGYoIlxuXG5FbnRlciB0aGUgQXZhaWxhYmxlIFJlc291cmNlczogIik7CmZvcihpPTA7IGk8cjsgaSsrKQogICAgc2NhbmYoIiVkIiwgJmF2YWlsW2ldKTsKZm9yKGk9MDsgaTxwOyBpKyspCiAgICBmb3Ioaj0wOyBqPHI7IGorKykKICAgICAgICBuZWVkW2ldW2pdID0gTWF4W2ldW2pdLWFsbG9jW2ldW2pdOwpkb3sKICAgIHByaW50ZigiXG4gTWF4IG1hdHJpeDpcdEFsbG9jYXRpb24gbWF0cml4OlxuIik7CiAgICBmb3IoaT0wOyBpPHA7IGkrKyl7CiAgICAgICAgZm9yKGo9MDtqPHI7IGorKykKICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBNYXhbaV1bal0pOwogICAgICAgIHByaW50ZigiXHRcdCIpOwogICAgICAgIGZvcihqPTA7ajxyOyBqKyspCiAgICAgICAgICAgIHByaW50ZigiJWQgIiwgYWxsb2NbaV1bal0pOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIHByb2Nlc3MgPSAtMTsKICAgIGZvcihpPTA7IGk8cDsgaSsrKXsKICAgICAgICBpZihjb21wbGV0ZWRbaV09PTApey8vaWYgbm90IGNvbXBsZXRlZAogICAgICAgICAgICBwcm9jZXNzID0gaTsKICAgICAgICAgICAgZm9yKGo9MDtqPHI7IGorKyl7CiAgICAgICAgICAgICAgICBpZihhdmFpbFtqXSA8IG5lZWRbaV1bal0pewogICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgPSAtMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZihwcm9jZXNzICE9IC0xKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGlmKHByb2Nlc3MgIT0gLTEpewogICAgICAgIHByaW50ZigiXG5Qcm9jZXNzICVkIHJ1bnMgdG8gY29tcGxldGlvbiEiLCBwcm9jZXNzICsgMSk7CiAgICAgICAgc2FmZVNlcXVlbmNlW2NvdW50XSA9IHByb2Nlc3MgKyAxOwogICAgICAgIGNvdW50Kys7CiAgICAgICAgZm9yKGo9MDtqPHI7IGorKyl7CiAgICAgICAgICAgIGF2YWlsW2pdICs9IGFsbG9jW3Byb2Nlc3NdW2pdOwogICAgICAgICAgICBhbGxvY1twcm9jZXNzXVtqXSA9IDA7CiAgICAgICAgICAgIE1heFtwcm9jZXNzXVtqXSA9IDA7CiAgICAgICAgfQogICAgICAgIGNvbXBsZXRlZFtwcm9jZXNzXSA9IDE7CiAgICB9Cn13aGlsZShjb3VudCAhPSBwICYmIHByb2Nlc3MgIT0gLTEpOwppZihjb3VudCA9PSBwKXsKICAgIHByaW50ZigiXG5UaGUgc3lzdGVtIGlzIGluIGEgc2FmZSBzdGF0ZSEhXG4iKTsKICAgIHByaW50ZigiU2FmZSBTZXF1ZW5jZTogPCIpOwogICAgZm9yKGk9MDsgaTxwOyBpKyspCiAgICAgICAgcHJpbnRmKCIlZCAiLCBzYWZlU2VxdWVuY2VbaV0pOwogICAgcHJpbnRmKCI+XG4iKTsKfQplbHNlCiAgICBwcmludGYoIlxuVGhlIHN5c3RlbSBpcyBpbiBhbiB1bnNhZmUgc3RhdGUhISIpOwp9