3.2调度算法

本文深入讲解了各种调度算法,包括先来先服务(FCFS)、短作业优先(SJF/SPF)、优先级调度(PSA)、高响应比优先(HRRN)、时间片轮转(RR)及多级反馈队列(FB),探讨了它们在批处理和分时系统中的应用,以及对不同类型作业的优劣。

调度的实质就是一种资源分配。不同的系统和系统目标,通常采用不同的调度算法——适合自己的才是最好的。

  • 批处理系统为照顾为数众多的短作业,应采用短作业优先的调度算法;
  • 分时系统为保证系统具有合理的响应时间,应采用轮转法进行调度。
  • 目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但有些算法作业调度和进程调度都可以采用。
1、先来先服务调度算法(FCFS)

一种最简单的调度算法,按先后顺序进行调度。既可用于作业调度,也可用于进程调度。
按照作业提交,或进程变为就绪状态的先后次序分派CPU;
新作业只有当前作业或进程执行完或阻塞才获得CPU运行
被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。 (所以,默认即是非抢占方式

  • 不足:不利于短作业:
    在这里插入图片描述
    如作业c,执行时间长度表明该作业属于短作业,其带权周转时间竟高达100,这是不能容忍的;而长作业D的带权周转时间仅为1.99。
  • 有利于CPU繁忙型的作业,而不利于I/O繁忙的作业(进程)。
    从程序规模上看,一般I/O繁忙型作业CPU进行处理的用时相对比较短,CPU繁忙型的作业相对较长。而FCFS不利于短作业,I/O繁忙型作业一旦排队靠后就会处于劣势。
    另一方面,I/O繁忙型作业需频繁的请求I/O,即使排队靠前,但由于I/O请求阻塞,重新排队可能就会排到队尾(这一情况在其他算法下也是普遍的,但不同的算法,排队情况不同,相对的在照顾公平性上也会有所不同)。
    目前大多数事务处理都属于I/O繁忙型作业。
2.短作业(进程)优先调度算法(SJF/SPF)

作业越短,优先级越高,可分别作用于作业调度和进程调度。
在这里插入图片描述

  • 优点:平均周转时间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。
  • 缺点:(1)必须预知作业的运行时间
    (2)对长作业非常不利,长作业的周转时间会明显增长。
    (3)在采用SJF算法时,无法实现人机交互。
    (4)该调度算法完全未考虑作业的紧迫程度,不能保证紧迫性作业能得到及时处理。
  • 抢占和非抢占两种方式,上例为简单的非抢占式。
3.优先级调度算法(PSA)

由外部赋予作业相应的优先级,依据该优先级进行调度。

4.高优先权优先调度算法(HPF)

照顾紧迫性作业,使其获得优先处理而引入调度算法。常用于批处理系统中的作业调度算法,以及多种操作系统中的进程调度算法

  • 分两种方式:
    非抢占式优先权算法
    抢占式优先权算法 (关键点:新作业产生时)
  • 优先权的类型
    (1)静态优先权:创建进程时确定,整个运行期间保持不变。一般利用某一范围的一个整数来表示,又称为优先数。
    (2)动态优先权:创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。
  • 关于进程优先权的确定?依据如下:
    (1)进程类型:一般来,系统进程高于用户进程。
    (2)进程对资源的需求:如进程的估计时间及内存需要量的多少,对要求少的进程赋予较高优先权。
    (3)用户要求:由用户进程的紧迫程度及用户所付费用的多少来确定优先权的。
5.高响应比优先调度算法(HRRN)
  • 短作业优先算法是一种比较好的算法(相当于根据作业长度设定的静态优先权算法),适用于短作业较多的批处理系统中,其主要不足是长作业的运行得不到保证。
  • HRRN为每个作业引入动态优先权,使作业的优先级随着等待时间的增加而以速率a提高:
    优先权 =(等待时间+要求服务时间)/要求服务时间= 响应时间 / 要求服务时间
  • 对不同作业都有照顾
    (1)同时到达的作业优先权相同。
    ①初始t=0,随着时间增长,如果等待时间 t 相同,执行时间愈短的优先权愈高,利于短作业。
    ②对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长也可获得处理机。长作业有照顾。
    (2)当执行时间相同的作业,优先权的高低决定于其等待时间的长短,也就是先来先服务。
  • 什么时候计算各进程的响应比优先权?
    需要进行调度选择的时候比较各自优先权
    (1)作业完成时
    (2)新作业产生时(抢占、非抢占)
    (3)时间片完成时
    (4)进程阻塞时
  • 例:设采用抢占式的高响应比优先算法,注意以下时间点:
    (1)作业完成时
    (2)作业阻塞时(本题作业没有因IO阻塞的情况,该时间可忽略)
    (3)新作业来时
作业号进入时间运行时间
A05
B18
C24
D32

在这里插入图片描述
注:时刻3时C取得运行权,此后直到C运行完毕无新作业进入,故不进行抢占。

6.基于时间片的轮转调度算法(RR)

分时系统新需求:及时响应用户的请求;采用基于时间片的轮转式进程调度算法。
早期分时系统采用的是简单的时间片轮转法,进入90年代后广泛采用多级反馈队列调度算法。

(1)时间片轮转算法
  • 将系统中所有的就绪进程按照FCFS原则,排成一个队列。
  • 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。
  • 在一个时间片结束时,发生时钟中断。
  • 调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
  • 进程阻塞情况发生时,未用完时间片也要出让CPU
  • 能够及时响应,但没有考虑作业长短等问题。
  • 时间片长度的选择要与完成一个基本的交互过程所需的时间相当,保证一个基本的交互过程可在一个时间片内完成。
(2)多级反馈队列算法(FB)
  • 特点:多个就绪队列,循环反馈
    动态优先级、时间片轮转
  • 1)设置多个就绪队列,各队列有不同的优先级,优先级从第一个队列依次降低。
    2) 赋予各队列进程执行时间片大小不同 ,优先权越高,时间片越短

过程:
(1)准备调度:先将它放入第一个队列的末尾,按FCFS原则排队等待调度。
(2)IF时间片内完成,便可准备撤离系统;
(3)IF时间片内未能完成,调度程序便将该进程转入第二队列的末尾等待再次被调度执行。
(4)当第一队列中的进程都执行完,系统再按FCFS原则调度第二队列。在第二队列的稍放长些的时间片内仍未完成,再依次将它放入第三队列。
(5)依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。

  • 注意:(1)各队列的时间片逐渐增大。优先级逐渐降低
    (2)仅当优先权高的队列(如第一队列)空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。
    (3)高优先级抢占问题:
    第i队列中为某进程正占有CPU,又有新进程进入优先权较高的队列(第1~i-1队中);被抢占的进程放回原就绪队列末尾
    在这里插入图片描述
    在这里插入图片描述
各调度算法比较:

在这里插入图片描述
在这里插入图片描述

能源调度是现代能源系统管理中的核心任务,涉及电力系统、综合能源系统(IES)、可再生能源集成等多个领域。为了应对能源需求波动、不确定性因素以及多时间尺度优化的挑战,研究者们提出了多种算法和优化方法。 ### 3.1 传统优化算法 在早期的能源调度研究中,主要采用**线性规划(LP)**、**混合整数线性规划(MILP)** 和 **非线性规划(NLP)** 等数学优化方法。这些方法适用于结构清晰、变量有限的问题,但在处理大规模、高维、不确定性强的系统时存在求解效率低、收敛困难等问题[^2]。 例如,MILP常用于短期电力调度问题,其目标函数通常为最小化运行成本或排放量: ```python # 示例:MILP模型简化示意(使用PuLP库) from pulp import LpProblem, LpVariable, LpMinimize, LpStatus # 创建问题 prob = LpProblem("Energy_Scheduling", LpMinimize) # 定义变量 x = LpVariable.dicts("GenUnit", range(5), lowBound=0) # 目标函数 prob += sum(x[i] * cost[i] for i in range(5)) # 添加约束条件 for t in range(24): prob += sum(x[i] for i in range(5)) >= demand[t] # 求解 prob.solve() print(LpStatus[prob.status]) ``` ### 3.2 启发式与元启发式算法 随着问题复杂度的提升,**遗传算法(GA)**、**粒子群优化(PSO)**、**差分进化(DE)** 和 **模拟退火(SA)** 等智能优化算法被广泛应用于能源调度中。这些方法对初始解不敏感,具有较强的全局搜索能力,尤其适合处理非凸、非线性问题[^4]。 例如,PSO算法可用于实时电力调度问题,其更新公式如下: $$v_{i}^{k+1} = w v_i^k + c_1 r_1 (pbest_i - x_i^k) + c_2 r_2 (gbest - x_i^k)$$ $$x_{i}^{k+1} = x_i^k + v_i^{k+1}$$ 其中 $w$ 是惯性权重,$c_1$、$c_2$ 是学习因子,$r_1$、$r_2$ 是随机数。 ### 3.3 强化学习与深度强化学习(DRL) 近年来,**深度强化学习(DRL)** 在能源调度中展现出强大潜力,特别是在动态环境下的自适应决策方面。常用的DRL算法包括 **Deep Q-Network(DQN)**、**Proximal Policy Optimization(PPO)** 和 **A3C(Asynchronous Advantage Actor-Critic)** 等。这类方法通过与环境交互不断学习最优策略,适用于多时间尺度调度和不确定性建模[^1]。 以PPO为例,其实现框架可基于PyTorch或TensorFlow构建: ```python import torch from stable_baselines3 import PPO # 自定义能源调度环境 env = EnergyEnv() # 构建PPO模型 model = PPO("MlpPolicy", env, verbose=1, learning_rate=3e-4, n_steps=2048, ent_coef=0.01) # 训练模型 model.learn(total_timesteps=100000) # 保存模型 model.save("ppo_energy_scheduler") ``` ### 3.4 不确定性建模与鲁棒优化 由于风能、光伏等可再生能源的波动性和负荷需求的不确定性,**鲁棒优化(Robust Optimization)** 和 **随机规划(Stochastic Programming)** 成为处理不确定性的主流方法。此外,**蒙特卡洛模拟(Monte Carlo Simulation)** 和 **机会约束规划(Chance-Constrained Programming)** 也被广泛用于建模不确定性场景。 ### 3.5 多时间尺度协同调度 多时间尺度调度要求同时考虑秒级、分钟级、小时级甚至日级的调度策略。为此,研究中常采用**滚动优化(Rolling Horizon Optimization)** 和 **分层调度架构(Hierarchical Scheduling)** 来协调不同时间尺度下的决策过程。 ### 3.6 算法融合与未来趋势 当前研究趋势包括: - **DRL与其他优化方法的结合**,如将DRL嵌入到MILP框架中进行在线调整; - **河马优化算法(Hippopotamus Optimization Algorithm, HOA)** 等新型智能算法的应用,特别适合解决动态调度问题[^4]; - **信息技术(IT)与运营技术(OT)的融合**,推动调度算法从理论走向实际部署[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值