作業系統 程序排程

2021-10-04 18:08:53 字數 4139 閱讀 5919

對於單處理器系統,同一時間只有乙個程式可以執行;其他程序都應等待,直到cpu空閒並可排程為止。多道程式的目標是,始終允許某個程序執行以最大化cpu利用率。

cpu的程序屬性:週期進行cpu執行和i/o等待。程序在這兩個狀態之間不斷交替。程序執行從cpu執行開始,之後i/o執行;接著另乙個cpu執行,接著另乙個i/o執行。

需要排程的情況:執行態——等待態(i/o請求、wait呼叫)、執行態——就緒態(出現中斷)、等待態——就緒態(i/o完成)、程序終止。第一種和第四種除了排程沒有選擇,則排程方案為非搶占式或協作的,否則即為搶占的。

排程程式是乙個模組,用來將cpu控制交給短期排程程式選擇的程序。排程程式的功能:切換上下文、切換到使用者模式、跳轉到使用者程式的合適位置,以便重新啟動程式。排程程式停止乙個程序而啟動另乙個所需的時間稱為排程延遲。

排程準則

cpu使用率:使cpu盡可能忙碌。範圍從40%(輕負荷系統)到90%(重負荷系統)。

**吞吐量:**在乙個時間單元內程序完成的數量。

先到先服務(fcfs)

先請求cpu的程序首先分配到cpu。fcfs策略可以通過fifo佇列很容易地實現,當乙個程序進入就緒佇列時,它的pcb會被鏈結到佇列尾部。所有其他程序都等待乙個大程序釋放cpu形成護航效果,與讓較短程序先進行相比,會導致cpu和裝置的使用率降低。fcfs是非搶占式排程演算法。

最短作業優先排程(sjf)

將每個程序與其下次cpu執行排程長度關聯起來。當cpu空閒時,它被賦給具有最短cpu執行的程序。可以證明sjf排程演算法是最優的。對於給定的一組程序,sjf演算法的平均等待時間最小。sjf常用於長期排程。

雖然sjf演算法是最優的,但是不能在短期cpu排程級別上加以實現,因為無法知道下次cpu執行的長度。可以通過指數平均進行計算。$\tau_=αt_n+(1-\alpha)\tau_n $ 其中t

nt_n

tn​為第n個cpu首席執行官度,設τn+

1\tau_

τn+1

​為下次cpu執行**值。因此,對於α

\alpha

α,其取值範圍為[0,1],代表了最近和過去歷史在**中的權重。

sjf演算法可以是搶占式或非搶占式的。搶占式sjf排程有時稱為最短剩餘時間優先

優先順序排程演算法

sjf演算法是優先順序排程演算法的乙個特例。每個程序都有乙個優先順序與其關聯,而具有最高優先順序的程序會分配到cpu。具有相同優先順序的程序按fcfs順序排程。可以是搶占式或非搶占式的。主要問題是無窮阻塞或飢餓,解決方案之一是老化,增加在系統中等待很長時間的程序的優先順序。

輪轉排程(rr)

輪轉排程演算法專門為分時系統設計。將乙個較小時間單元定義為時間量或時間片。就緒佇列作為迴圈佇列。cpu排程程式迴圈整個就緒佇列,為每個程序分配不超過乙個時間片的cpu。rr演算法的效能很大程度取決於時間片的大小。如果時間片很大,則退化為fcfs;如果時間片很小,則導致大量的上下文切換。

多級佇列排程

不同型別的程序對不同的響應時間有要求。多級佇列排程演算法將就緒佇列分成多個單獨佇列。根據程序屬性,如記憶體大小、程序優先順序、程序型別等,乙個程序永久分到乙個佇列。每個佇列有自己的排程演算法。

多級反饋佇列排程

允許程序在佇列之間遷移。根據不同cpu執行的特點來區分程序。如果程序使用過多的cpu時間,那麼它會被移到更低的優先順序佇列。這種方案將i/o密集型和互動程序放在更高優先順序佇列上。此外,在較低優先順序佇列中等待過長的程序會被移到更高優先順序佇列,以此阻止飢餓的發生。

在支援執行緒的作業系統上,核心級執行緒才是作業系統排程的。使用者級執行緒是由執行緒庫來管理的,核心並不知道它們。使用者級執行緒為了執行在cpu上,最終應對映到相關的核心級執行緒,但是這種對映可能不是直接的,可能採用輕量級程序(lwp)。

競爭範圍

使用者級和核心級執行緒之間的乙個區別在於它們是如何排程的。

程序競爭範圍(pcs) 實現多對多和多對一模型的系統執行緒庫會排程使用者級執行緒,以便在lwp上執行。競爭cpu是發生在同一程序的執行緒之間。通常採用優先順序排程,通常允許更高優先順序的執行緒搶占當前執行的執行緒;在具有相同優先順序的執行緒之間,沒有時間分片的保證。

系統競爭範圍(scs) 決定哪個核心級執行緒排程到乙個處理器上。採用一對一模型的系統,如windows\linux\solaris,只採用scs排程。

多處理器排程的方法分為非對稱多處理和對稱多處理(smp)。

smp系統試圖避免將程序從乙個處理器移到另乙個處理器,而是試圖讓乙個程序執行在同乙個處理器上。這稱為處理器親和性,即乙個程序對它執行的處理器具有親和性。其中,試圖保持程序執行在同一處理器卻不保證的情況稱為軟親和性,有的系統提供系統呼叫,允許某個程序執行在某個處理器子集上稱為硬親和性

對於smp系統,重要的是保持所有處理器的負載平衡,以便充分利用多處理器的優點。負載平衡通常有兩種方法:拉遷移和推遷移。乙個特定的任務周期性地檢查每個處理器的負載,如果發現不平衡,那麼通過將程序從超載處理器推到空閒或不太忙的處理器;空閒處理器從忙處理器上拉乙個等待任務則稱為拉遷移。推遷移和拉遷移不必相互排斥。

將多個處理器放置在同乙個物理晶元上,從而產生多核處理器。處理器核的多執行緒有兩種方法:粗粒度細粒度的多執行緒。對於粗粒度的多執行緒,執行緒一直在處理器上執行,直到乙個長延遲事件發生,執行緒之間的切換成本較高。細粒度多執行緒在更細的粒度級別上切換執行緒(通常在指令週期的邊界上)。細粒度系統的架構設計有執行緒切換的邏輯,因此,執行緒之間切換的成本很小。

軟實時系統不保證會排程關鍵實時程序;只保證這類程序優先於非關鍵程序。

硬實時系統在截止期限前完成;在截止期限後完成與沒有完成是同樣的結果。

從事件發生到事件得到服務的這段時間稱為事件延遲。中斷延遲是從cpu收到中斷到中斷處理程式開始的時間。步驟:1.完成正在執行的指令;2.確定中斷型別;3.儲存當前狀態;4.isr處理中斷。排程延遲是從停止乙個程序到啟動另乙個程序所需的時間。

衝突分為兩個部分:搶占在核心中執行的任何執行緒;釋放高優先順序程序所需的、低優先順序程序占有的資源。

單調速率排程

搶占的、靜態優先順序,排程週期性任務。週期越短,優先順序越高;週期越長,優先順序越低。單調速率排程可認為是最優的,因為如果一組程序不能由此演算法排程,它不能由任何其他分配靜態優先順序的演算法來排程。排程n個程序的最壞情況下的cpu利用率為n(2

1/n−

1)n(2~^-1)

n(21/n

−1)

最早截止期限優先排程

根據截止期限動態分配優先順序。理論上最佳。但在實際中由於上下文切換和中斷處理的代價,這種級別的cpu利用率是不可能的。

比例分享排程

在所有應用之間分配t股。如果乙個應用程式接收n顧的時間,那麼確保了它將有n/t的總的處理器時間。採用准入控制策略,確保每個程序能夠得到分配時間。

分析評估法,使用給定演算法和系統負荷,生成乙個公式或數字,以便評估在該負荷下的演算法效能。

確定性模型:採用特定的預先確定的負荷,計算在給定負荷下每個演算法的效能。(根據例子計算)

排隊模型:設n為平均佇列長度(不包括正在服務的程序),w為佇列的平均等待時間,λ

\lambda

λ 為新程序到達佇列的平均到達率(如每秒3個程序)。在程序等待的w時間內,λ∗w

\lambda*w

λ∗w個新程序會到達佇列。n=λ

∗wn=\lambda*w

n=λ∗

w 根據這個公式中的兩個計算第三個。但其準確性不高。

**:**程式有乙個代表時鐘的變數;隨著這個變數值的增加,模擬程式修改系統狀態以便反映裝置、程序和排程程式的活動。隨著**的執行,表明演算法效能的統計資料被收集並列印。

實現:用於評估乙個排程演算法的唯一完全精確方式是:對它進行程式設計,放在作業系統內並觀察它如何工作。但代價高,環境變化不可控。

作業系統 程序排程

程序排程程序排程室作業系統必不可少的一種排程。因此在三種型別的os dos windows linux 都無一例外地配置了程序排程。此外它也是對系統效能影響最大的一種處理機排程。程序排程的任務 儲存處理機的現場資訊。在進行排程時首先需要儲存當前程序的處理機的現場資訊,如程式計數器 多個通用暫存器中的...

作業系統程序排程

華中農業大學 學生實驗報告 課程名稱 計算機作業系統 實驗名稱 程序排程 實驗型別 驗證 設計 綜合 創新 實驗目的 實驗目的 1 通過編寫程式實現程序或作業先來先服務 高優先權 按時間片輪轉排程演算法,使 學生進一步掌握程序排程的概念和演算法,加深對處理機分配的理解。2 了解程序 執行緒 的排程機...

作業系統 程序排程

在cpu分配資源的時候,我們需要考慮分配資源的規則,通過規則或者說演算法選擇乙個程序給處理機執行就是處理機排程,就像銀行排隊是先到者優先還是vip客戶優先。排程的層級分為 高階 中級 低階。狹義的程序排程只是選擇就緒佇列中的程序交給處理機執行,廣義的程序排程還包括程序切換。程序切換是乙個程序讓出處理...