Os Lab Assignment-3 Mayank Kalsan 2018UCP1489 Fcfs Scheduling
Os Lab Assignment-3 Mayank Kalsan 2018UCP1489 Fcfs Scheduling
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
# 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
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(" |")
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(" |")
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
# 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(" |")
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
# 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
# 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(" |")
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
# 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
# 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(" |")
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)