linux什么是实时调度,Linux 实时调度 示例

在上一篇博文中进行了原理性分析之后,本文举出一个实例进行分析(假设所有的cpu处于同一个cpuset中)。

当前系统中cpu的情况如下如所示:

ccb626f1b020649bdf21422fa823dc8e.png

说明:0~99代表的是进程的实时优先级,cpu的状态与该cpu上最高实时进程的优先级+2.

在linux系统中用一个2维map表示各个cpu的状态,其中1个维度代表了-1~99这几个状态,另一个维度代表了处于该状态下的cpu。那么我们不难计算出当前系统中所有cpu的状态为:

804d9acb50f36ea9e47fca4c503ea668.png

假设发生如下事件:

1、cpu0上有一个高优先级的任务被唤醒(T3)

2、cpu3的T7执行完毕

发生事件1,触发一个push操作,因为T3任务的优先级高于当前进程T2,那么T2必然被换出,那么换出的T2应该放置到哪个cpu上呢?

经分析发现,最低优先级的是C1

78a95a8691f5856d7acad0f46735bbce.png

虽然此时c1仍旧处于超载状态,但是没有满足条件的cpu可以让其执行push操作。此时cpu的状态为:

8f2a15892dd1160b0434c4b7e2249dad.png

此时发生事件2,会发生push操作,因为cpu0和cpu1处于超载状态所以push操作会在cpu0和cpu1上发生生。

对于rq0而言,T1>T6,则满足push的条件,

146d5431ad5b295d1e59416d4f288f12.png

虽然此时T6被换出,但是因为T6不满足push条件(其他cpu的状态都高于T6),因此此时T6只能呆在cpu3上。接下来,C1仍然满足push条件,继续执行push操作。

368d255f273d843f30c164c560d96a9c.png

从这里我们发现,经过push/pull操作,使得cpu3的负载更加严重了。不过随着其他cpu上的rq逐渐变为空,cpu3的超载将很快得到缓解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值