操作系统实验
----------------------------------------------------------------该代码亲试有效,欢迎各位dalao对代码不足处,提出建议,留言评论。
----------------------------------------------------------------本人所用编译器python3.5
----------------------------------------------------------------本人QQ:2149810847
1.用可视化编程工具编制程序,在机器上调试运行,并通过上机考核。
2.要求将功能集中在一个界面中,界面设计美观,功能完整,使用方便。
题目1 进程调度模拟程序
目的:
熟悉进程调度算法及其实现
内容:
编写一个程序完成多道程序的调度
要求:
只考虑1个CPU的资源,其他资源不考虑
使用响应比高者优先算法
程序采用键盘输入,输入格式为:
K
TJ1 YS1
……
TJK YSK
其中K是作业数(>0),TJi提交时间,YSi (i=1~K)是作业预计的运行时间(以分钟计)TJ的输入格式是XXYY,其中XX是时,YY是分,如10点28分,输入为1028。但内部计算要以60进制来算。要求输出按照作业调度的先后次序输出结果,每行为一个作业状态,从左到右分别是调度次序,作业号,调度时间,周转时间和带权周转时间,最后一行输出两个数,第一为平均周转时间,第二为平均带权周转时间。
from numpy import *
def priority(at, rt, t):
return 1+ (t - at) / rt
def wait_time(at, t):
return t - at
#read file
i = 0.0
file = open('Data.txt')
dataMat = [] # 是否被调度initial为1(未被调度), 优先级initial为0, 到达时间 ,运行时间, 作业号 ,等待时间initial为0
order = [] # 作业号
for line in file.readlines():
i = i + 1
curLine = line.strip().split("\t")
floatLine = list(map(float, curLine))
floatLine.append(i)
floatLine.insert(0,0.0)
floatLine.insert(0, 1.0)
floatLine.append(0.0)
dataMat.append(floatLine[0:6])
#time change
for i in range(len(dataMat)):
dataMat[i][2] = dataMat[i][2] % 100 + (dataMat[i][2] // 100) * 60
#sort
dataMat.sort(reverse=True) #降序排列
#initial current_time, wait_time,Y/N run,
average_time = 0
average_priority_time = 0
initial_time = dataMat[i][2] #初始时间
dataMat[i][0] = 0 #第一个作业被调度
dataMat[i][1] = 1.0
order.append(dataMat[i][4])
current_time = initial_time + dataMat[i][3] #作业结束后时间
#main method
for i in range(len(dataMat) - 1): #k times, k = work number
for j in range(len(dataMat)):
if dataMat[j][0] == 1 :
dataMat[j][5] = wait_time(dataMat[j][2], current_time)
dataMat[j][1] = priority(dataMat[j][2], dataMat[j][3], current_time)
dataMat.sort(reverse=True)
dataMat[0][0] = 0
order.append(dataMat[0][4])
current_time = current_time + dataMat[0][3]
for i in range(len(dataMat)):
average_time = average_time + (dataMat[i][3] +dataMat[i][5])
average_priority_time = average_priority_time +dataMat[i][1]
#output
for i in range(len(dataMat)):
for j in range(len(dataMat)):
if order[i] == dataMat[j][4]:
print(i+1, int(order[i]), dataMat[j][3], dataMat[j][3] + dataMat[j][5], dataMat[j][1])
print(average_time/len(dataMat), average_priority_time/len(dataMat))
Data.txt
1028 6
1029 6
1029 8
1034 12
1032 7
1033 5
output
1 1 6.0 6.0 1.0
2 2 6.0 11.0 1.8333333333333335
3 6 5.0 12.0 2.4
4 3 8.0 24.0 3.0
5 5 7.0 28.0 4.0
6 4 12.0 38.0 3.1666666666666665
19.833333333333332 2.56666