postgraduate-prep/experiment/code/fcfs.py

44 lines
1.1 KiB
Python

#!/usr/bin/env python3
"""
先来先服务调度算法 (FCFS)
First Come First Served
"""
from typing import List, Dict
from base import (
Process,
ProcessScheduler,
generate_random_processes,
print_processes
)
class FCFSScheduler(ProcessScheduler):
"""先来先服务调度 (First Come First Served)"""
def schedule(self) -> Dict:
"""FCFS 调度算法"""
# 按到达时间排序
ready_queue = sorted(self.processes, key=lambda p: (p.arrival_time, p.pid))
current_time = 0
for p in ready_queue:
if p.arrival_time > current_time:
current_time = p.arrival_time
p.start_time = current_time
current_time += p.burst_time
self.calculate_metrics(p, current_time)
self.results.append(p)
return self.print_results("FCFS (先来先服务)")
if __name__ == "__main__":
processes = generate_random_processes(n=5, seed=42)
print_processes(processes, "测试数据")
scheduler = FCFSScheduler(processes)
scheduler.schedule()