先来先服务(FCFS)与最短作业优先(SJF)同时实现的代码
时间: 2023-10-25 18:06:30 浏览: 49
以下是先来先服务(FCFS)和最短作业优先(SJF)同时实现的代码:
```python
class Process:
def __init__(self, pid, arrival_time, burst_time):
self.pid = pid
self.arrival_time = arrival_time
self.burst_time = burst_time
def __lt__(self, other):
return self.burst_time < other.burst_time
def fcfs_sjf(processes):
n = len(processes)
burst_times = [process.burst_time for process in processes]
waiting_times = [0] * n
turnaround_times = [0] * n
# Sort the processes by their arrival time
processes.sort(key=lambda x: x.arrival_time)
current_time = 0
queue = []
i = 0
while i < n or queue:
if not queue:
current_time = processes[i].arrival_time
while i < n and processes[i].arrival_time <= current_time:
queue.append(processes[i])
i += 1
queue.sort()
process = queue.pop(0)
waiting_times[process.pid] = current_time - process.arrival_time
turnaround_times[process.pid] = waiting_times[process.pid] + process.burst_time
current_time += process.burst_time
avg_waiting_time = sum(waiting_times) / n
avg_turnaround_time = sum(turnaround_times) / n
print("FCFS-SJF Scheduling:")
print("Avg Waiting Time: ", round(avg_waiting_time, 2))
print("Avg Turnaround Time: ", round(avg_turnaround_time, 2))
# Example usage
processes = [Process(0, 0, 6), Process(1, 2, 4), Process(2, 4, 2), Process(3, 5, 1)]
fcfs_sjf(processes)
```
该代码中,Process 类表示一个进程,包含进程 ID,到达时间和运行时间。我们还实现了一个 FCFS-SJF 调度算法函数 fcfs_sjf,它同时考虑了先来先服务和最短作业优先两个因素。在该函数中,我们首先按到达时间对进程进行排序,并将它们加入到队列中。然后,我们按照当前队列中剩余运行时间最短的进程运行,直到所有进程都完成。最后,我们计算出平均等待时间和平均周转时间。
请注意,在该代码中,我们使用 Python 内置的 sort 函数来对队列中的进程按照剩余运行时间进行排序。为了使 sort 函数能够正常工作,我们在 Process 类中实现了 __lt__ 方法,该方法定义了进程之间的小于比较运算符,用于排序。