#!/bin/bash

#!/bin/bash

# Number of processes and resources
num_processes=5
num_resources=3

# Available resources
available=(10 5 7)

# Maximum resources each process can claim
max_resources=(
    7 5 3
    3 2 2
    9 0 2
    2 2 2
    4 3 3
)

# Resources currently allocated to each process
allocated_resources=(
    0 1 0
    2 0 0
    3 0 2
    2 1 1
    0 0 2
)

# Resources requested by a process
requested_resources=(1 0 2)

function is_safe() {
    local need=()

    for ((i = 0; i < num_processes; i++)); do
        for ((j = 0; j < num_resources; j++)); do
            need[(i * num_resources) + j]=$((max_resources[(i * num_resources) + j] - allocated_resources[(i * num_resources) + j]))
        done
    done

    local work=("${available[@]}")
    local finish=()

    for ((i = 0; i < num_processes; i++)); do
        finish+=("false")
    done

    local safe_sequence=()
    local count=0

    while [ $count -lt $num_processes ]; do
        local found=false
        for ((i = 0; i < num_processes; i++)); do
            if [ "${finish[i]}" = "false" ]; then
                local j
                for ((j = 0; j < num_resources; j++)); do
                    if [ ${need[(i * num_resources) + j]} -gt ${work[j]} ]; then
                        break
                    fi
                done
                if [ $j -eq $num_resources ]; then
                    for ((k = 0; k < num_resources; k++)); do
                        work[k]=$((work[k] + allocated_resources[(i * num_resources) + k]))
                    done
                    safe_sequence+=($i)
                    finish[i]="true"
                    found=true
                    ((count++))
                fi
            fi
        done
        if [ "$found" = "false" ]; then
            break
        fi
    done

    if [ $count -eq $num_processes ]; then
        echo "Safe Sequence: ${safe_sequence[@]}"
        return 0
    else
        echo "Unsafe State"
        return 1
    fi
}

echo "Available Resources: ${available[@]}"
echo "Maximum Resources:"
for ((i = 0; i < num_processes; i++)); do
    echo "${max_resources[(i * num_resources)]} ${max_resources[(i * num_resources) + 1]} ${max_resources[(i * num_resources) + 2]}"
done

echo "Currently Allocated Resources:"
for ((i = 0; i < num_processes; i++)); do
    echo "${allocated_resources[(i * num_resources)]} ${allocated_resources[(i * num_resources) + 1]} ${allocated_resources[(i * num_resources) + 2]}"
done

echo "Requested Resources: ${requested_resources[@]}"

# Check if the request can be granted
for ((i = 0; i < num_resources; i++)); do
    if [ "${requested_resources[i]}" -gt "${available[i]}" ]; then
        echo "Request exceeds available resources."
        exit 1
    fi
done

for ((i = 0; i < num_resources; i++)); do
    available[i]=$((available[i] - requested_resources[i]))
    allocated_resources[i]=$((allocated_resources[i] + requested_resources[i]))
    max_resources[i]=$((max_resources[i] - requested_resources[i]))
done

is_safe

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: