程序排程之schedule

2021-08-21 08:45:05 字數 531 閱讀 5952

遮蔽了具體的排程演算法,具體的排程演算法在冰山之下

schedule

=>preempt_disable();

=>cpu = smp_processor_id();

rq = cpu_rq(cpu);

rcu_sched_qs(cpu);

prev = rq->curr;

switch_count = &prev->nivcsw;

=>if (prev->state && !(preempt_count() & preempt_active))

=>put_prev_task(rq, prev);//重新入佇列,在紅黑樹的位置可能不在以前的位置了

=>next = pick_next_task(rq);//選擇最左節點作為下一次排程的程序next

=>if (likely(prev != next))

=>preempt_enable_no_resched();

參考文章

linux schedule 理解

程序 執行緒 排程 schedule

預備知識 在併發體系中,i o幾乎是不消耗cpu資源的。當i o完成之後會通過dma direct memory access 通知cpu。這個時候cpu完成上下文切換,執行接下來的程序。由於cpu的發展比磁碟的改進快很多,所以接下來的程序會越來越傾向於i o密集型。兩種排程演算法 非搶占式演算法挑...

核心排程 之schedule

學os的時候經常講到處理機 即cpu 的排程也即任務的排程,現如今與linux的核心 聯絡起來。理解處理機排程要回答3個問題 1 排程的時機 2 排程的策略 3 排程的實現 高階排程 為任務建立pcb,裝入記憶體 中級排程 為提高吞吐量和利用率,將任務臨時換出記憶體 swap 低階排程 程序排程,為...

程序排程之建立程序

do fork struct pid pid alloc pid struct pid pid kmem cache alloc pid cachep,gfp kernel 分配pid結構體空間 nr alloc pidmap current nsproxy pid ns 分配pid程序號 pid ...