linux进程调度周期,Linux进程组调度机制学习
from:http://oenhan.com/task-group-sched
https://blog.csdn.net/u014089131/article/details/54865073
1.RT組調(diào)度策略:
實(shí)時(shí)進(jìn)程的優(yōu)先級是設(shè)置固定,調(diào)度器總是選擇優(yōu)先級最高的進(jìn)程運(yùn)行。而在組調(diào)度中,調(diào)度單元的優(yōu)先級則是組內(nèi)優(yōu)先級最高的調(diào)度單元的優(yōu)先級值,也就是說調(diào)度單元的優(yōu)先級受子調(diào)度單元影響,如果一個(gè)進(jìn)程進(jìn)入了調(diào)度單元,那么它所有的父調(diào)度單元的調(diào)度隊(duì)列都要重排。實(shí)際上我們看到的結(jié)果是,調(diào)度器總是選擇優(yōu)先級最高的實(shí)時(shí)進(jìn)程調(diào)度,那么組調(diào)度對實(shí)時(shí)進(jìn)程控制機(jī)制是怎么樣的?
在前面的rt_rq實(shí)時(shí)進(jìn)程運(yùn)行隊(duì)列里面提到rt_time和rt_runtime,一個(gè)是運(yùn)行累計(jì)時(shí)間,一個(gè)是最大運(yùn)行時(shí)間,當(dāng)運(yùn)行累計(jì)時(shí)間超過最大運(yùn)行時(shí)間的時(shí)候,rt_throttled則被設(shè)置為1,見sched_rt_runtime_exceeded函數(shù)。
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;
}
}
設(shè)置為1意味著實(shí)時(shí)隊(duì)列中被限制了,如__enqueue_rt_entity函數(shù),不能入隊(duì)。
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;
.....
}
其實(shí)還有一個(gè)隱藏的時(shí)間片的概念,即sched_rt_period_us,意味著sched_rt_period_us時(shí)間內(nèi),實(shí)時(shí)進(jìn)程可以占用CPU
rt_runtime時(shí)間,如果實(shí)時(shí)進(jìn)程每個(gè)時(shí)間周期內(nèi)都沒有調(diào)度,則在do_sched_rt_period_timer定時(shí)器函數(shù)中將rt_time減去一個(gè)周期,然后比較rt_runtime,恢復(fù)rt_throttled。
//overrun來自對周期時(shí)間定時(shí)器誤差的校正
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.進(jìn)程執(zhí)行期間調(diào)度器周期性地啟動(dòng),其負(fù)責(zé)更新一些相關(guān)數(shù)據(jù),并不負(fù)責(zé)進(jìn)程之間的切換:
(1)timer_tick();
(2)update_process_times();
(3)scheduler_tick();
(4)task_tick_rt();//RT調(diào)度器實(shí)現(xiàn)
(5)update_curr_rt();
總結(jié)
以上是生活随笔為你收集整理的linux进程调度周期,Linux进程组调度机制学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酷拉尼马桶怎么样
- 下一篇: linux一切对象皆文件,为什么说Lin