linux进程调度算法介绍

linux源码网站:https://elixir.bootlin.com/linux/latest/source

威斯康辛大学OS课程:https://pages.cs.wisc.edu/~remzi/OSTEP/

github上的教程:https://zorrozou.github.io/

调度算法

  • FIFO 先进先出

    谁先到谁先执行

  • SJF ==> shorest job firs

    谁的进程时间短,谁先被调度

  • STCF ==> shorest time-to-completion first

    谁先完成,谁先被调度,可以打断长时间执行的进程

  • RR 轮询方式 ==> round robin

    把1s分成很多时间片,把这些时间片分给每一个进程

进程队列

  • 全局队列

多个CPU 全局队列

需要加锁,释放锁的各种操作,性能很低

  • 局部队列

每个CPU都有自己的进程队列

每个CPU从自己的进程队列里面取进程然后释放

进程优先级

  • 不是每一个进程都有相同的优先级

    ps -l

    nice(NI)值是什么

    Linux nice 他对别的进程的好的程度,nice越高,优先级越低,得到CPU的时间越少

    范围 -20到19

PRI值是什么

PRI是优先级,值越高,优先级越低,范围0-139

实时进程 用户的交互 需要及时响应 所以和普通进行的优先级要分开

实时进程优先级是从[0-100) #define MAX_USER_RT_PRIO 100

普通进程优先级是从[100-140) #define MAX_PRIO (MAX_RT_PRIO + 40)

  • 静态优先级

    nice 值来决定的优先级,权利在用户,用户在一开始就设定优先级,同时可以更改

  • 动态优先级

    内核来决定的,有些进程会超时,要受到惩罚,内核就会自动去修改优先级,有些进程受到不公平的待遇,内核就会调高他的优先级

Linux调度器

  • O(n)调度器

    cpu 进程队列 队列里边放的是带有优先级的进程

    链表 数据

    遍历这个队列 找到优先级最高的进程,加入进程比较多,效率比较低

  • O(1)调度器

    位运算是最快的 0-139的一个范围

    优先级映射为一个bitmap一共140位

    在这个优先级上面有进程,那么这个位就被置为1,没有进程就被置为0

    active 活动队列 expire 过期队列

    两个队列会交换,指针交换十分块。

    0-140 优先级的这个值越小,优先级越高

    0的优先级最高,因为find first 比find last要块

  • CFS调度器 完全公平调度器 O(lgN) Completely Fair Scheduler

    分时间片 每个进程相对公平

    保障每个进程都能分到时间片

    引入 virtualtime

    优先级高的进程 实际10ms 对应的virtualtime设置1s

    优先级低的进程 实际10ms 对应的virtualtime设置10ms

    红黑树 CPU调度的时候总是取最左边的这个进程进行调度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值