操作系统实验(进程调度模拟程序)基于Python完整源码

                操作系统实验

 

 

----------------------------------------------------------------该代码亲试有效,欢迎各位dalao对代码不足处,提出建议,留言评论。

----------------------------------------------------------------本人所用编译器python3.5

----------------------------------------------------------------本人QQ:2149810847

 

  • 实验要求

1.用可视化编程工具编制程序,在机器上调试运行,并通过上机考核。

2.要求将功能集中在一个界面中,界面设计美观,功能完整,使用方便。

 

  • 设计题目

题目1  进程调度模拟程序

目的:

熟悉进程调度算法及其实现 

内容:

编写一个程序完成多道程序的调度

要求:

只考虑1CPU的资源,其他资源不考虑

使用响应比高者优先算法

程序采用键盘输入,输入格式为:

   

 K

    TJ1    YS1

    ……

 

    TJK    YSK

 

其中K是作业数(>0),TJi提交时间,YSi i=1~K)是作业预计的运行时间(以分钟计)TJ的输入格式是XXYY,其中XX是时,YY是分,如1028分,输入为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

 

你可能感兴趣的:(Python)