进程O(1)调度算法

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

一、关于优先级:

分为普通优先级和实时优先级。

普通优先级是我们知道的PCB中一个字段,取值范围是60~99,。

实时优先级,在运行队列中加入一个进程,这个进程必须一直运行到结束,一次调度运行完毕,适合需要快速响应的场景。如智能刹车。

图中框起来的queue[140]代表着140个进程队列,其中下标为[0,99]为实时进程队列,[100,139]为普通进程队列。我们这里只考虑普通进程。

二、活动队列

1.时间片还没有结束的所有进程都按照优先级放在该队列。

2.nr_active: 总共有多少个运行状态的进程。

3.queue[140]: 一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级!

4.从该结构中,选择一个最合适的进程,过程是怎么的呢?

(1)从0下表开始遍历queue[140]

(2)找到第一个非空队列,该队列必定为优先级最高的队列

(3)拿到选中队列的第一个进程,开始运行,调度完成

虽然4里面遍历queue[140]时间复杂度是常数,但还是太低效了!

5. bitmap[5];一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个 比特位表示队列是否为空,这样,便可以大大提高查找效率。每8个bit位遍历。

三、过期队列

1.过期队列和活动队列结构一模一样。

2.过期队列上放置的进程,都是时间片耗尽的进程。

3.当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算。

四、active指针和expired指针

1.active指针永远指向活动队列

2.expired指针永远指向过期队列

3.当活动队列的进程时间片跑完后,与过期队列交换内容,获得一批新的活动进程。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值