#!/usr/bin/env python3 """ 高响应比优先调度算法 (HRRN) Highest Response Ratio Next """ from typing import List, Dict from base import ( Process, ProcessScheduler, generate_random_processes, print_processes ) class HRRNScheduler(ProcessScheduler): """ 高响应比优先调度 (Highest Response Ratio Next) 响应比 = (等待时间 + 服务时间) / 服务时间 = 1 + 等待时间 / 服务时间 特点: - 非抢占式 - 综合考虑了等待时间和服务时间 - 避免长作业饥饿问题 """ def calculate_response_ratio(self, p: Process, current_time: int) -> float: """计算响应比""" waiting_time = current_time - p.arrival_time return 1 + (waiting_time / p.burst_time) if p.burst_time > 0 else float('inf') def schedule(self) -> Dict: """HRRN 调度算法""" processes = sorted(self.processes, key=lambda p: p.arrival_time) ready_queue: List[Process] = [] current_time = 0 completed = 0 while completed < len(processes): # 添加所有到达的进程 for p in processes: if p.arrival_time <= current_time and p not in ready_queue and p not in self.results: ready_queue.append(p) if ready_queue: # 计算每个进程的响应比,选择最高的 ready_queue.sort( key=lambda p: self.calculate_response_ratio(p, current_time), reverse=True # 响应比高优先 ) p = ready_queue.pop(0) p.start_time = current_time current_time += p.burst_time self.calculate_metrics(p, current_time) self.results.append(p) completed += 1 else: current_time += 1 return self.print_results("HRRN (高响应比优先)") if __name__ == "__main__": processes = generate_random_processes(n=5, seed=42) print_processes(processes, "测试数据") scheduler = HRRNScheduler(processes) scheduler.schedule()