Skip to content

Instantly share code, notes, and snippets.

@Anan5a
Created November 13, 2022 03:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Anan5a/85dd2f333bc6372bf76c7d8862ba55a1 to your computer and use it in GitHub Desktop.
Save Anan5a/85dd2f333bc6372bf76c7d8862ba55a1 to your computer and use it in GitHub Desktop.
class Process:
def __init__(self, pid, at, bt, priority=None):
self.pid = pid
self.at = at
self.bt = bt
self.priority = priority
self.ct = None
self.tat = None
self.wt = None
self.bt_remaining = bt
self.completed = 0
self.start_time = None
self.rt = None
def runScheduler(processes: "list[Process]", tq=1):
print("Inside scheduler")
n = len(processes)
completed = 0
current_time = 0
processes.sort(key=lambda x: x.at)
while completed != n:
for i in range(n):
if processes[i].at <= current_time:
if processes[i].bt_remaining > 0:
if processes[i].bt_remaining > tq:
current_time = current_time + tq
processes[i].bt_remaining = processes[i].bt_remaining - tq
else:
current_time = current_time + processes[i].bt_remaining
processes[i].bt_remaining = 0
completed = completed + 1
processes[i].ct = current_time
else:
current_time = current_time + tq
def findTurnAroundTime(processes):
total_tat = 0
for i in range(len(processes)):
# tat = ct[i] - at[i]
tat = processes[i].ct - processes[i].at
total_tat = total_tat + tat
processes[i].tat = tat
return total_tat
def findWaitingTime(processes):
total_wait = 0
for i in range(len(processes)):
# wt[i] = tat[i] - bt[i]
wt = processes[i].tat - processes[i].bt
processes[i].wt = wt
total_wait = total_wait + wt
return total_wait
def findAvgTime(processes, tq):
n = len(processes)
# # run scheduling algorithm: priority scheduling
runScheduler(processes, tq)
processes.sort(key=lambda x: x.ct)
# Function to find turn around time for all processes
total_tat = findTurnAroundTime(processes)
# Function to find wait time for all processes
total_wt = findWaitingTime(processes)
# Display processes along with all details
print("PID\tAT\tBT" + "\tCT" + "\tTAT\tWT")
for i in range(n):
print(str(processes[i].pid) + "\t" + str(processes[i].at) + "\t" + str(processes[i].bt) + "\t" + str(
processes[i].ct) + "\t" + str(processes[i].tat) + "\t" + str(processes[i].wt) + "\t"
# str(processes[i].priority) + "\t"
)
print("Average waiting time = " + str(total_wt / n))
print("Average turn around time = " + str(total_tat / n))
if __name__ == "__main__":
# process_list = [Process(1, 2, 6), Process(2, 5, 2), Process(3, 1, 8), Process(4, 0, 3), Process(5, 4, 4)]
# process_list = [Process(1, 1, 3,3), Process(2, 2, 5,4), Process(3, 3, 1,1), Process(4, 4, 7,7), Process(5, 5, 4,8)]
process_list = [Process(pid=1, at=2, bt=6), Process(pid=2, at=115, bt=2), Process(pid=3, at=1, bt=8),
Process(pid=4, at=0, bt=3), Process(pid=5, at=4, bt=4)]
findAvgTime(process_list, 2)
tq = 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment