知識需要不斷總結、驗證、迭代,知其然,知其所以然。
1、程序和執行緒
程序和執行緒的區別與聯絡:
程序:資源申請的最小單位
執行緒:資源排程的最小單位,程序的一部分,描述指令流的執行狀態。
核心中,描述程序的資料結構pcb:程序控制塊,描述執行緒的資料結構 tcb:執行緒控制塊。
圖1 單執行緒程序
圖2 多執行緒程序
程序主要設計目的是隔離,和其他程序位址空間隔離開來;執行緒是程序的一部分,主要設計目的是通訊和併發,隔離不是主要目的。
程序/執行緒生命週期:
圖3 程序生命週期
2、執行緒的排程
排程演算法最基本的一類是基於執行緒優先順序的,執行緒的一種分類角度為:普通執行緒(sched_other)和實時執行緒(sched_rr/sched_fifo)。實時執行緒的優先順序高於普通執行緒。作業系統每次從就緒佇列中選擇執行緒排程,占有cpu。
關於優先順序,在tcb中有三個字段描述優先順序:
a、靜態優先順序,static_proi,和nice的值(-20~19)相關
b、動態優先順序, proi
c、實時優先順序, rt_priority
普通執行緒使用,a、b,實時執行緒使用的引數a、c。
在分時執行緒中,作業系統根據動態優先順序選定下乙個待執行的執行緒,靜態優先順序是動態優先順序的乙個基準。即b會在a的基礎上浮動,同時a決定了執行緒排程的時間片。
在實時執行緒中,作業系統不計算動態優先順序,只根據c即實時優先順序選定下乙個待執行的執行緒。如果是fifo則沒有時間片(要麼主動放棄cpu、要麼被高優先順序執行緒搶占),如果rr,可以理解為帶時間片輪轉的fifo。
1、假設系統中只有:other的執行緒,a、b、c、d、e、f…
那麼系統會根據動態優先順序高低來呼叫其中的執行緒,
動態優先順序 = max(100, min(靜態優先順序 – bonus + 5, 139))(參考深入理解linux核心)。
同時每個執行緒執行的時間片,也是和靜態優先順序強相關的。
2、假設系統中只有rr型別的執行緒,a、b、c、d、e、f…
作業系統每次呼叫就只會根據實時優先順序的高低選擇帶執行的執行緒,假如a在執行,這個時候b等待的資源滿足了,b的實時優先順序比a高,那a就會b搶占。b結束有三種可能:1、b的時間用完了;2、b主動放棄cpu(等待某種資源);3、b被更高優先順序執行緒搶占。
3、假設系統中只有fifo型別的執行緒,a、b、c、d、e、f….
作業系統同樣每次直選實時優先順序最高的執行緒執行,假如a正在執行,這個時候b等待的資源滿足了,b的優先順序 > a的優先順序,那同樣b就搶占a。b結束的條件是:1、主動放棄cpu;2、被更高優先順序搶占。fifo執行緒沒有時間片的概念,如果需要它會一直佔著cpu,直到被搶占或者主動放棄。
4、如果系統中三類執行緒都有會是什麼情況呢?
首先,實時執行緒 > 普通執行緒,優先選擇實時執行緒且普通執行緒還會被實時執行緒搶占。
實時執行緒中,選擇優先順序高的執行,在執行過程中,也會被更高優先順序的執行緒搶占。假如有兩個fifo執行緒a和b,優先順序都是80,如果a在執行且一直占用cpu,那麼b就無法執行,產生飢餓,直到a主動放棄cpu。如果他們不是fifo而是rr的,那麼a和b就是時間片輪轉執行,大家都有機會拿到cpu。
參考:深入理解linux核心
linux核心設計與實現
程序排程實驗 程序執行及其排程
程序概念從空間的維度上來看,程序是乙個由多種資訊構成的綜合體,它包括 段 資料段 堆 堆疊等,圖示如下 綜合程序關聯的各種資訊而構成了的乙個資料結構,我們稱為程序控制塊 process control block,pcb 也稱為任務控制塊 task control block 這些相關的資訊包括 從...
程序 執行緒 排程 schedule
預備知識 在併發體系中,i o幾乎是不消耗cpu資源的。當i o完成之後會通過dma direct memory access 通知cpu。這個時候cpu完成上下文切換,執行接下來的程序。由於cpu的發展比磁碟的改進快很多,所以接下來的程序會越來越傾向於i o密集型。兩種排程演算法 非搶占式演算法挑...
程序與執行緒 簡介
執行緒 cpu排程的乙個最基本單位,執行緒由兩個部分組成 乙個組成部分是執行緒的核心物件,作業系統用它來對執行緒實施管理。核心物件也是系統用來存放執行緒統計資訊的地方 另乙個部分是執行緒堆疊,它用於維護執行緒在執行 時需要的所有函式引數和區域性變數,與程序相比,程序所佔資源要少的很 程序 程序由兩個...