本文发布且更新于个人博客:https://www.xerrors.fun/SchedulingAlgorithm/
1. 要求
多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。
简化假设
- 进程为计算型的(无I/O)
- 进程状态:ready、running、finish
- 进程需要的CPU时间以时间片为单位确定
2. 分析过程
进程 PCB 的表示方法
类的属性要包括:
- pid 进程 ID
- 进程所需的时间片的个数
- 优先权(优先权法使用)
- 已经占用 CPU 的时间(轮转法使用)
同时为了能够使用最小堆,所以需要重新定义小于操作符:
class Process:
pid = 0
def __init__(self, priority, time):
self.priority = priority
self.time = time
self.used = 0
self.pid = Process.pid
Process.pid += 1
def __lt__(self, other):
# 优先级越高越靠前
return self.priority > other.priority
随机生成进程
首先需要「随机数」来生成一些「进程」,嗯,就这样:
def main():
method = input("\n>>> 进程调度算法.\nA. 优先权算法\tB. 轮转算法\n> ")
p = [Process(random.randrange(97,100), random.randrange(1, 21)) for i in range(random.randrange(4, 9))]
if method == 'A':
priority(p)
elif method == 'B':
rotation(p)
else:
print('\n[ERROR]: 输入有误')
print()