In: Computer Science
Implement the CPU scheduling algorithm FCFS non-preemptive in python. Have the program answer the table.
Simulate and evaluate with the set of eight processes below.
Assumptions:
Process Data:
process goes {CPU burst, I/O time, CPU burst, I/O time, CPU burst, I/O time,…….., last CPU burst}
P1 {5, 27, 3, 31, 5, 43, 4, 18, 6, 22, 4, 26, 3, 24, 4}
P2 {4, 48, 5, 44, 7, 42, 12, 37, 9, 76, 4, 41, 9, 31, 7, 43, 8}
P3 {8, 33, 12, 41, 18, 65, 14, 21, 4, 61, 15, 18, 14, 26, 5, 31, 6}
P4 {3, 35, 4, 41, 5, 45, 3, 51, 4, 61, 5, 54, 6, 82, 5, 77, 3}
P5 {16, 24, 17, 21, 5, 36, 16, 26, 7, 31, 13, 28, 11, 21, 6, 13, 3, 11, 4}
P6 {11, 22, 4, 8, 5, 10, 6, 12, 7, 14, 9, 18, 12, 24, 15, 30, 8}
P7 {14, 46, 17, 41, 11, 42, 15, 21, 4, 32, 7, 19, 16, 33, 10}
P8 {4, 14, 5, 33, 6, 51, 14, 73, 16, 87, 6}
| 
 FCFS CPU utilization:  | 
||||
| 
 Tw  | 
 Ttr  | 
 Tr  | 
||
| 
 P1  | 
||||
| 
 P2  | 
||||
| 
 P3  | 
||||
| 
 P4  | 
||||
| 
 P5  | 
||||
| 
 P6  | 
||||
| 
 P7  | 
||||
| 
 P8  | 
||||
| 
 Avg  | 
||||
| 
 FCFS  | 
|
| 
 CPU utilization  | 
|
| 
 Avg Waiting time (Tw)  | 
|
| 
 Avg Turnaround time (Ttr)  | 
|
| 
 Avg Response time (Tr)  | 
Solution :
program for implementation of FCFS scheduling
def findWaitingTime(processes, n,
          
        bt, wt):
   # waiting time for
   # first process is 0
   wt[0] = 0
   # calculating waiting time
   for i in range(1, n ):
       wt[i] = bt[i - 1] + wt[i - 1]
# Function to calculate turn
# around time
def findTurnAroundTime(processes, n,
          
        bt, wt, tat):
   # calculating turnaround
   # time by adding bt[i] + wt[i]
   for i in range(n):
       tat[i] = bt[i] + wt[i]
# Function to calculate
# average time
def findavgTime( processes, n, bt):
   wt = [0] * n
   tat = [0] * n
   total_wt = 0
   total_tat = 0
   # Function to find waiting
   # time of all processes
   findWaitingTime(processes, n, bt, wt)
   # Function to find turn around
   # time for all processes
   findTurnAroundTime(processes, n,
          
        bt, wt, tat)
   # Display processes along
   # with all details
   print( "Processes Burst time " +
          
    " Waiting time " +
          
    " Turn around time")
   # Calculate total waiting time
   # and total turn around time
   for i in range(n):
  
       total_wt = total_wt + wt[i]
       total_tat = total_tat +
tat[i]
       print(" " + str(i + 1) + "\t\t"
+
          
        str(bt[i]) + "\t " +
          
        str(wt[i]) + "\t\t " +
          
        str(tat[i]))
   print( "Average waiting time = "+
          
    str(total_wt / n))
   print("Average turn around time = "+
          
        str(total_tat / n))
# Driver code
if __name__ =="__main__":
  
   processes = [ 1, 2, 3]
   n = len(processes)
   # Burst time of all processes
   burst_time = [10, 5, 8]
   findavgTime(processes, n, burst_time)