调度策略

*

linux 调度

*基于分时技术:多个进程以时间多路复用方式运行,CPU时间被分成了很多片。分时依赖于定时中断。
在linux中,进程的优先级是动态的。调度程序周期性的调整优先级。进程是抢占式的,那么调度进程应该根据进程的优先级来运行。

linux进程分为实时进程,批处理进程,交互式进程。
调度程序总是能找到至少一个可运行进程(swapper进程)
每个linux进程总是按照以下三种被调度

  1. SCHED_FIFO
  2. SCHED_RR
  3. SCHED_NORMAL

每个普通进程都有一个静态优先级,静态优先级本质上决定了进程的基本时间片。普通进程还有动态优先级,调度程序根据动态的优先级来调度进程。动态优先级依赖于静态优先级,具有较高静态优先级的普通进程获得较大的CPU时间片,当一个进程用完它的时间片时,它应该被没有用完时间片的低优先级进程所取代。但值得注意的是用完时间片的批处理进程总是会变成过期进程,用完时间片的交互式进程通常是活动进程,调度程序重填时间片并留在活动集合中。长时间没有运行的过期进程,或者过期进程比交互式进程优先级高,会把用完时间片的交互式进程添加到过期进程中,直到活动进程为空时,过期进程会有机会得到运行。

实时进程的调度
每个实时进程都与实时优先级相关。实时进程总是当成活动进程。
实时进程会被另一个更高优先级的实时进程抢占,进程发生阻塞,进程停止,进程主动让出CPU,进程时间片用完。这些情况下,会发生抢占。

多处理器系统中运行队列的平衡
可以想想,可能会发生,一个CPU超负荷,另一个闲置的情况。内核不会偏向任何一个CPU。调度函数在在本地CPU中选择新进程运行时,应该考虑这些问题一个指定的CPU只能执行其相应的运行队列中的可运行进程。一个可运行进程总是存放在某一个运行队列中。一个保持运行状态的进程被限制在特定的CPU上。这样可以提高性能,利用高速缓存中的数据。
但是同时会出现一些批处理进程处于同一个运行队列,那么CPU会超负荷。。为了解决这些问题,linux引入调度域。内核周期性的检查运行队列工作量的平衡。可以通过迁移进程到另一个CPU实现。

调度域是一个CPU集合,采用分层的组织形式。每个调度域对应一个sched_domain描述符。内核周期性的通过平衡函数来达到各个调度域运行队列的平衡。
linux也提供一些通过系统调用来改变进程的优先级字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值