#!/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
To embed this program on your website, copy the following code and paste it into your website's HTML: