- #!/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 '线程号\\t开始执行时间\\t执行时间\\t周转时间\\t带权周转时间'
- for i in xrange(len(p)):
- print p[i][0],'\\t',p[i][1],'\\t\\t',p[i][2],'\\t\\t',p[i][3],'\\t\\t',p[i][4]
- avg1 += p[i][3]
- avg2 += p[i][4]
- print '平均周转时间:',avg1 / len(p),'\\t平均带权周转时间', avg2 / len(p)
- avg1 = 0
- avg2 = 0
- print '短作业优先:'
- print '线程号\\t开始执行时间\\t执行时间\\t周转时间\\t带权周转时间'
- for i in xrange(len(p)):
- print q[i][0],'\\t',q[i][1],'\\t\\t',q[i][2],'\\t\\t',q[i][3],'\\t\\t',q[i][4]
- avg1 += q[i][3]
- avg2 += q[i][4]
- print '平均周转时间:',avg1 / len(p),'\\t平均带权周转时间', avg2 / len(q)
- #开始运行
- def run(self):
- self.dataIn()
- self.sort()
- self.qTableFill()
- self.pTableFill()
- self.display()
- if __name__ == '__main__':
- w = Work4Ligon()
- w.run()
- #该片段来自于http://www.codesnippet.cn/detail/090720149916.html
来源: http://www.codesnippet.cn/detail/090720149916.html