Spos Practical 5
Spos Practical 5
Roll No :13228
Batch : B2
Practical 5
def fcfs_scheduling():
processes = int(input("Enter the number of processes (up to 6): "))
total_wt = sum(wt)
total_tt = sum(tt)
def priority_scheduling():
totalprocess = int(input("Enter the number of processes: "))
proc = [[0, 0, 0, 0] for _ in range(totalprocess)]
def get_wt_time(wt):
service = [0] * totalprocess
service[0] = proc[0][0]
wt[0] = 0
print("Process\tArrival\tPriority\tBurst\tStart\tComplete\tTurnaround\tWaiting")
for i in range(totalprocess):
wavg += wt[i]
tavg += tat[i]
print(f"P{proc[i][3]}\t{proc[i][0]}\t{proc[i][2]}\t\t{proc[i][1]}\t{stime[i]}\t{ctime[i]}\t\t{tat[i]}\t\t{wt[i]}")
for i in range(totalprocess):
arrivaltime = int(input(f"Enter arrival time for process {i + 1}: "))
bursttime = int(input(f"Enter burst time for process {i + 1}: "))
priority = int(input(f"Enter priority for process {i + 1}: "))
proc[i][0] = arrivaltime
proc[i][1] = bursttime
proc[i][2] = priority
proc[i][3] = i + 1
def round_robin_scheduling():
processes = int(input("Enter the number of processes: "))
quantum = int(input("Enter the quantum time: "))
at = [0] * processes
bt = [0] * processes
rem_bt = [0] * processes
if ready_queue:
i = ready_queue.pop(0)
if rem_bt[i] > quantum:
t += quantum
rem_bt[i] -= quantum
for j in range(processes):
if at[j] <= t and not arrived[j]:
ready_queue.append(j)
arrived[j] = True
ready_queue.append(i)
else:
t += rem_bt[i]
rem_bt[i] = 0
ct[i] = t
tt[i] = ct[i] - at[i]
wt[i] = tt[i] - bt[i]
complete += 1
else:
t += 1
print("\nProcess\tArrival\tBurst\tCompletion\tWaiting\tTurnaround")
for i in range(processes):
print(f"P{i + 1}\t\t{at[i]}\t\t{bt[i]}\t\t{ct[i]}\t\t\t{wt[i]}\t\t{tt[i]}")
total_wt = sum(wt)
total_tt = sum(tt)
print(f"\nAverage Waiting Time: {total_wt / processes:.2f}")
print(f"Average Turnaround Time: {total_tt / processes:.2f}")
def sjf_preemptive_scheduling():
processes = int(input("Enter the number of processes: "))
arrival_times = [0] * processes
burst_times = [0] * processes
remaining_times = burst_times[:]
completion_times = [0] * processes
waiting_times = [0] * processes
turnaround_times = [0] * processes
time = 0
completed = 0
for i in range(processes):
if arrival_times[i] <= time and remaining_times[i] > 0:
if remaining_times[i] < min_remaining_time:
min_remaining_time = remaining_times[i]
shortest_process = i
if shortest_process is None:
time += 1
continue
remaining_times[shortest_process] -= 1
if remaining_times[shortest_process] == 0:
completed += 1
completion_times[shortest_process] = time + 1
waiting_times[shortest_process] = (completion_times[shortest_process] -
arrival_times[shortest_process] -
burst_times[shortest_process])
turnaround_times[shortest_process] = (waiting_times[shortest_process] +
burst_times[shortest_process])
time += 1
total_wt = sum(waiting_times)
total_tt = sum(turnaround_times)
print("\nProcess\tArrival\tBurst\tCompletion\tWaiting\tTurnaround")
for i in range(processes):
print(f"P{i + 1}\t\t{arrival_times[i]}\t\t{burst_times[i]}\t\t{completion_times[i]}\t\t{waiting_times[i]}\t\
t{turnaround_times[i]}")
def main():
while True:
print("\nSelect Scheduling Algorithm:")
print("1. FCFS")
print("2. Priority Scheduling")
print("3. Round Robin")
print("4. SJF Preemptive")
print("5. Exit")
if choice == 1:
fcfs_scheduling()
elif choice == 2:
priority_scheduling()
elif choice == 3:
round_robin_scheduling()
elif choice == 4:
sjf_preemptive_scheduling()
elif choice == 5:
print("Exiting the program.")
break # Exit the loop
else:
print("Invalid choice! Please try again.")
if __name__ == "__main__":
main()
OUTPUT :
PS C:\Users\HP> & "C:/Program Files/Python312/python.exe" "c:/Users/HP/OneDrive/Desktop/spos
practical/lexical/fifo.py"
Conclusion :
The tested scheduling algorithms included:
1. FCFS: Processes executed in arrival order.
2. Priority Scheduling: Higher-priority processes executed first.
3. Round Robin: Processes shared CPU time with a quantum of 2.
4. SJF Preemptive: Prioritized processes with the shortest burst times.
Overall, SJF Preemptive performed best in managing process execution.