单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
时间: 2023-06-13 18:03:34 浏览: 138
好的,我可以帮您实现这个程序。首先,我们需要定义作业的数据结构,包括作业的名称、到达时间、服务时间、开始时间、完成时间、周转时间和带权周转时间等信息。
```python
class Job:
def __init__(self, name, arrival_time, service_time):
self.name = name
self.arrival_time = arrival_time
self.service_time = service_time
self.start_time = 0
self.finish_time = 0
self.turnaround_time = 0
self.weighted_turnaround_time = 0
```
接下来,我们需要按照不同的调度算法对作业进行排序。对于先来先服务算法,我们只需要按照到达时间升序排列即可;对于最短作业优先算法,我们需要按照服务时间升序排列;对于响应比高者优先算法,我们需要按照响应比降序排列。响应比 HRN 的计算公式为:
$$
\text{HRN} = \frac{\text{等待时间} + \text{服务时间}}{\text{服务时间}}
$$
```python
def sort_jobs(jobs, algorithm):
if algorithm == 'FCFS':
jobs.sort(key=lambda x: x.arrival_time)
elif algorithm == 'SJF':
jobs.sort(key=lambda x: x.service_time)
elif algorithm == 'HRN':
for job in jobs:
job.waiting_time = 0
job.hrn = (job.waiting_time + job.service_time) / job.service_time
jobs.sort(key=lambda x: x.hrn, reverse=True)
```
接下来,我们模拟作业的执行过程。对于每个作业,我们需要计算它的开始时间、完成时间、周转时间和带权周转时间,并统计所有作业的平均周转时间和平均带权周转时间。
```python
def run_jobs(jobs):
total_turnaround_time = 0
total_weighted_turnaround_time = 0
current_time = 0
for job in jobs:
if current_time < job.arrival_time:
current_time = job.arrival_time
job.start_time = current_time
job.finish_time = current_time + job.service_time
job.turnaround_time = job.finish_time - job.arrival_time
job.weighted_turnaround_time = job.turnaround_time / job.service_time
total_turnaround_time += job.turnaround_time
total_weighted_turnaround_time += job.weighted_turnaround_time
current_time = job.finish_time
avg_turnaround_time = total_turnaround_time / len(jobs)
avg_weighted_turnaround_time = total_weighted_turnaround_time / len(jobs)
return avg_turnaround_time, avg_weighted_turnaround_time
```
最后,我们可以编写一个主函数来读入作业信息、选择调度算法并输出结果。
```python
def main():
jobs = []
while True:
name = input('请输入作业名称(输入 q 结束):')
if name == 'q':
break
arrival_time = int(input('请输入到达时间:'))
service_time = int(input('请输入服务时间:'))
jobs.append(Job(name, arrival_time, service_time))
algorithm = input('请选择调度算法(FCFS, SJF, HRN):')
sort_jobs(jobs, algorithm)
avg_turnaround_time, avg_weighted_turnaround_time = run_jobs(jobs)
print('平均周转时间:', avg_turnaround_time)
print('平均带权周转时间:', avg_weighted_turnaround_time)
```
这样,一个简单的作业等待模拟程序就完成了。您可以根据需要进行进一步的修改和扩展。
阅读全文