基於Linux系統中進程調度分析

來源:互聯網
上載者:User

本文作者(院 浩),請您在閱讀本文時尊重作者著作權。

[摘要]Linux是一個多使用者多任務的作業系統,Linux中實現了對多個進程公平、高效的調度,並不是採用單一的調度策略,而是幾種調度策略有機地綜合應用。

[關鍵詞] 進程調度 優先順序 時間片輪轉 即時進程

在任何一種作業系統中,進程調度一直是一個核心問題,進程調度策略的選擇對整個系統效能有至關重要的影響,一個好的調度演算法應該考慮很多方面:公平、有效、回應時間、周轉時間、系統輸送量等等,但這些因素之間又是相互矛盾的,最終的取捨根據系統要達到的目標而定,本文以Linux作業系統為例,分析其進程調度策略,以期對進程調度過程有更深層次的認識。

一、 Linux的進程調度

Linux支援多進程,進程式控制制塊PCB(Process Control Block)是系統中最為重要的資料結構之一,用來存放進程所必需的各種資訊,PCB用結構task-struct來表示,包括進程的類型、進程狀態、優先順序、時鐘資訊等,Linux系統中,進程調度操作由schedule()函數執行,這是一個只在核心態啟動並執行函數,函數代碼為所有進程共用。

二、 Linux進程調度時機

Linux的進程調度時機與現代作業系統中的調度時機基本一致,為了判斷是否可以執行核心的進程發送器來調度進程,Linux中設定了進程調度標誌need-resched,當標誌為1時,可執行發送器.通常,Linux調度時機分以下兩種情況:(1)主動調度:指顯式調用schedule()函數明確釋放CPU,引起新一輪調度.一般發生在當前進程狀態改變,如:進程終止、進程睡眠、進程對某些訊號處理過程中等,(2)被動調度:指不顯示調用schedule()函數,只是PCB中的need-resched進程調度標誌,該域置位為1將引起新的進程調度,而每當中斷處理和系統調用返回時,核心發送器都會主動查詢need-resched的狀態(若置位,則主動調用schedule()函數),一般發生在新的進程產生時、某個進程優先順序改變時、某個進程等待的資源可用被喚醒時、當前進程時間片用完等。

三、Linux進程調度策略

一般來說,不同用途的作業系統的調度策略是不同的,Linux進程調度是將優先順序調度、時間片輪轉法調度、先進先出調度綜合起來應用,Linux系統中,不同類型的進程調度策略也不一樣。

1. 與進程調度相關的資料結構

每個進程都是一個動態個體,其生命週期依次定義的資料結構為:TASK-RUNNING,TASK-INTERRUPTIBLE,TASK-UNINTERRUPTIBLE,TASK-ZOMBIE和TASK-STOPPED,一個進程在其生存期間,狀態會發生多次變化,與其資料結構相對應的即是Linux進程的狀態,分別是:運行態、等待態、暫停態和僵死態。

2. 進程狀態及其轉換過程的描述

進程建立時的狀態為不可打斷睡眠,在do-fork()結束前被父進程喚醒後,變為執行狀態,處於執行狀態的進程被移到run-queue就緒任務隊列中等待調度,適當時候由schedule()按調度演算法選中,獲得CPU,若採用輪轉法,即時,由時鐘中斷觸發timer-interrupt(),其內部調用schedule(),引起新一輪調度,當前進程的狀態仍處於執行狀態,因而把當前進程掛到ruil-queue隊尾。

獲得CPU且正在啟動並執行進程若申請不到某資源,則調用sleep-on()或interruptible-sleep-on()睡眠,其task-struct進程式控制制塊掛到相應資源的wait-queue等待隊列,如果調用sleep-on(),則其狀態變為不可打斷睡眠,如果調用interruptible-sleep-on(),則其狀態變為可打斷睡眠,Sleep-on()或interruptible-sleep-on()將調用schedule()函數把睡眠進程釋放.

3.進程分類和相應的進程調度策略

Linux系統中,為了高效地調度進程,將進程分成兩類:即時進程和普通進程(又稱非即時進程或一般進程),即時進程的優先順序要高於其他進程,如果一個即時進程處於可執行狀態,它將先得到執行,即時進程又有兩種策略:時間片輪轉和先進先出,在時間片輪轉策略中,每個可執行即時進程輪流執行一個時間片,而先進先出策略每個進程按各自在運行隊列中的順序執行且順序不能變化。

在Linux中,進程調度策略共定義了3種:

Linux系統中的每個進程用task-struct結構來描述,進程調度的依據是task-struct結構中的policy、priority、counter和rt-priority,PCB中設定Policy資料項目,其值用於反映針對不同類型的進程而採用的調度策略。SCHED- RR和SCHED-FIFO用於即時進程,分別表示輪轉調度策略和先進先出調度策略;SCHED-OTHER表示普通進程,也按照輪轉調度策略處理。這三類調度策略均基於優先順序.PCB中設定Priority資料項目,其值為普通進程的調度優先順序.普通進程的可用時間片的初始值即為該值,該值通過系統調用是可以改變的。

PCB中設定rt-priority資料項目,其值是即時進程專用的調度優先順序,即時進程的可用時間片的初始值即為該值,該優先順序也可以用系統調用來修改,PCB中設定counter資料項目,用於進程可用時間片時值的計數,初始值為rt-priority或Priority,進程啟動後該值隨刻度遞減。

通過對Linux進程調度策略的簡單分析,可以看出多進程的管理是一種非常複雜的並發程式設計,每個進程的狀態不僅由其自身決定,而且還要受諸多外在因素的影響,而在此基礎上的進程調度,為了保證作業系統的穩定性、提高效率和增加靈活性,還必須採用很多方法,這些都是值得我們去研究和探討的。

   參考文獻:

[1]劉振鵬李亞平王煜:作業系統[M].北京:中國鐵道出版社,2003

[2]趙明富李太福陳鴻雁:Linux嵌入式系統的即時性分析[J].電腦知識與技術,2003,29(18):53—55

本文來源於 www.14edu.com(論文網) 原文連結:http://www.14edu.com/jingji/cyjjx/06044M042010_2.html 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.