linux什么是实时调度,Linux 实时调度 示例
在上一篇博文中進(jìn)行了原理性分析之后,本文舉出一個(gè)實(shí)例進(jìn)行分析(假設(shè)所有的cpu處于同一個(gè)cpuset中)。
當(dāng)前系統(tǒng)中cpu的情況如下如所示:
說明:0~99代表的是進(jìn)程的實(shí)時(shí)優(yōu)先級(jí),cpu的狀態(tài)與該cpu上最高實(shí)時(shí)進(jìn)程的優(yōu)先級(jí)+2.
在linux系統(tǒng)中用一個(gè)2維map表示各個(gè)cpu的狀態(tài),其中1個(gè)維度代表了-1~99這幾個(gè)狀態(tài),另一個(gè)維度代表了處于該狀態(tài)下的cpu。那么我們不難計(jì)算出當(dāng)前系統(tǒng)中所有cpu的狀態(tài)為:
假設(shè)發(fā)生如下事件:
1、cpu0上有一個(gè)高優(yōu)先級(jí)的任務(wù)被喚醒(T3)
2、cpu3的T7執(zhí)行完畢
發(fā)生事件1,觸發(fā)一個(gè)push操作,因?yàn)門3任務(wù)的優(yōu)先級(jí)高于當(dāng)前進(jìn)程T2,那么T2必然被換出,那么換出的T2應(yīng)該放置到哪個(gè)cpu上呢?
經(jīng)分析發(fā)現(xiàn),最低優(yōu)先級(jí)的是C1
雖然此時(shí)c1仍舊處于超載狀態(tài),但是沒有滿足條件的cpu可以讓其執(zhí)行push操作。此時(shí)cpu的狀態(tài)為:
此時(shí)發(fā)生事件2,會(huì)發(fā)生push操作,因?yàn)閏pu0和cpu1處于超載狀態(tài)所以push操作會(huì)在cpu0和cpu1上發(fā)生生。
對(duì)于rq0而言,T1>T6,則滿足push的條件,
雖然此時(shí)T6被換出,但是因?yàn)門6不滿足push條件(其他cpu的狀態(tài)都高于T6),因此此時(shí)T6只能呆在cpu3上。接下來,C1仍然滿足push條件,繼續(xù)執(zhí)行push操作。
從這里我們發(fā)現(xiàn),經(jīng)過push/pull操作,使得cpu3的負(fù)載更加嚴(yán)重了。不過隨著其他cpu上的rq逐漸變?yōu)榭?#xff0c;cpu3的超載將很快得到緩解。
總結(jié)
以上是生活随笔為你收集整理的linux什么是实时调度,Linux 实时调度 示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aix vnc oracle,请问如何配
- 下一篇: linux下的普通文件的属性,linux