在操作系统中,进程调度是核心功能之一。而优先级调度算法是一种常见的调度策略,它根据每个进程的优先级来决定执行顺序。本文将带你用Python从零开始实现一个简单的优先级调度器,即使你是编程新手,也能轻松理解!
优先级调度算法的基本思想是:每个进程都有一个优先级数值,数值越小(或越大,取决于设计)表示优先级越高。调度器总是选择当前就绪队列中优先级最高的进程来执行。
例如,在医院急诊室,危重病人(高优先级)会比感冒患者(低优先级)先得到治疗——这就是优先级调度的现实类比。
我们将使用Python内置的heapq模块(最小堆)来高效地管理优先级队列。假设数字越小,优先级越高。
首先,我们创建一个简单的进程类,包含进程ID、执行时间(burst time)和优先级:
class Process: def __init__(self, pid, burst_time, priority): self.pid = pid # 进程ID self.burst_time = burst_time # 执行所需时间 self.priority = priority # 优先级(数值越小,优先级越高) def __lt__(self, other): # 用于 heapq 比较:优先级小的排在前面 return self.priority < other.priority def __repr__(self): return f"Process({self.pid}, BT={self.burst_time}, P={self.priority})" 接下来,我们编写调度函数,使用最小堆来管理就绪队列:
import heapqdef priority_scheduling(processes): """ 执行优先级调度算法 :param processes: 进程列表 :return: 执行顺序和总等待时间 """ # 创建最小堆(优先级队列) ready_queue = [] for p in processes: heapq.heappush(ready_queue, p) execution_order = [] current_time = 0 total_waiting_time = 0 while ready_queue: # 取出优先级最高的进程(堆顶) process = heapq.heappop(ready_queue) # 等待时间 = 当前时间 - 进程到达时间(本例假设所有进程在时间0到达) waiting_time = current_time total_waiting_time += waiting_time execution_order.append((process.pid, current_time, current_time + process.burst_time)) # 更新当前时间 current_time += process.burst_time avg_waiting_time = total_waiting_time / len(processes) return execution_order, avg_waiting_time 现在,我们创建几个测试进程并运行调度算法:
if __name__ == "__main__": # 创建进程列表:(PID, 执行时间, 优先级) processes = [ Process(1, 10, 3), Process(2, 1, 1), # 最高优先级 Process(3, 2, 4), Process(4, 1, 2) # 次高优先级 ] order, avg_wait = priority_scheduling(processes) print("执行顺序(进程ID, 开始时间, 结束时间):") for pid, start, end in order: print(f" 进程 {pid}: [{start} → {end}]") print(f"\n平均等待时间: {avg_wait:.2f}") 运行结果如下:
执行顺序(进程ID, 开始时间, 结束时间): 进程 2: [0 → 1] 进程 4: [1 → 2] 进程 1: [2 → 12] 进程 3: [12 → 14]平均等待时间: 3.75
__lt__方法,使自定义对象支持堆排序。你可以尝试改进这个调度器,比如:
arrival_time属性)掌握操作系统进程调度原理,不仅能加深对操作系统的理解,还能提升你在系统编程和算法设计方面的能力。希望这篇关于Python实现调度算法的教程对你有帮助!
如果你喜欢这个优先级调度示例代码,不妨动手修改参数,观察不同优先级组合下的调度效果吧!
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210219.html