先来先服务实现简单但是平均周转时间过长
短作业优先算法缩短了平均周转时间
#!/usr/bin/python #-*- coding: utf-8 -*- # # table # 0:进程号 1:到达时间 2:所需时间 # # pTable 先来先服务 # 0:进程号 1:开始运行时间 2:运行时间 3:周转时间 4:带权周转时间 # # qTable 短作业优先 # 0:进程号 1:开始运行时间 2:运行时间 3:周转时间 4:带权周转时间 # class Work4Ligon(object): table = [] pTable = [] qTable = [] def __init__(self): pass #输入数据 def dataIn(self): num = raw_input("请输入进程数:") num = num.strip() num = int(num) i = 1 while(i <= num): print "请输入进程 ",i,"的到达时间" a = float(raw_input()) print "请输入进程 ",i,"的运行时间" b = float(raw_input()) self.table.append([i,a,b]) i += 1 #计算先来先服务 def pTableFill(self): table = self.table time = 0 for i in xrange(len(table)): num = table[i][0] if (time > table[i][1]): startTime = time else: startTime = table[i][1] time += table[i][2] runTime = table[i][2] zj = startTime + runTime - table[i][1] dzj = zj / table[i][2] self.pTable.append([num, startTime, runTime, zj, dzj]) #计算短作业优先 def qTableFill(self): #复制一份作业列表 table = list(self.table) time = 0 for i in xrange(len(table)): minIndex = -1 minTime = 0 for j in xrange(len(table)): if (table[j][1] <= time): if (minIndex == -1): minIndex = j minTime = table[j][2] else: if (table[j][2] < minTime): minIndex = j minTime = table[j][2] num = table[minIndex][0] if (time > table[minIndex][1]): startTime = time else: startTime = table[minIndex][1] time += table[minIndex][2] runTime = table[minIndex][2] zj = startTime + runTime - table[minIndex][1] dzj = zj / table[minIndex][2] self.qTable.append([num, startTime, runTime, zj, dzj]) table.remove(table[minIndex]) #按到达时间排序 def sort(self): table = list(self.table) self.table = [] for i in xrange(len(table)): minIndex = -1 minTime = 0 for j in xrange(len(table)): if (minIndex == -1): minIndex = j minTime = table[j][1] else: if (table[j][1] < minTime): minIndex = j minTime = table[j][1] self.table.append(table[minIndex]) table.remove(table[minIndex]) def display(self): p = self.pTable q = self.qTable avg1 = 0 avg2 = 0 print '先来先服务:' print '线程号 开始执行时间 执行时间 周转时间 带权周转时间' for i in xrange(len(p)): print p[i][0],' ',p[i][1],' ',p[i][2],' ',p[i][3],' ',p[i][4] avg1 += p[i][3] avg2 += p[i][4] print '平均周转时间:',avg1 / len(p),' 平均带权周转时间', avg2 / len(p) avg1 = 0 avg2 = 0 print '短作业优先:' print '线程号 开始执行时间 执行时间 周转时间 带权周转时间' for i in xrange(len(p)): print q[i][0],' ',q[i][1],' ',q[i][2],' ',q[i][3],' ',q[i][4] avg1 += q[i][3] avg2 += q[i][4] print '平均周转时间:',avg1 / len(p),' 平均带权周转时间', avg2 / len(q) #开始运行 def run(self): self.dataIn() self.sort() self.qTableFill() self.pTableFill() self.display() if __name__ == '__main__': w = Work4Ligon() w.run()