面试题答案
一键面试以下是使用Python实现简单时间片轮转调度算法的代码:
from collections import deque
class Process:
def __init__(self, pid, arrival_time, burst_time):
self.pid = pid
self.arrival_time = arrival_time
self.burst_time = burst_time
self.remaining_time = burst_time
self.completion_time = None
def round_robin(processes, time_quantum=10):
ready_queue = deque()
current_time = 0
completed_processes = []
index = 0
while processes or ready_queue:
while index < len(processes) and processes[index].arrival_time <= current_time:
ready_queue.append(processes[index])
index += 1
if ready_queue:
current_process = ready_queue.popleft()
if current_process.remaining_time <= time_quantum:
current_time += current_process.remaining_time
current_process.remaining_time = 0
current_process.completion_time = current_time
completed_processes.append(current_process)
else:
current_time += time_quantum
current_process.remaining_time -= time_quantum
ready_queue.append(current_process)
else:
current_time = processes[index].arrival_time
return completed_processes
# 示例进程数据
processes_data = [
Process(1, 0, 24),
Process(2, 0, 3),
Process(3, 0, 3)
]
completed_processes = round_robin(processes_data)
print("执行顺序和完成时间:")
for process in completed_processes:
print(f"进程ID: {process.pid}, 完成时间: {process.completion_time}")
上述代码定义了一个Process
类来表示进程,包含进程ID、到达时间和执行时间等属性。round_robin
函数实现了时间片轮转调度算法,通过一个队列来管理就绪进程,每次从队列中取出一个进程执行一个时间片,直到所有进程执行完毕。最后输出每个进程的执行顺序和完成时间。