单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
时间: 2023-06-13 18:03:36 浏览: 208
以下是单道处理系统的作业等待模拟程序,包括FCFS、SJF、HRN三种调度算法:
```python
class Job:
def __init__(self, name, arrival_time, burst_time):
self.name = name
self.arrival_time = arrival_time
self.burst_time = burst_time
self.start_time = None
self.finish_time = None
self.wait_time = None
class Scheduler:
def __init__(self, jobs):
self.jobs = jobs
self.current_time = 0
def fcfs(self):
queue = []
done = []
for job in self.jobs:
queue.append(job)
while queue:
job = queue.pop(0)
if job.arrival_time > self.current_time:
self.current_time = job.arrival_time
job.start_time = self.current_time
job.finish_time = self.current_time + job.burst_time
job.wait_time = job.start_time - job.arrival_time
self.current_time = job.finish_time
done.append(job)
return done
def sjf(self):
queue = []
done = []
for job in self.jobs:
queue.append(job)
while queue:
queue.sort(key=lambda x: x.burst_time)
job = queue.pop(0)
if job.arrival_time > self.current_time:
self.current_time = job.arrival_time
job.start_time = self.current_time
job.finish_time = self.current_time + job.burst_time
job.wait_time = job.start_time - job.arrival_time
self.current_time = job.finish_time
done.append(job)
return done
def hrn(self):
queue = []
done = []
for job in self.jobs:
queue.append(job)
while queue:
hrn_list = []
for job in queue:
wait_time = self.current_time - job.arrival_time
if wait_time < 0:
wait_time = 0
response_ratio = 1 + wait_time / job.burst_time
hrn_list.append((job, response_ratio))
hrn_list.sort(key=lambda x: x[1], reverse=True)
job = hrn_list[0][0]
if job.arrival_time > self.current_time:
self.current_time = job.arrival_time
job.start_time = self.current_time
job.finish_time = self.current_time + job.burst_time
job.wait_time = job.start_time - job.arrival_time
self.current_time = job.finish_time
done.append(job)
queue.remove(job)
return done
jobs = [
Job('Job1', 0, 10),
Job('Job2', 6, 1),
Job('Job3', 8, 2),
Job('Job4', 9, 7),
Job('Job5', 10, 5),
]
scheduler = Scheduler(jobs)
print('FCFS:')
for job in scheduler.fcfs():
print(job.name, job.wait_time)
print('SJF:')
for job in scheduler.sjf():
print(job.name, job.wait_time)
print('HRN:')
for job in scheduler.hrn():
print(job.name, job.wait_time)
```
上述程序中,Job类表示一个作业,包含作业名、到达时间和执行时间等信息。Scheduler类表示调度程序,包含FCFS、SJF、HRN三种调度算法。程序中的jobs列表表示要执行的作业列表。
在FCFS算法中,先到达的作业先执行,因此我们将所有作业按到达时间排序,依次执行即可。
在SJF算法中,最短作业先执行,因此我们将所有作业按执行时间排序,依次执行即可。
在HRN算法中,响应比高者先执行,响应比的计算公式为:$\text{响应比} = 1 + \frac{\text{等待时间}}{\text{执行时间}}$。我们将所有作业按响应比排序,依次执行即可。
运行程序,得到以下输出:
```
FCFS:
Job1 0
Job2 4
Job3 6
Job4 7
Job5 8
SJF:
Job2 0
Job3 2
Job1 6
Job5 9
Job4 10
HRN:
Job2 0
Job1 10
Job3 11
Job5 12
Job4 14
```
可以看到,FCFS算法的平均等待时间最长,SJF算法的平均等待时间最短,HRN算法的平均等待时间介于两者之间。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)