操作系统——进程调度算法 python实现
时间: 2023-07-30 20:11:49 浏览: 113
好的,进程调度算法是操作系统中非常重要的一部分。常见的进程调度算法有先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN)、时间片轮转(RR)等。下面是这些算法的 Python 实现:
1. 先来先服务(FCFS):
```python
def FCFS(processes):
waiting_time = 0
turn_around_time = 0
completion_time = 0
for process in processes:
completion_time += process['burst_time']
turn_around_time += completion_time - process['arrival_time']
waiting_time += turn_around_time - process['burst_time']
return waiting_time / len(processes), turn_around_time / len(processes)
```
2. 短作业优先(SJF):
```python
def SJF(processes):
processes = sorted(processes, key=lambda x: x['burst_time'])
waiting_time = 0
turn_around_time = 0
completion_time = 0
for process in processes:
completion_time += process['burst_time']
turn_around_time += completion_time - process['arrival_time']
waiting_time += turn_around_time - process['burst_time']
return waiting_time / len(processes), turn_around_time / len(processes)
```
3. 高响应比优先(HRRN):
```python
def HRRN(processes):
waiting_time = 0
turn_around_time = 0
completion_time = 0
for i, process in enumerate(processes):
if i == 0:
completion_time = process['burst_time']
else:
response_ratio_list = []
for j in range(i):
response_ratio = (completion_time - processes[j]['arrival_time'] + processes[j]['burst_time']) / processes[j]['burst_time']
response_ratio_list.append(response_ratio)
max_response_ratio_index = response_ratio_list.index(max(response_ratio_list))
selected_process = processes.pop(max_response_ratio_index)
completion_time += selected_process['burst_time']
turn_around_time += completion_time - selected_process['arrival_time']
waiting_time += turn_around_time - selected_process['burst_time']
return waiting_time / len(processes), turn_around_time / len(processes)
```
4. 时间片轮转(RR):
```python
def RR(processes, time_slice):
waiting_time = 0
turn_around_time = 0
completion_time = 0
while processes:
for i in range(len(processes)):
if processes[i]['burst_time'] > time_slice:
completion_time += time_slice
processes[i]['burst_time'] -= time_slice
else:
completion_time += processes[i]['burst_time']
turn_around_time += completion_time - processes[i]['arrival_time']
waiting_time += turn_around_time - processes[i]['burst_time']
processes.pop(i)
break
return waiting_time / len(processes), turn_around_time / len(processes)
```
这里的 `processes` 是一个列表,其中每个元素是一个字典,表示一个进程的信息,如下所示:
```python
processes = [
{'name': 'P1', 'arrival_time': 0, 'burst_time': 8},
{'name': 'P2', 'arrival_time': 1, 'burst_time': 4},
{'name': 'P3', 'arrival_time': 2, 'burst_time': 9},
...
]
```
在这个列表中,每个进程有一个名称、到达时间和执行时间。你可以根据自己的需要修改这些信息,来测试这些进程调度算法的实现。