0% found this document useful (0 votes)
66 views15 pages

Os Lab Assignment-3 Mayank Kalsan 2018UCP1489 Fcfs Scheduling

The document contains Python code for implementing different scheduling algorithms - FCFS, SJF, priority (non-preemptive), and priority (preemptive). It defines functions for each algorithm that take process data as input and output performance metrics like turnaround time, waiting time, and response time. The code reads process details from a file, runs the scheduling algorithms, and prints CPU/IO schedules and performance results.

Uploaded by

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

Os Lab Assignment-3 Mayank Kalsan 2018UCP1489 Fcfs Scheduling

The document contains Python code for implementing different scheduling algorithms - FCFS, SJF, priority (non-preemptive), and priority (preemptive). It defines functions for each algorithm that take process data as input and output performance metrics like turnaround time, waiting time, and response time. The code reads process details from a file, runs the scheduling algorithms, and prints CPU/IO schedules and performance results.

Uploaded by

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

OS LAB ASSIGNMENT-3

MAYANK KALSAN
2018UCP1489

 FCFS SCHEDULING
def fcfs(n, p, time):
ready = []
ior = []
a = []
b = []
count = 0
curr = 0
while count != n:
for i in range(len(p)):
if p[i][1] <= curr and p[i][-1] != -1 and p[i][-2] != len(p[i])
- 2 and p[i][-2] != len(p[i]) - 3:
ready.append(i)
p[i][-1] = -1

# if ready queue is empty


if len(ready) == 0:
a.append(-1)
curr+=1
if len(b) == len(a) - 1:
b.append(-1)
continue

# CPU burst
index = ready.pop(0)
p[index][1]=curr
for i in range(p[index][p[index][-2]]):
a.append(p[index][0])
curr += 1
if len(b) == len(a) - 1:
b.append(-1)
p[index][1] += 1

# io burst
ior.append(index)
p[index][1] += p[index][p[index][-2] + 1]
index = ior.pop(0)
for i in range(p[index][p[index][-2] + 1]):
b.append(p[index][0])
if p[index][1]<len(b):
p[index][1]+=1
p[index][-1] = 0
p[index][-2] += 2

# check if completed or not


if p[index][-2] == len(p[index]) - 1 or p[index][-2] ==
len(p[index]) - 2 or (p[index][-2]==len(p[index])-3 and p[index][p[index][-
2]]==-1):
time[index][1] = p[index][1] + 1 - time[index][0]
count += 1

for i in range(len(p)):
time[i][2] = a.index(p[i][0])-time[i][0]
time[i][-1] = time[i][1] - time[i][-1]

# cpu chart
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t CPU CHART")
for i in range(len(a)):
print(" |",a[i],end=" ")
# io chart
print(" |")
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t I/O CHART")
for i in range(len(a)):
print(" |",b[i],end=" ")
print(" |")

print("\n Process-id\t\tArrival time\t\tTurnaround time\t\tResponse


Time\t\tWaiting Time")
ttat = trt = twt = 0
for i in range(len(p)):
print(" ",p[i][0],"\t\t\t\t",time[i][0],"\t\t\t\t\t",time[i][1],"
\t\t\t\t",time[i][2],"\t\t\t\t\t",time[i][3])
ttat+=time[i][1]
trt+=time[i][2]
twt+=time[i][3]

print("\n Total Turnaround Time = ",ttat)


print(" Total Response Time = ",trt)
print(" Total Waiting Time = ",twt)

print("\n Average Turnaround Time = ",ttat/n)


print(" Average Response Time = ",trt/n)
print(" Average Waiting Time = ",twt/n)

file = open('process.dat', 'r')


p = []
time_status = []
for i in file:
p.append(i.split())
time_status.append([0,0,0,0])

for i in p:
print(*i)

n = int(p[0][0])
p.pop(0)
time_status.pop(0)

for i in range(len(p)):
j = 4
while j < len(p[i]):
if p[i][j] == 'C' or p[i][j] == 'I/O':
p[i].pop(j)
j -= 1
j += 1
for i in range(len(p)):
p[i] = list(map(int, p[i]))
time_status[i][0] = p[i][1]
p[i].append(4)
p[i].append(0)
time_status[i][-1] = sum(p[i][4:]) - sum(p[i][-3:])
print(time_status)
fcfs(n, p, time_status)
 SJF SCHEDULING
def sjf(n, p, time):
ior = []
a = []
b = []
count = 0
curr = 0
index = -1
while count != n:
mini = 10**5
for i in range(len(p)):
if p[i][1] <= curr and p[i][-1] != -1 and p[i][-2] != len(p[i])
- 2 and p[i][-2] != len(p[i]) - 3:
if p[i][p[i][-2]]<mini:
index = i
mini = p[i][p[i][-2]]
elif p[i][p[i][-2]]==mini:
if p[index][1] > p[i][1]:
index = i
p[index][1]=curr
if index == -1:
curr+=1
a.append(-1)
if len(b) == len(a) - 1:
b.append(-1)
continue
# p[index][-1] = -1
for i in range(p[index][p[index][-2]]):
a.append(p[index][0])
curr += 1
if len(b) == len(a) - 1:
b.append(-1)
p[index][1] += 1
ior.append(index)
p[index][1] += p[index][p[index][-2] + 1]
index = ior.pop(0)
for i in range(p[index][p[index][-2] + 1]):
b.append(p[index][0])
if p[index][1]<len(b):
p[index][1]+=1

p[index][-1] = 0
p[index][-2] += 2
if p[index][-2] == len(p[index]) - 1 or p[index][-2] ==
len(p[index]) - 2 or (p[index][-2] == len(p[index])-3 and p[index][p[index]
[-2]] == -1):
time[index][1] = p[index][1] + 1 - time[index][0]
count += 1
index=-1

for i in range(len(p)):
time[i][2] = a.index(p[i][0])-time[i][0]
time[i][-1] = time[i][1] - time[i][-1]

# cpu chart
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t CPU CHART")
for i in range(len(a)):
print(" |",a[i],end=" ")
# io chart
print(" |")
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t I/O CHART")
for i in range(len(a)):
print(" |",b[i],end=" ")
print(" |")

print("\n Process-id\t\tArrival time\t\tTurnaround time\t\tResponse


Time\t\tWaiting Time")
ttat = trt = twt = 0
for i in range(len(p)):
print(" ",p[i][0],"\t\t\t\t",time[i][0],"\t\t\t\t\t",time[i][1],"
\t\t\t\t",time[i][2],"\t\t\t\t\t",time[i][3])
ttat+=time[i][1]
trt+=time[i][2]
twt+=time[i][3]

print("\n Total Turnaround Time = ",ttat)


print(" Total Response Time = ",trt)
print(" Total Waiting Time = ",twt)

print("\n Average Turnaround Time = ",ttat/n)


print(" Average Response Time = ",trt/n)
print(" Average Waiting Time = ",twt/n)

file = open('process.dat', 'r')


p = []
time_status = []
for i in file:
p.append(i.split())
time_status.append([0,0,0,0])

for i in p:
print(*i)

n = int(p[0][0])
p.pop(0)
time_status.pop(0)

for i in range(len(p)):
j = 4
while j < len(p[i]):
if p[i][j] == 'C' or p[i][j] == 'I/O':
p[i].pop(j)
j -= 1
j += 1
for i in range(len(p)):
p[i] = list(map(int, p[i]))
time_status[i][0] = p[i][1]
p[i].append(4)
p[i].append(0)
time_status[i][-1] = sum(p[i][4:]) - sum(p[i][-3:])

sjf(n, p, time_status)
 PRIORITY(NON-PREEMPTIVE)
def priority(n, p, time):
ior = []
a = []
b = []
count = 0
curr = 0
index = -1
while count != n:
# Select minimum priority process
mini = n+1
for i in range(len(p)):
if p[i][1] <= curr and p[i][-1] != -1 and p[i][-2] != len(p[i])
- 2 and p[i][-2] != len(p[i]) - 3:
if p[i][2]<mini:
index = i
mini = p[i][2]
elif p[i][2]==mini:
if p[index][1] > p[i][1]:
index = i
# if process is not selected
if index == -1:
curr+=1
a.append(-1)
if len(b) == len(a) - 1:
b.append(-1)
continue

# CPU burst
p[index][1] = curr
p[index][-1] = -1
for i in range(p[index][p[index][-2]]):
a.append(p[index][0])
curr += 1
if len(b) == len(a) - 1:
b.append(-1)
p[index][1] += 1

# input output burst


ior.append(index)
p[index][1] += p[index][p[index][-2] + 1]
index = ior.pop(0)
for i in range(p[index][p[index][-2] + 1]):
b.append(p[index][0])
if p[index][1]<len(b):
p[index][1]+=1
p[index][-1] = 0
p[index][-2] += 2

# check if completed
if p[index][-2] == len(p[index]) - 1 or p[index][-2] ==
len(p[index]) - 2 or (p[index][-2]==len(p[index])-3 and p[index][p[index][-
2]]==-1):
time[index][1] = p[index][1] + 1 - time[index][0]
count += 1
index=-1

for i in range(len(p)):
time[i][2] = a.index(p[i][0])-time[i][0]
time[i][-1] = time[i][1] - time[i][-1]

# cpu chart
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t CPU CHART")
for i in range(len(a)):
print(" |",a[i],end=" ")
# io chart
print(" |")
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t I/O CHART")
for i in range(len(a)):
print(" |",b[i],end=" ")
print(" |")

print("\n Process-id\t\tArrival time\t\tTurnaround time\t\tResponse


Time\t\tWaiting Time")
ttat = trt = twt = 0
for i in range(len(p)):
print(" ",p[i][0],"\t\t\t\t",time[i][0],"\t\t\t\t\t",time[i][1],"
\t\t\t\t",time[i][2],"\t\t\t\t\t",time[i][3])
ttat+=time[i][1]
trt+=time[i][2]
twt+=time[i][3]

print("\n Total Turnaround Time = ",ttat)


print(" Total Response Time = ",trt)
print(" Total Waiting Time = ",twt)

print("\n Average Turnaround Time = ",ttat/n)


print(" Average Response Time = ",trt/n)
print(" Average Waiting Time = ",twt/n)

file = open('process.dat', 'r')


p = []
time_status = []
for i in file:
p.append(i.split())
time_status.append([0,0,0,0])

for i in p:
print(*i)

n = int(p[0][0])
p.pop(0)
time_status.pop(0)

for i in range(len(p)):
j = 4
while j < len(p[i]):
if p[i][j] == 'C' or p[i][j] == 'I/O':
p[i].pop(j)
j -= 1
j += 1
for i in range(len(p)):
p[i] = list(map(int, p[i]))
time_status[i][0] = p[i][1]
p[i].append(4)
p[i].append(0)
time_status[i][-1] = sum(p[i][4:]) - sum(p[i][-3:])

priority(n, p, time_status)
 PRIORITY(PREEMPTIVE)
def pre_priority(n, p, time):
ior = []
a = []
b = []
count = 0
curr = 0
index = -1
while count != n:
# Select minimum priority process
mini = n + 1
for i in range(len(p)):
if p[i][1] <= curr and p[i][-1] != -1 and p[i][-2] != len(p[i])
- 2 and p[i][-2] != len(p[i]) - 3:
if p[i][2] < mini:
index = i
mini = p[i][2]
elif p[i][2] == mini:
if p[index][1] > p[i][1]:
index = i

# if process is not selected


if index == -1:
curr += 1
a.append(-1)
if len(b) == len(a) - 1:
b.append(-1)
continue

# CPU burst
p[index][1] = curr
a.append(p[index][0])
p[index][p[index][-2]] -= 1
curr += 1
if len(b) == len(a) - 1:
b.append(-1)
p[index][1] += 1

# input output burst


if p[index][p[index][-2]] == 0:
p[index][-1] = -1
ior.append(index)
p[index][1] += p[index][p[index][-2] + 1]
index = ior.pop(0)
for i in range(p[index][p[index][-2] + 1]):
b.append(p[index][0])
if p[index][1] < len(b):
p[index][1] += 1
p[index][-1] = 0
p[index][-2] += 2

# check if completed
if p[index][-2] == len(p[index]) - 1 or p[index][-2] ==
len(p[index]) - 2 or (p[index][-2]==len(p[index])-3 and p[index][p[index][-
2]]==-1):
time[index][1] = p[index][1] + 1 - time[index][0]
count += 1
index = -1

for i in range(len(p)):
time[i][2] = a.index(p[i][0])-time[i][0]
time[i][-1] = time[i][1] - time[i][-1]

# cpu chart
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t CPU CHART")
for i in range(len(a)):
print(" |",a[i],end=" ")
# io chart
print(" |")
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t I/O CHART")
for i in range(len(a)):
print(" |",b[i],end=" ")
print(" |")

print("\n Process-id\t\tArrival time\t\tTurnaround time\t\tResponse


Time\t\tWaiting Time")
ttat = trt = twt = 0
for i in range(len(p)):
print(" ",p[i][0],"\t\t\t\t",time[i][0],"\t\t\t\t\t",time[i][1],"
\t\t\t\t",time[i][2],"\t\t\t\t\t",time[i][3])
ttat+=time[i][1]
trt+=time[i][2]
twt+=time[i][3]

print("\n Total Turnaround Time = ",ttat)


print(" Total Response Time = ",trt)
print(" Total Waiting Time = ",twt)

print("\n Average Turnaround Time = ",ttat/n)


print(" Average Response Time = ",trt/n)
print(" Average Waiting Time = ",twt/n)

file = open('process.dat', 'r')


p = []
time_status = []
for i in file:
p.append(i.split())
time_status.append([0,0,0,0])

for i in p:
print(*i)

n = int(p[0][0])
p.pop(0)
time_status.pop(0)

for i in range(len(p)):
j = 4
while j < len(p[i]):
if p[i][j] == 'C' or p[i][j] == 'I/O':
p[i].pop(j)
j -= 1
j += 1
for i in range(len(p)):
p[i] = list(map(int, p[i]))
time_status[i][0] = p[i][1]
p[i].append(4)
p[i].append(0)
time_status[i][-1] = sum(p[i][4:]) - sum(p[i][-3:])

pre_priority(n, p, time_status)
 ROUND ROBIN
def round_robin(n, p, time):
ready = []
ior = []
a = []
b = []
count = 0
curr = 0
prev = -1
while count != n:

for i in range(len(p)):
if p[i][1] <= curr and p[i][-1] != -1 and p[i][-2] != len(p[i])
- 2 and p[i][-2] != len(p[i]) - 3:
ready.append(i)
p[i][-1] = -1

if prev != -1 and p[prev][1]<=curr:


ready.append(prev)

# if process ready queue is empty


if len(ready)==0:
curr += 1
a.append(-1)
if len(b) == len(a) - 1:
b.append(-1)
continue

# CPU burst
index = ready.pop(0)
a.append(p[index][0])
p[index][p[index][-2]] -= 1
curr += 1
if len(b) == len(a) - 1:
b.append(-1)
p[index][1] = curr

# input output burst


if p[index][p[index][-2]] == 0:
ior.append(index)
p[index][1] += p[index][p[index][-2] + 1]
index = ior.pop(0)
p[index][1] = len(b)
for i in range(p[index][p[index][-2] + 1]):
b.append(p[index][0])
p[index][1] += 1
p[index][-1] = 0
p[index][-2] += 2

# check if completed
if p[index][-2] == len(p[index]) - 1 or p[index][-2] ==
len(p[index]) - 2 or (p[index][-2]==len(p[index])-3 and p[index][p[index][-
2]]==-1):
prev = -1
time[index][1] = p[index][1] - time[index][0]
count += 1
else:
prev = index

for i in range(len(p)):
time[i][2] = a.index(p[i][0])-time[i][0]
time[i][-1] = time[i][1] - time[i][-1]

# cpu chart
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t CPU CHART")
for i in range(len(a)):
print(" |",a[i],end=" ")
# io chart
print(" |")
print("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t I/O CHART")
for i in range(len(a)):
print(" |",b[i],end=" ")
print(" |")

print("\n Process-id\t\tArrival time\t\tTurnaround time\t\tResponse


Time\t\tWaiting Time")
ttat = trt = twt = 0
for i in range(len(p)):
print(" ",p[i][0],"\t\t\t\t",time[i][0],"\t\t\t\t\t",time[i][1],"
\t\t\t\t",time[i][2],"\t\t\t\t\t",time[i][3])
ttat+=time[i][1]
trt+=time[i][2]
twt+=time[i][3]

print("\n Total Turnaround Time = ",ttat)


print(" Total Response Time = ",trt)
print(" Total Waiting Time = ",twt)

print("\n Average Turnaround Time = ",ttat/n)


print(" Average Response Time = ",trt/n)
print(" Average Waiting Time = ",twt/n)

file = open('process.dat', 'r')


p = []
time_status = []
for i in file:
p.append(i.split())
time_status.append([0,0,0,0])

for i in p:
print(*i)

n = int(p[0][0])
p.pop(0)
time_status.pop(0)

for i in range(len(p)):
j = 4
while j < len(p[i]):
if p[i][j] == 'C' or p[i][j] == 'I/O':
p[i].pop(j)
j -= 1
j += 1
for i in range(len(p)):
p[i] = list(map(int, p[i]))
time_status[i][0] = p[i][1]
p[i].append(4)
p[i].append(0)
time_status[i][-1] = sum(p[i][4:]) - sum(p[i][-3:])

round_robin(n, p, time_status)

You might also like