#!/bin/bash


# Define an array to store process names
processes=("P1" "P2" "P3" "P4")

# Define an array to store burst times for each process
burst_times=(8 4 9 5)

# Define the time quantum (time slice)
time_quantum=3

# Calculate the number of processes
num_processes=${#processes[@]}

# Initialize waiting time, turnaround time, and remaining burst time arrays
waiting_time=()
turnaround_time=()
remaining_burst=()

# Initialize total waiting time and total turnaround time variables
total_waiting_time=0
total_turnaround_time=0

# Copy burst times to the remaining burst time array
for ((i=0; i<num_processes; i++)); do
    remaining_burst[$i]=${burst_times[$i]}
done

# Simulate Round Robin scheduling
current_time=0
while true; do
    all_done=true
    for ((i=0; i<num_processes; i++)); do
        if [ ${remaining_burst[$i]} -gt 0 ]; then
            all_done=false
            if [ ${remaining_burst[$i]} -gt $time_quantum ]; then
                current_time=$((current_time + time_quantum))
                remaining_burst[$i]=$((remaining_burst[$i] - time_quantum))
            else
                current_time=$((current_time + remaining_burst[$i]))
                waiting_time[$i]=$((current_time - burst_times[$i]))
                remaining_burst[$i]=0
            fi
        fi
    done

    if $all_done; then
        break
    fi
done

# Calculate turnaround time for each process
for ((i=0; i<num_processes; i++)); do
    turnaround_time[$i]=$((burst_times[$i] + waiting_time[$i]))
    total_waiting_time=$((total_waiting_time + waiting_time[$i]))
    total_turnaround_time=$((total_turnaround_time + turnaround_time[$i]))
done

# Calculate average waiting time and average turnaround time
average_waiting_time=$(bc <<< "scale=2; $total_waiting_time / $num_processes")
average_turnaround_time=$(bc <<< "scale=2; $total_turnaround_time / $num_processes")

# Print the results
echo "Round Robin Scheduling Algorithm Simulation (Time Quantum: $time_quantum)"
echo "-----------------------------------"
echo "Process  Burst Time  Waiting Time  Turnaround Time"
for ((i=0; i<num_processes; i++)); do
    echo "${processes[$i]}        ${burst_times[$i]}           ${waiting_time[$i]}             ${turnaround_time[$i]}"
done
echo "-----------------------------------"
echo "Average Waiting Time: $average_waiting_time"
echo "Average Turnaround Time: $average_turnaround_time"

Embed on website

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