0% found this document useful (0 votes)
13 views6 pages

Assignment - 2 Nikhil Kumar Agrawal (2021btech077)

Uploaded by

yaminisharma650
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views6 pages

Assignment - 2 Nikhil Kumar Agrawal (2021btech077)

Uploaded by

yaminisharma650
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

JK Lakshmipat University, Jaipur

Institute of Engineering and Technology


Department of Computer Science Engineering

Assignment -1

Course code:
CS 1108

Submitted by:
Nikhil Kumar Agrawal
(2021Btech077)
WAP to Implement First Come First Serve and Shortest Job First CPU
Scheduling algorithms.
User Input:
I. Number of jobs, N
II. Arrival time of each job, AT
III. CPU/ Burst time of each job, BT

Desired Output:
I. Print the job sequence
II. Completion time of each job, CT
III. Waiting Time of each job, WT (WT = TAT - BT)
IV. Average Waiting Time, AWT (AWT = (WT1 + WT2 + ........ + WTN)/N)
V. Turn Around Time of each job, TAT (TAT = CT – AT or TAT = WT + BT)
VI. Average Turn Around Time, ATAT (ATAT = (TAT1 + TAT2 + ........ + TATN)/N)

Code in Linux for FCFS and SJF:


#!/bin/bash

# Function to calculate Average


calculate_average() {
local sum=0
for num in "${@}"; do
((sum += num))
done
echo "scale=2; $sum / $#" | bc
}

# Input
read -p "Enter the number of jobs, N: " N

# Initialize arrays for job data


declare -a AT
declare -a BT
declare -a CT
declare -a WT
declare -a TAT

# Input arrival time and burst time for each job


for ((i = 0; i < N; i++)); do
read -p "Enter Arrival Time for Job $((i + 1)): " AT[$i]
read -p "Enter Burst Time for Job $((i + 1)): " BT[$i]
done

# Sort jobs based on Arrival Time for SJF


for ((i = 0; i < N; i++)); do
for ((j = i + 1; j < N; j++)); do
if ((AT[$i] > AT[$j])); then
# Swap Arrival Time
temp=${AT[$i]}
AT[$i]=${AT[$j]}
AT[$j]=$temp
# Swap Burst Time
temp=${BT[$i]}
BT[$i]=${BT[$j]}
BT[$j]=$temp
fi
done
done

# FCFS Scheduling
CT[0]=${AT[0]}
for ((i = 0; i < N; i++)); do
if ((CT[$i] < AT[$i])); then
CT[$i]=${AT[$i]}
fi
((CT[$i] += BT[$i]))
TAT[$i]=$((CT[$i] - AT[$i]))
WT[$i]=$((TAT[$i] - BT[$i]))
done

# Output results for FCFS


echo "FCFS Scheduling:"
echo "Job Sequence: ${AT[@]}"
echo "Completion Time: ${CT[@]}"
echo "Waiting Time: ${WT[@]}"
AWT=$(calculate_average "${WT[@]}")
echo "Average Waiting Time (AWT): $AWT"
echo "Turn Around Time: ${TAT[@]}"
ATAT=$(calculate_average "${TAT[@]}")
echo "Average Turn Around Time (ATAT): $ATAT"

# SJF Scheduling
CT[0]=${AT[0]}
declare -a visited
for ((i = 0; i < N; i++)); do
visited[$i]=0
done

for ((i = 0; i < N; i++)); do


min_index=-1
min_val=999999
for ((j = 0; j < N; j++)); do
if ((visited[$j] == 0 && AT[$j] <= CT[$i] && BT[$j] < min_val)); then
min_index=$j
min_val=${BT[$j]}
fi
done
if ((min_index == -1)); then
for ((j = 0; j < N; j++)); do
if ((visited[$j] == 0 && AT[$j] > CT[$i])); then
min_index=$j
break
fi
done
fi
visited[$min_index]=1
((CT[$min_index] = CT[$i] + BT[$min_index]))
TAT[$min_index]=$((CT[$min_index] - AT[$min_index]))
WT[$min_index]=$((TAT[$min_index] - BT[$min_index]))
done

# Output results for SJF


echo "SJF Scheduling:"
echo "Job Sequence: ${AT[@]}"
echo "Completion Time: ${CT[@]}"
echo "Waiting Time: ${WT[@]}"
AWT=$(calculate_average "${WT[@]}")
echo "Average Waiting Time (AWT): $AWT"
echo "Turn Around Time: ${TAT[@]}"
ATAT=$(calculate_average "${TAT[@]}")
echo "Average Turn Around Time (ATAT): $ATAT"
Output :

You might also like