Linux---进程调度及CFS调度器

Linux调度算法

1O(N)调度器

O(N)调度器发布于1992年,从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程

  • 优点:操作简单,便于理解。
  • 缺点:时间消耗太大,在众多可运行进程或者多处理器的环境下都难以胜任

2O(1)调度器

O(1)调度器在Linux2.5系列内核开始至Linux2.6.23版本之前,优化了选择下一个进程的事件,为每个CPU维护一组进程优先级队列,每个优先级一个队列,这样在选择下一个进程时,只需要查询优先级队列相应的位图即可知道哪个队列中有就绪进程,所以查询时间为常数O(1)

  • 优点:适合于大型服务器的负载场景。
  • 缺点:处理桌面系统的交互式进程时存在问题,进程反应缓慢,并且对NUMA支持也不完善

 3CFS调度器

Con Kolivas(麻醉师)提出了RSDLRotating Staircase Deadline Scheduler, 翻转楼梯最后期限调度算法),该算法吸收了队列理论算法,将公平调度的概念引入了Linux调度程序中,但没有被社区所采纳Ingo Molnar(RedHat)借鉴了RSDL的思想,提出了CFS调度算法。CFS算法在Linux2.6.23后的版本使用。

进程的行为

  • I/O密集型:进程的大部分时间用来提交I/O请求或是等待I/O请求。多数的用户界面程序(GUI)在多数的时间里等待鼠标或键盘的交互操作。
  • CPU密集型:进程把时间大多数用在执行代码上,除非被抢占,否则一至不停地运行。例如编译代码、MATLAB等。

当然这种分法不是绝对的,进程可以同时展示这两种行为,比如X Window服务器及时I/O密集型,也是CPU密集型。进程也可以一会是I/O密集型,一会又是CPU密集型通常I/O密集型的进程优先级比CPU密集型高。Linux作为通用系统,因此需要在调度策略上对I/O密集型、CPU密集型的两个矛盾中寻找平衡:进程响应迅速最大系统利用率

进程优先级

进程PCB描述符struct task_struct数据结构中有4个成员描述进程的优先级prio static_prio normal_prio normal_prio

  • 1prio保存着进程的动态优先级,是调度类考虑的
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值