已知一批作业的作业名,提交时间,运行时间,要求使用FCFS算法,输出每个作业的开始执行时间,完成时间,周转时间,带权周转时间,这一批作业完成后,输出平均周转时间,平均带权周转时间。
时间: 2023-06-01 22:01:37 浏览: 143
假设有n个作业,它们的作业名、提交时间、运行时间分别为Ji、Si、Ti(i=1,2,3,...,n)。使用FCFS算法,按照提交时间先后顺序依次执行作业。
首先,计算每个作业的开始执行时间。对于第一个作业,它的开始执行时间就是提交时间Si;对于后续的作业,它的开始执行时间等于前一个作业的完成时间Ti-1。
其次,计算每个作业的完成时间。每个作业的完成时间等于它的开始执行时间加上运行时间Ti。
接着,计算每个作业的周转时间和带权周转时间。周转时间等于完成时间减去提交时间,带权周转时间等于周转时间除以运行时间Ti。
最后,计算平均周转时间和平均带权周转时间。对于n个作业,它们的平均周转时间等于所有作业的周转时间之和除以n,平均带权周转时间等于所有作业的带权周转时间之和除以n。
具体算法流程如下:
1. 输入作业数n和每个作业的作业名、提交时间、运行时间;
2. 按照提交时间从小到大的顺序排序所有作业;
3. 对于第一个作业,它的开始执行时间就是提交时间Si;
4. 对于后续的作业,它的开始执行时间等于前一个作业的完成时间Ti-1;
5. 每个作业的完成时间等于它的开始执行时间加上运行时间Ti;
6. 计算每个作业的周转时间和带权周转时间;
7. 计算平均周转时间和平均带权周转时间;
8. 输出每个作业的开始执行时间、完成时间、周转时间、带权周转时间以及平均周转时间和平均带权周转时间。
下面是一个Python实现的例子:
```python
n = int(input("请输入作业数:"))
jobs = []
for i in range(n):
j_name, s_time, r_time = input("请输入作业名、提交时间、运行时间,用空格分隔:").split()
jobs.append((j_name, int(s_time), int(r_time)))
# 按照提交时间排序
jobs.sort(key=lambda x: x[1])
# 计算每个作业的开始执行时间、完成时间、周转时间和带权周转时间
start_time = [0]*n
complete_time = [0]*n
turnaround_time = [0]*n
weighted_turnaround_time = [0]*n
for i in range(n):
if i == 0:
start_time[i] = jobs[i][1]
else:
start_time[i] = max(complete_time[i-1], jobs[i][1])
complete_time[i] = start_time[i] + jobs[i][2]
turnaround_time[i] = complete_time[i] - jobs[i][1]
weighted_turnaround_time[i] = turnaround_time[i]/jobs[i][2]
# 计算平均周转时间和平均带权周转时间
avg_turnaround_time = sum(turnaround_time)/n
avg_weighted_turnaround_time = sum(weighted_turnaround_time)/n
# 输出每个作业的信息
print("作业名\t提交时间\t运行时间\t开始执行时间\t完成时间\t周转时间\t带权周转时间")
for i in range(n):
print(jobs[i][0], "\t", jobs[i][1], "\t\t", jobs[i][2], "\t\t", start_time[i], "\t\t", complete_time[i], "\t\t", turnaround_time[i], "\t\t", weighted_turnaround_time[i])
print("平均周转时间:", avg_turnaround_time)
print("平均带权周转时间:", avg_weighted_turnaround_time)
```
输入样例:
```
请输入作业数:5
请输入作业名、提交时间、运行时间,用空格分隔:J1 0 9
请输入作业名、提交时间、运行时间,用空格分隔:J2 1 3
请输入作业名、提交时间、运行时间,用空格分隔:J3 2 5
请输入作业名、提交时间、运行时间,用空格分隔:J4 3 4
请输入作业名、提交时间、运行时间,用空格分隔:J5 4 2
```
输出样例:
```
作业名 提交时间 运行时间 开始执行时间 完成时间 周转时间 带权周转时间
J1 0 9 0 9 9 1.0
J2 1 3 9 12 11 3.6666666666666665
J3 2 5 12 17 15 3.0
J4 3 4 17 21 18 4.5
J5 4 2 21 23 19 9.5
平均周转时间: 14.4
平均带权周转时间: 4.333333333333333
```
阅读全文