Linux进程详解:进程优先级,调度算法,进程特性

进程优先级

进程要访问某种软硬件资源,此时进程需要通过一定的方式(排队),来确认享受某种资源的先后顺序。

优先级是确认先后问题,权限是确认能不能的问题。

资源有限。

PRI 优先级。
Linux默认优先级是80.
Linux优先级是可以被修改的,Linux的优先级的范围[60,99],一共40个优先等级
优先级的本质是数字,数字越小,优先级越高

调整优先级
不建议用户自己对进程优先级进行修改。

修改nice值

  • top - 任务管理器
  • r
  • 输入想要修改优先级的进程的pid
  • 输入想要修改的优先级

Linux系统允许体哦阿正哟溴铵及,但是不能直接让你修改PRI,而是修改nice值。
nice值不是优先级,而是进程优先级的修正数据
PRI = PRI(old) + nice。

PRI(old),老的优先级一直都是进程最初的优先级值。

nice值的取值范围:[-20 , 19]

Linux的优先级的调整是受限制的。
优先级较高的进程,优先得到资源,后续还有很多的进程产生,导致常规的进程很难享受到CPU资源。此时会出现进程饥饿问题

任何分时操作系统,都要在调度上,保证较为公平的进行调度。

优先级可以调整,但是必须在可控范围内调整。

Linux下的调度算法

Linux2.6内核进程调度

  • 一个CPU拥有一个runqueue
    • 如果有搓个CPU就要考虑进程个数的负载均衡问题

优先级

  • 普通优先级:100~139
  • 实时优先级:0~99

活动队列

  • 时间片还没有结束的所有进程都按照优先级放在该队列
  • nr_active:总共有多少个运行状态的进程
  • queue[140]:一个元素就是一个进程队列,相同优先级的进程按照FIFO(先入先出)规则进行排队调度,数组下标就是优先级。
  • 从该结构中,选择一个最合适的进程,过程:
    1. 从0下标开始遍历queue[140]
    2. 找到第一个非空队列,该队列必定为优先级最高的队列
    3. 拿到选中队列的第一个进程,开始运行,调度完成
    4. 遍历queue[140]的时间复杂度是常数,但是还是太低效了
  • bitmap[5]:一共有140个优先级,所以一共有140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样大大提高了查找效率

过期队列

  • 过期队列和活动队列的结构是与一摸一样的。
  • 过期队列上放置的进程,都是时间片耗尽的进程
  • 当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算

active指针 和 expired指针

  • active指针永远指向的是活动队列

  • expired指针永远指向过期队列

  • 可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。

  • 当活动队列上的进程运行完毕之后,只需要交换active指针和expire指针的内容,就相当于具有了一批新的活动进程。

    在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程的增多而导致时间成本增加,我们称之为进程调度O(1)算法!

进程特性

  • 竞争性:系统进程数目众多,而CPU资源只有少量的,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
  • 独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  • 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
  • 并发:多个进程在一个CPU下采用高频的进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值