linux進程演算法
① linux操作系統的組成有哪幾部分
Linux操作系統主要由五個基本部分組成:進程調度、內存管理、虛擬文件系統、網路介面、進程間通信。
進程調度:控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的程序,可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程不可運行進程。Linux使用比較簡單的基於優先順序的進程調度演算法選擇新的進程。
內存管理:允許多個進程安全的共享主內存區域。Linux的內存管理支持虛擬內存,即在計算機中運行的程序,其代碼、數據、堆棧的總量可以超過實際內存的大小,操作系統只是把當前使用的程序塊保留在內存中,其餘的程序則保留在磁碟中。必要時,操作系統負責在磁碟和內存空間交換程序塊。
虛擬文件系統:隱藏了各種硬體的具體細節,為所有的設備提供了統一的介面,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2、fat等,設備驅動程序指為每一種硬體控制器所編寫的設備驅動程序模塊。
網路介面:提供了對各種網路標準的存取和各種網路硬體的支持。網路介面可分為網路協議和網路驅動程序。網路協議部分負責實現每一種可能的網路傳輸協議,網路設備驅動程序負責與硬體設備通訊,每一種可能的硬體設備都有相應的設備驅動程序。
進程間通訊:支持進程間各種通信機制。
② linux0.11內核中進程調度演算法FIFO怎麼實現
linux0.11內核中進程調度演算法FIFO怎麼實現
Linux內核中用task指代一切進程和線程。
調度的作用是安排所有可以運行的進程在CPU上的運行時間和次序
內核中主要有兩類調度演算法。其中的實時調度演算法中,對task有優先順序的概念,同一優先順序內的進程可以按照FIFO或RoundRobin的演算法進行調度。這兩種演算法都需要維護一個可運行進程的隊列。
③ Linux如何進行進程調度引入線程機制後,進程管理內容包括哪些
進程調度的演算法有很多,簡單來說就是每個進程都有一個自己的時間片,時間到了,就會被掛起,然後系統挑選下一個合適的進程來執行。至於誰合適,那就要看演算法了,優先順序,是不是飢餓,I/O型還是運算型,都要考慮的。
調度演算法比較復雜龐大,不是這里說的清楚的。
進程切換的過程大概就是保存當前上下文,也就是各種寄存器的狀態,包括指令寄存器。然後把下一個進程的上下文載入上來。
有了線程機制之後,進程管理主要管理線程之間的數據共享,管理進程地址空間,進程的交換空間。因為這些資源是屬於進程的,線程之間是共享的。
現代操作系統調度基本是圍繞線程進行的,進程更多的是起到資源管理分配的作用。
④ linux 進程調度演算法問題 主進程fork了 4個子進程a b c d 優先順序相等 一種
cb這是第一個fork的子進程產生的第一個fork父進程進入elseif先執行子進程輸出b這是第一個fork的父進程產生的父進程輸出ab所以一共是三個進程父——>父(產生父子)父——>子(終)
⑤ linux內核進程調度子系統根據什麼演算法選擇最值得運行的進程
你可以查看相關linux書籍關於這部分的介紹。
操作系統這一門課程回答了你的答案。
據我的了解,應該是多級反饋輪轉調度的演算法。
每個進程都是按時間片運行的。每個進程都被分配了優先順序。
每個進程位於調度隊列的某一級上。操作系統根據這個多級隊列來調度。
每個隊列按照FIFO的方式調度。
就這么多了。你可以去圖書館借書看看。
⑥ linux下的進程和Windows下的進程聯系區別 要有聯系也要有區別……
進程創建:
WINDOWS:WIN32介面,函數略。
LINUX:FORK函數,父子進程的區別PPID和PID。LINUX中的進程的含義和WINDOWS中是不一樣的。LINUX中的進程本身是可以執行的。而WINDOWS中,進程只是表示一個資源的擁有體,是不能執行的。要執行的話,一定需要一個線程。這也部分解釋了為什麼CreateProcess中為啥一定要傳入要執行的文件的名字。LINUX子進程直接使用父親的地址空間,只有子進程載入一個新的可執行文件的時候才創建自己的地址空間。也就是很多時候共享地址空間,有個函數(忘了)就是如果決定開始寫入,則將資源拷貝一份;如果此時突然決定不需要寫入,此時就能避免系統資源的消耗。進程相對於WINDOWS中的線程,所以同WINDOWS中的線程創建相比,二者的開銷應該差不多。
執行:
LINUX:exec
WNDOWS:WIN32函數。
底層:兩者大部分都是C和匯編,在我們看來以為LINUX全是C,WINDOWS是C++,其實不然操作硬體的是匯編和C。使用了不少宏定義,簡化地址運算和程序結構,如定義一個空地址:0x000000表示NULL。
內核:
WINDOWS:相對穩定的API,就是向後兼容,我們總是看到兼容的字眼。升級方便,過於臃腫。
復雜的繼承關系,藏得結結實實的代碼。
LINUX:不固定的介面,為了更加的技術化,所以LINUX一直改進,很多時候偏離了桌面用戶。頭文件和執行文件也就是一些演算法的改進和函數改進。如果你看完2.4的內核後,再看2.6的內核差異不大,但是不少。升級復雜,考慮的東西太多。數不盡的代碼,代碼是寶貴的,又是該死的。
進程演算法(優先順序):
LINUX:圖形界面少點,內核支持搶占的同時又支持CFS公平調度演算法。二叉樹、紅黑樹等演算法。
WINDOWS:進程假死現象普遍,採用阻塞演算法,很多時候導致不流暢、卡死。現在win7做了相當大的改進。演算法不清楚,以前阻塞編程的不少。
內存:
基本上兩者差不多,在X86你懂得。
【以上純屬個人看法,如有不對請指正。給普及教育下。】
⑦ linux調度演算法的核心思想是什麼
第一部分:實時調度演算法
什麼是實時系統,POSIX 1003.b作了這樣的定義:是指系統可以在有限響應時間內提供所需的服務級別。較可取被定義為由Donald喬利士的的:一個實時系統的程序的邏輯正確性不僅取決於計算的准確度,而且還對結果,如果系統時間的限制不能滿足將是一個系統錯誤發生。
基於實時系統的實時性要求的不同,可分為軟實時和硬實時兩種。硬實時系統是指系統必須確保,在最壞情況下的服務時間,截止日期為事件的響應時間是在任何情況下,必須滿足。如航天飛船的控制是這樣一個系統的現實。所有其他實時系統的特點,可以稱為軟實時系統。如果清除,軟實時系統是那些從統計學的角度來看,一個任務(在下面的討論中,我們將有任務和過程不作出區分),以確保系統的處理時間,可以得到事件可以處理的最後期限到來之前,違反的最後期限,並不會帶來一個致命的錯誤,如實時多媒體系統是一種軟實時系統。
一台電腦系統的CPU和其他資源進行有效的調度和管理,以提供實時操作系統的支持。的多任務的實時系統中,資源的調度和管理更復雜的。下面討論本文將從各種實時任務調度演算法的分類的角度來看,普通的Linux操作系統進程調度和各種實時Linux系統,然後研究,以支持實時特點,普通的Linux系統的改進。實時領域的一些問題,並總結了各種實時Linux的Linux操作系統,歸根到底是如何解決這些問題。
CPU的實時調度演算法的分類
多種實時操作系統的實時調度演算法可以分為以下三類Wang99] [Gopalan01]:基於優先順序調度演算法(優先順序驅動調度PD),基於在共享的CPU使用率調度演算法(分享驅動調度SD)的比例,以及基於時間的進程調度演算法(時間驅動調度TD),下面這三種調度演算法逐一介紹。
1.1
/>基於優先順序的調度演算法,基於優先順序的調度演算法,每個進程被分配一個優先順序,每次的進程調度程序,調度程序總是具有最高的調度優先順序的任務執行。根據不同的優先順序分配方法,基於優先順序的調度演算法可以分為以下兩種類型的Krishna01] [Wang99]:靜態優先順序調度演算法
該演算法得到這些系統中運行的所有進程都靜態分配一個優先順序。靜態優先順序分配的屬性的應用程序,如任務循環中的用戶優先順序,或其他預先確定的政策。 RM(速率單調)的調度演算法是一個典型的靜態優先順序的調度演算法,根據執行的任務的調度優先順序的周期的長度確定,那些具有小的執行周期的任務的優先順序較高。
動態優先順序調度演算法:
該演算法基於任務的資源需求動態地分配任務的優先順序,資源分配和調度的目的更大的靈活性。非實時系統,這種演算法有很多,如短作業優先順序調度演算法。任務的實時調度演算法,EDF演算法是使用最廣泛的動態優先順序調度演算法,該演算法根據他們的截止日期(截止日期)分配優先順序的就緒隊列中的每個任務,最近期限具有最高的優先順序。
1.2
基於優先順序調度演算法的調度演算法是簡單而有效的,但這種演算法的基礎上按比例份額是一個硬實時調度,許多的情況下,不適合使用此演算法:例如,軟實時應用,如實時多媒體會議系統。對於軟實時應用程序,共享資源調度演算法(SD演算法)的比例使用是更合適的。
比例共享調度演算法是指對CPU使用率的比例共享調度演算法,其基本思路是按照一定的權重(比率),需要一組調度安排任務,以使它們的權重成比例的執行時間。
要實現比例共享調度演算法[Nieh01]有兩種方法:第一種方法是調整的准備過程中出現的調度隊列隊第一頻率,並安排一線隊的過程中,執行第二種方法是連續調度進程就緒隊列中投產,但根據調整分配一個進程的運行時間片分配的權重。
比例共享調度演算法可以分為以下類別:循環賽,公平份額,公平排隊,的彩票調度方法,(彩票)。
比例共享調度演算法的一個問題是,它並沒有定義任何優先的概念,所有的任務都根據其應用的CPU資源的比例共享系統過載時,執行的所有任務將較慢比例。因此,為了確保該系統的實時過程中獲得一定量的CPU處理時間,一般採用的是動態權重的調整過程。
1.3。基於時間進程調度演算法的調度演算法
對於那些具有穩定,簡單的系統已知輸入,您可以使用時間驅動(驅動時間時間:TD)數據處理,它可以提供一個良好的預測。這種調度演算法本質上是一個設計定型的離線靜態調度方法。在系統的設計階段,所有處理的情況下,在明確的制度,每個任務切換的開始和結束的時間提前做出了明確的安排和設計。該演算法是適用於小型嵌入式系統,自動化控制系統,感測器和其他應用環境。
該演算法的優勢是良好的可預測性任務的執行,但最大的缺點是缺乏靈活性,而且會有一個任務需要執行,而CPU保持空閑。
一般的Linux系統CPU調度
一般的Linux系統支持實時和非實時兩種進程,實時進程與普通進程方面具有絕對的優先權。相應地,實時進程調度策略SCHED_FIFO或SCHED_RR,普通進程SCHED_OTHER調度策略。
每個任務調度演算法的實現在Linux四種調度參數,它們是rt_priority優先政策(尼斯),計數器。調度進程調度的基礎上,這四個參數。
SCHED_OTHER調度策略,調度程序總是會選擇優先順序+計數器的值進程調度的執行。從邏輯分析存在SCHED_OTHER調度策略調度處理來執行,其特徵在於,所述優先順序是一個固定的調度周期(歷元),在每個調度周期內的過程中的優先順序,計數器的值的大小的影響這一刻已經確定變數值的過程中被創建時,它代表了進程的優先順序,也代表數量的時間片,通過該方法可以得到在每個調度周期內,計數器是一個動態值,它反映了當前調度周期的過程中,剩餘的時間片。在每個調度周期的開始,分配給優先順序值計數器,那麼每一次進程被調度運行計數器的值?減少。當計數器的值是零,這個過程已經運行的時間片調度期內,不再參與調度周期進程調度。當所有的進程都用完了時間片調度期結束,然後一遍又一遍。此外,可以看出在Linux系統中的調度周期是不固定的,它的量是動態變化的,例如,在運行的進程的數目和它們的優先順序值?可以影響一個劃時代的長度。有一點值得注意的是,在2.4內核中,首要任務是不錯的替換兩個類似的作用。
按比例分擔的調度策略調度策略SCHED_OTHER可見的性質,它的這種設計方法,以確保進程調度的公平性 - 一個低優先順序進程,在每個時代也將得到他們的份額那些CPU的執行時間,此外,它也提供了不同的進程的優先順序,進程執行時間可以得到更多的具有高優先順序值。
對於實時的過程中,他們使用基於實時優先順序rt_priority的優先順序調度策略,但相同的實時優先順序的進程調度方法是根據不同的調度策略,
BR /> SCHED_FIFO:不同的進程,根據靜態優先順序排隊,然後在相同的優先順序隊列,先准備好運行的第一誰調度和運行的進程不會被終止,直到發生以下情況:1。高優先順序的進程篡奪了CPU;自己的資源請求受阻;自己主動放棄CPU(呼叫SCHED_YIELD);
SCHED_RR是這樣的:這個調度策略SCHED_FIFO與上述完全相同,除了時間片分配給每個進程,正在實施的過程中,給執行時間片,時間片的長度可以通過sched_rr_get_interval調用
由於Linux系統本身是一個桌面導向的系統,因此,它是用於在實時應用中的一些問題:/> /> Linux系統調度單位是10ms,所以它不能提供精確的定時中斷; p>當一個進程調用系統調用進入內核模式運行,它不能被搶占;
Linux內核實現大量採用了封閉中斷操作損失;
由於使用虛擬內存技術,當發生頁面錯誤時,從硬碟中讀取的數據交換的需要,但硬碟讀取和寫入的存儲位置的隨機性,將導致隨機讀取和寫入時間,這在某些情況下,會影響實時任務期限;
雖然Linux的進程調度器還支持實時優先順序,但由於缺乏有效的實時任務調度機制和調度演算法;其網路子協議處理和其它設備的中斷處理,調度伴有相應的過程和自己的有沒有明確的調度機制;
各種實時Linux系統
Home>的的
3.1 RT-Linux和RTAI
RT-Linux是新墨西哥大學的研究(新墨西哥州技術學院)[RTLinuxWeb] [Barabanov97。其基本思路是,在Linux系統上的硬實時支持,它實現了一個微內核實時操作系統(也被稱為RT-Linux的實時子系統),而普通的Linux系統作為一個低優先順序任務在操作系統中運行。在正常的Linux系統的另一個任務可以溝通,通過FIFO和實時任務。 RT-Linux的框架如圖1所示:
圖1 RT-Linux的結構
RT-Linux的關鍵技術是軟體模擬硬體中斷控制器。當Linux系統不時阻止CPU中斷,實時定量RT-Linux的子系統的請求攔截,愛不釋手,而事實上並沒有真正阻止硬體中斷,從而避免了由於中斷造成的封由系統在一段時間內沒有響應,從而在改進的實時。當傳遞給Linux內核的RT-Linux的一個硬體中斷到達截取的中斷,並確定是否有一個實時子系統中斷常式來處理或處理。此外,的最小定時的精度在正常的Linux系統是確定系統的實時時鍾的頻率,Linux的系統時鍾被設置到時鍾中斷每秒100,所以在Linux的系統定時的精度10毫秒,即時鍾周期10ms時,RT-Linux的實時時鍾設置為單觸發狀態,可以提供更多的十幾微秒調度粒度。
RT-Linux實時子系統的任務調度優先順序驅動演算法,RM,EDF等,也可用於其他調度演算法。
RT-Linux的專有系統,重型工作,的確是一個不錯的選擇,但他只提供了CPU資源的調度和實時系統和Linux系統的關系不是非常密切,因此開發人員可以充分利用已在Linux系統中,如協議棧實現的功能。 RT-Linux的工業控制等實時任務簡單和硬實時要求的環境,但大量的工作需要做,如果你想應用的多媒體處理。
義大利實時應用程序介面(RTAI)來自RT-Linux的,它是在設計和RT-Linux的思想相同。這是原來的設計中,為了解決問題,RT-Linux的不同版本的Linux之間很難很難移植,RTAI在Linux上定義的實時硬體抽象層,這個抽象層介面提供實時任務Linux系統的相互作用,這可以增加一點可以Linux內核源代碼到Linux內核的實時支持。
3.2。 KURT-Linux的
KURT-Linux的堪薩斯大學開發的,它可以提供實時微秒精度[KurtWeb] [斯里尼瓦桑]。與RT-Linux的單獨實現一個實時內核,KURT-Linux是常用的Linux系統的基礎上實現的,這也是第一個基於Linux的實時系統可以使用普通的Linux系統調用。
KURT-Linux系統分為三種狀態:正常狀態,實時狀態和混合狀態,在正常狀態下,它使用普通的Linux實時運行狀態實時調度策略任務,實時和非實時任務的混合狀態,可以執行實時狀態可以被用來為實時的要求更加嚴格。
為了提高Linux系統的實時特性,有必要提高精度的時鍾系統的支持。但是,如果只是簡單地增加時鍾頻率將導致調度負載的增加,從而嚴重降低系統的性能。為了解決這個矛盾,KURT-Linux中使用的時鍾精度的方法[UTIMEWeb]提高Linux系統UTIME,時鍾晶元設置為單次觸發狀態(單拍模式),也就是每個時鍾晶元設置超時,然後再次超時事件發生時,在時鍾中斷的處理程序所需的時鍾晶元設置一個超時。其基本思想是一個精確的時間意味著我們需要的時鍾中斷發生時,我們需要一個更精確的時間,以達到這樣的精度,但並不一定需要系統時鍾頻率。它採用了CPU時鍾計數器時間戳計數器(TSC)提供准確的CPU頻率精度的時間。
KURT-Linux的實時任務調度,使用靜態CPU的實時調度演算法,基於時間(TD)。實時任務需要實時事件發生在設計階段就必須清楚列明。該演算法可以實現更好的調度任務,對於那些誰周期。
KURT-Linux的相RT-Linux的優勢之一是,你可以使用系統調用的Linux系統,它最初是專為硬實時支持,但因為它是簡單的實現將使用一個簡單的時間驅動調度取代Linux的調度,實時進程調度的影響等非實時任務,在某些情況下會發生實時任務的截止日期是脆弱的不符合的,也被稱為嚴格的實時系統(快地實時)。基於KURT-Linux的應用程序:藝術(ATM參考交通系統),多媒體播放軟體。 KURT-Linux的另一種方法,需要頻繁的時鍾晶元編程。
3.3。 RED-Linux的
RED-Linux是加州大學爾灣,實時Linux系統的發展[REDWeb] [Wang99],它將支持實時調度和Linux實現相同的操作系統內核。它支持三種類型的調度演算法,即:時間驅動優先Dirven,分享驅動。
為了提高系統的調度粒度,RED-Linux的學習RT-Linux的軟體模擬中斷的管理機制,並增加頻率的時鍾中斷。 RED-Linux的中斷模擬程序只是簡單地中斷會在隊列中排隊一個硬體中斷到來時,並沒有進行實際的中斷處理程序。
另外,為了解決Linux的內核模式的過程中不能被中斷,RED-Linux的插入Linux內核搶占點原語的眾多功能,使這一進程在內核模式下,也在一定程度上被搶占。通過這種方法提高了內核的實時特性。
RED-Linux的設計目標是提供常規調度框架可以支持多種調度演算法,系統為每個任務增加幾個屬性,進程調度的基礎上:
優先順序:作業的優先順序;
開始時間:工作的開始時間;
完成時間:工作的結束時間; BR p>預算:資源的數量在操作過程中要使用的工作;
調整值?這些屬性和調度根據什麼優先使用的這些屬性值幾乎所有的調度演算法。在這種情況下,三種不同的調度演算法無縫地一起耦合到一個統一的。
⑧ linux進程調度的三種策略是什麼
進程調度策略就是調度系統種哪一個進程來CPU運行。這種調度分2層考慮。 第一層,進程狀態這個是最優先考慮的,也就是說優先順序最高的。在linux中只有就緒態的進程才有可能會被調度選中然後佔有CPU,其它狀態的進程不可能佔有的到CPU。下面是linux中進程的狀態TASK_RUNNING:就緒狀態,得到CPU就可以運行。
TASK_INTERRUPTIBLE:淺度睡眠,資源到位或者受到信號就會變成就緒態。
TASK_UNINTERRUPTIBLE:深度睡眠,資源到位就會進入就緒態,不響應信號。
TASK_ZOMBIE:僵死態,進程exit後。
TASK_STOPPED:暫停態,收到SIG_CONT信號進入就緒態。 第二層,其實真正在操作系統中的實現,就是所有就緒態進程鏈接成一個隊列,進程調度時候只會考慮這個隊列中的進程,對其它的進程不考慮,這就實現了第一層中的要求。接下來就是就緒隊列內部各個進程的競爭了。 Linux採用3種不同的調度政策,SCHED_FIFO(下面簡寫成FIFO,先來先服務),SCHED_RR(簡寫成RR,時間片輪流),SCHED_OTHER(下面簡寫成OTHER)。這里大家就能看出一個問題,採用同等調度政策的進程之間自然有可比性,Linux3種調度政策並存,那麼不同調度政策間的進程如何比較呢?可以說他們之間根本就沒有可比性。其實在調度時候,調度只看一個指標,那就是各個進程所具有的權值,權值最大的且在可執行隊列中排在最前面的就會被調度執行。而權值的計算才會設計到各方面因素,其中調度政策可以說在計算權值中,份量是最重的。 為什麼Linux要這么干呢?這是由於事務的多樣性決定的,進程有實時性進程和非實時性的進程2種,FIFO和RR是用來支持實時性進程的調度,我們看一下這3種政策下權值的計算公式就明白了:FIFO和RR計算公式,權值=1000+進程真正的運行時間OTHER計算公式,當時間片為0時,權值=0.當時間片不為0時候,權值=剩餘時間片+20-nice,同時如果是內核線程有+1的小加分,這是因為內核線程無需用戶空間的切換,所以給它加了一分,獎勵他在進程切換時候開銷小的功勞。時間片好理解,那麼nice這個值,用過linux系統的人都知道,這是一個從unix下繼承過來的概念,表示謙讓度,是一個從20~-19的數,可以通過nice和renice指令來設置。從代碼中也能看到值越小就越不會謙讓他人。 從這里我們看出FIFO和RR至少有1000的基數,所以在有FIFO和RR調度政策進程存在時,OTHER進程是沒有機會被調度的到的。從權值計算公式同時也能看出,FIFO先來先服務的調度政策滿足了,但RR這個時間片輪流的調度如果按照這種權值計算是不能滿足時間片輪流這一概念的。這里只是權值的計算,在調度時候對RR政策的進程特殊處理。 以上都是權值計算,下面看看真正的調度過程,首先是對RR政策進程的特殊處理,如果當前進程採用的RR政策,那麼看他的時間片是否用完,用完了就踢到就緒隊列尾部,同時恢復他的時間片。然後是便利整個就緒隊列,找到第一個權值最大的進程來運行。 整體調度效果就是:如果有FIFO和RR政策的進程,就優先調度他們2個,他們之間看已執行時間長短決定勝負,而2種政策內部則遵守各自調度政策。而OTHER只有在前面2種不存在於就緒隊列時候才有可能執行,他們實際也是輪流執行,但他們之間是靠剩餘時間和NICE值來決定勝負。同時就緒隊列中排在最前面的最優先考慮在同樣權值情況下。
⑨ 調度演算法的linux進程調度演算法
linux內核的三種調度方法:
1. SCHED_OTHER 分時調度策略,
2. SCHED_FIFO實時調度策略,先到先服務
3. SCHED_RR實時調度策略,時間片輪轉
實時進程將得到優先調用,實時進程根據實時優先順序決定調度權值,分時進程則通過nice和counter值決
定權值,nice越小,counter越大,被調度的概率越大,也就是曾經使用了cpu最少的進程將會得到優先調
度。
SHCED_RR和SCHED_FIFO的不同:
當採用SHCED_RR策略的進程的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。放在隊列
尾保證了所有具有相同優先順序的RR任務的調度公平。
SCHED_FIFO一旦佔用cpu則一直運行。一直運行直到有更高優先順序任務到達或自己放棄。
如果有相同優先順序的實時進程(根據優先順序計算的調度權值是一樣的)已經准備好,FIFO時必須等待該
進程主動放棄後才可以運行這個優先順序相同的任務。而RR可以讓每個任務都執行一段時間。
SHCED_RR和SCHED_FIFO的相同點:
SHCED_RR和SHCED_FIFO都只用於實時任務。
創建時優先順序大於0(1-99)。
按照可搶占優先順序調度演算法進行。
就緒態的實時任務立即搶占非實時任務。
所有任務都採用linux分時調度策略時。
1. 創建任務指定採用分時調度策略,並指定優先順序nice值(-20~19)。
2. 將根據每個任務的nice值確定在cpu上的執行時間(counter)。
3. 如果沒有等待資源,則將該任務加入到就緒隊列中。
4. 調度程序遍歷就緒隊列中的任務,通過對每個任務動態優先順序的計算(counter+20-nice)結果,選擇
計算結果最大的一個去運行,當這 個時間片用完後(counter減至0)或者主動放棄cpu時,該任務將被放在
就緒隊列末尾(時間片用完)或等待隊列(因等待資源而放棄cpu)中。
5. 此時調度程序重復上面計算過程,轉到第4步。
6. 當調度程序發現所有就緒任務計算所得的權值都為不大於0時,重復第2步。
所有任務都採用FIFO時:
1. 創建進程時指定採用FIFO,並設置實時優先順序rt_priority(1-99)。
2. 如果沒有等待資源,則將該任務加入到就緒隊列中。
3. 調度程序遍歷就緒隊列,根據實時優先順序計算調度權值(1000+rt_priority),選擇權值最高的任務使用
cpu,該FIFO任務將一直佔有cpu直到有優先順序更高的任務就緒(即使優先順序相同也不行)或者主動放棄(等
待資源)。
4. 調度程序發現有優先順序更高的任務到達(高優先順序任務可能被中斷或定時器任務喚醒,再或被當前運行
的任務喚醒,等等),則調度程序立即在當前任務 堆棧中保存當前cpu寄存器的所有數據,重新從高優先順序
任務的堆棧中載入寄存器數據到cpu,此時高優先順序的任務開始運行。重復第3步。
5. 如果當前任務因等待資源而主動放棄cpu使用權,則該任務將從就緒隊列中刪除,加入等待隊列,此時
重復第3步。
所有任務都採用RR調度策略時
1. 創建任務時指定調度參數為RR,並設置任務的實時優先順序和nice值(nice值將會轉換為該任務的時間片
的長度)。
2. 如果沒有等待資源,則將該任務加入到就緒隊列中。
3. 調度程序遍歷就緒隊列,根據實時優先順序計算調度權值(1000+rt_priority),選擇權值最高的任務使用
cpu。
4. 如果就緒隊列中的RR任務時間片為0,則會根據nice值設置該任務的時間片,同時將該任務放入就緒隊
列的末尾。重復步驟3。
5. 當前任務由於等待資源而主動退出cpu,則其加入等待隊列中。重復步驟3。
系統中既有分時調度,又有時間片輪轉調度和先進先出調度
1. RR調度和FIFO調度的進程屬於實時進程,以分時調度的進程是非實時進程。
2. 當實時進程准備就緒後,如果當前cpu正在運行非實時進程,則實時進程立即搶占非實時進程。
3. RR進程和FIFO進程都採用實時優先順序做為調度的權值標准,RR是FIFO的一個延伸。FIFO時,如果兩
個進程的優先順序一樣,則這兩個優先 級一樣的進程具體執行哪一個是由其在隊列中的未知決定的,這樣導
致一些不公正性(優先順序是一樣的,為什麼要讓你一直運行?),如果將兩個優先順序一樣的任務 的調度策略都
設為RR,則保證了這兩個任務可以循環執行,保證了公平。