MST

星途 面试题库

面试题:进程管理之时间片轮转调度算法基础实现

请使用一种你熟悉的编程语言,实现一个简单的时间片轮转调度算法。假设有一组进程,每个进程有进程ID、到达时间和执行时间,时间片大小固定为10。要求输出每个进程的执行顺序和完成时间。
32.9万 热度难度
操作系统进程管理

知识考点

AI 面试

面试题答案

一键面试

以下是使用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函数实现了时间片轮转调度算法,通过一个队列来管理就绪进程,每次从队列中取出一个进程执行一个时间片,直到所有进程执行完毕。最后输出每个进程的执行顺序和完成时间。