日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux进程调度周期,Linux进程组调度机制学习

發布時間:2024/10/8 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux进程调度周期,Linux进程组调度机制学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from:http://oenhan.com/task-group-sched

https://blog.csdn.net/u014089131/article/details/54865073

1.RT組調度策略:

實時進程的優先級是設置固定,調度器總是選擇優先級最高的進程運行。而在組調度中,調度單元的優先級則是組內優先級最高的調度單元的優先級值,也就是說調度單元的優先級受子調度單元影響,如果一個進程進入了調度單元,那么它所有的父調度單元的調度隊列都要重排。實際上我們看到的結果是,調度器總是選擇優先級最高的實時進程調度,那么組調度對實時進程控制機制是怎么樣的?

在前面的rt_rq實時進程運行隊列里面提到rt_time和rt_runtime,一個是運行累計時間,一個是最大運行時間,當運行累計時間超過最大運行時間的時候,rt_throttled則被設置為1,見sched_rt_runtime_exceeded函數。

if (rt_rq->rt_time > runtime) {

rt_rq->rt_throttled = 1;

if (rt_rq_throttled(rt_rq)) {

sched_rt_rq_dequeue(rt_rq);

return 1;

}

}

設置為1意味著實時隊列中被限制了,如__enqueue_rt_entity函數,不能入隊。

static inline int rt_rq_throttled(struct rt_rq *rt_rq){

return rt_rq->rt_throttled && !rt_rq->rt_nr_boosted;

}

static void __enqueue_rt_entity(struct sched_rt_entity *rt_se, bool head)

{

if (group_rq && (rt_rq_throttled(group_rq) || !group_rq->rt_nr_running))

return;

.....

}

其實還有一個隱藏的時間片的概念,即sched_rt_period_us,意味著sched_rt_period_us時間內,實時進程可以占用CPU

rt_runtime時間,如果實時進程每個時間周期內都沒有調度,則在do_sched_rt_period_timer定時器函數中將rt_time減去一個周期,然后比較rt_runtime,恢復rt_throttled。

//overrun來自對周期時間定時器誤差的校正

rt_rq->rt_time -= min(rt_rq->rt_time, overrun*runtime);

if (rt_rq->rt_throttled && rt_rq->rt_time < runtime) {

rt_rq->rt_throttled = 0;

enqueue = 1;

2.進程執行期間調度器周期性地啟動,其負責更新一些相關數據,并不負責進程之間的切換:

(1)timer_tick();

(2)update_process_times();

(3)scheduler_tick();

(4)task_tick_rt();//RT調度器實現

(5)update_curr_rt();

總結

以上是生活随笔為你收集整理的linux进程调度周期,Linux进程组调度机制学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。