LINUX 程序排程演算法
阿新 • • 發佈:2019-02-16
程序排程:
無論是在批處理系統還是分時系統中,使用者程序數一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。
這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某一個程序,以使之執行。
一、程序的基本狀態及狀態間的轉換:
1.等待態:等待某個事件的完成;
2.就緒態:等待系統分配處理器以便執行;
3.執行態:佔有處理器正在執行。
執行態→等待態 往往是由於等待外設,等待主存等資源分配或等待人工干預而引起的。 等待態→就緒態 則是等待的條件已滿足,只需分配到處理器後就能執行。 執行態→就緒態 不是由於自身原因,而是由外界原因使執行狀態的程序讓出處理器,這時候就變成就緒態。例如時間片用完,或有更高優先順序的程序來搶佔處理器等。二、處理機
高階、中級和低階排程作業從提交開始直到完成,往往要經歷下述三級排程: 高階排程:(High-Level Scheduling)又稱為作業排程,它決定把後備作業調入記憶體執行; 低階排程:(Low-Level Scheduling)又稱為程序排程,它決定把就緒佇列的某程序獲得CPU; 中級排程:(Intermediate-Level Scheduling)又稱為在虛擬儲存器中引入,在內、外存對換區進行程序對換。三、程序排程的演算法及思想
1.先來先服務排程演算法
先來先服務(FCFS)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。當在作業排程中採用該演算法時,
每次排程都是從後備作業佇列中選擇一個或多個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源、建立程序,然後放入就緒
佇列。在程序排程中採用FCFS演算法時,則每次排程是從就緒佇列中選擇一個最先進入該佇列的程序,為之分配處理機,使之投入執行。
該程序一直執行到完成或發生某事件而阻塞後才放棄處理機。
來看一個例子,假設有三個程序和它們各自執行時間(以毫秒為單位)如下表: 那麼如果三個程序按照P1, P2, P3的順序啟動的話,按照先到先服務的排程演算法,執行過程如下: