调度算法

早期Linux版本中的调度算法非常简单易懂;在每次进程切换时,内核扫描可运行进程的链表,计算进程的优先级,然后选择”最佳”进程来运行。这个算法的主要缺点是选择”最佳”进程所要消耗的时间与可运行的进程数量相关,因此,这个算法的开销太大,在运行数千个进程的高端系统中要消耗太多的时间。

Linux2.6的调度算法就复杂多了。通过设计,该算法较好地解决了与可运行进程数量的比例关系,因为它在固定的时间内选中要运行的进程。它也很好地处理了与处理器数量的比例关系,因为每个CPU都拥有自己的可运行进程队列。而且,新算法较好地解决了区分交互式进程和批处理进程的问题。因此,在高负载的系统中,用户感到在Linux2.6中交互应用的响应速度比早期的Linux版本要快。

调度程序总能成功地找到要执行的进程。事实上,总是至少有一个可运行进程,即swapper进程,它的PID等于0,而且它只有在CPU不能执行其它进程时才执行。就像在第三章中提到的,每个多处理器系统的CPU都有它自己的swapper进程,其PID等于0

每个Linux进程总是按照下面的高度类型被调度:

SCHED_FIFO

先进先出的实时进程。当调度程序把CPU分配给进程的时候,它把该进程描述符保留在运行队列链表的当前位置。如果没有其它可运行的更高优先级的实进进程,进程就继续使用CPU,想用多长时间就用多长时间,即使还有其它具有相同优先级的实时进程处于可运行状态。

SCHED_RR

时间片轮转的实时进程。当调度程序把CPU分配给进程的时候,它把该进程的描述符放在运行队列链表的末尾。这种策略保证对所有具有相同优先级的SCHED_RR实时进程公平分配CPU时间。

SCHED_NORMAL

普通的分时进程

调度算法根据进程是普通进程还是实时进程而有很大不同。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值