歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux,Windows和UNIX的進程調度的分析

Linux,Windows和UNIX的進程調度的分析

日期:2017/2/28 16:15:14   编辑:Linux教程

引言 :無論是在批處理系統還是分時系統中,用戶進程數一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統進程也同樣需要使用處理機。這就要求進程調度程序按一定的策略,動態地把處理機分配給處於就緒隊列中的某一個進程,以使之執行。

進程調度的具體功能可總結為如下幾點:

作為進程調度的准備,進程管理模塊必須 將系統中各進程的執行情況和狀態特征記錄在各進程的PCB 表中。並且,根據各進程的狀態特征和資源需求等、進程管理模塊還將各進程的PCB 表排成相應的隊列並進行動態隊列轉接。進程調度模塊通過PCB 變化來掌握系統中存在的所有進程的執行情況和狀態特征,並在適當的時機從就緒隊列中選擇出一個進程占據處理機。

選擇占有處理機的進程

  進程調度的主要功能是按照一定的策略選擇—個處於就緒狀態的進程,使其獲得處理機執行。根據不同的系統設計目的,有各種各樣的選擇策略,例如系統開銷較少的靜態優先數調度法,適合於分時系統的輪轉法(Round RoLin) 和多級互饋輪轉法(Round Robin with Multip1e feedback) 等。這些選擇策略決定了調度算法的性能。

進行進程上下文切換

  —個進程的上下文(context) 包括進程的狀態、有關變量和數據結構的值、機器寄存器的值和PCB 以及有關程序、數據等。一個進程的執行是在進程的上下文中執行。當正在執行的進程由於某種原因要讓出處理機時,系統要做進程上下文切換,以使另一個進程得以執行。當進行上下文切換時點統要首先檢查是否允許做上下文切換( 在有些情況下,上下文切換是不允許的,例如系統正在執行某個不允許中斷的原語時) 。然後,系統要保留有關被切換進程的足夠信息,以便以後切換回該進程時,順利恢復該進程的執行。在系統保留了CPU 現場之後,調度程序選擇一個新的處於就緒狀態的進程、並裝配該進程的上下文,使CPU 的控制權掌握在被選中進程手中。

Unix 進程調度

進程是程序的執行系統中活動的實體. 在UNIX 系統中進程被定義為映像的執行. 映像是計算機的執行環境, 它包括各種寄存器及存儲器的值、打開文件的狀態及現行目錄等等. 進程映像的組成部分: 寄存器、進程控制塊proc 結構和user 結構、進程數據區ppda ( 共享正文段( 由text 結構控制) 、數據段和棧段( 含用戶棧和核心棧) ) . 對於一個進程的映像來說,proc 結構、進程頁表、text 結構是常駐內存的, 而user 結構、正文段、數據段是非常駐內存部分. 它們在用戶虛擬空間形成一個整體, 一起換進換出.

在Unix 操作系統中,所以的程序,不論是用戶級上還是在內核級上執行的,都出現在某個進程的現場內,所有的用戶程序都在它們自己的進程現場中運行。當這些用戶進程通過系統調用請求內核服務的時候,實現該系統調用的內核代碼繼續在請求進程的現場內執行,這就能讓內核方便的訪問進程的所有狀態及其他地址空間。它還提供了一種代表用戶程序記錄內核執行的當前狀態的方式。例如,如果需要掛起一次系統調用的執行來等待I/O 操作完成,那麼內核有關系統調用處理的狀態就要保存在進程中。

因為系統的所有活動,無論是用戶級上的還是內核級上的,都發生在某個進程的現場內,所有UNIX 內核只調度需要執行的進程。當使用傳統的分時調度策略的時候,在用戶級執行的進程不會被分入時間內執行。只有當前的內核進程明確允許的情況下,才能切換到在內核執行的另一個進程。

UNIX 進程調度核心思想

進程狀態轉換圖

進程調度機制問量

在傳統Unix 中.進程優先級的設置是通過nice 和set priority 完成的;但不幸的是,速兩種系統調用無法使用最高優先級的進程得以立即進行,這是因為在循環調度( 時間片調度) 機制下.當進程的時聞片用完後.不論擾先級如何都讓出CPU .另外,由於它是非搶占式內核,優先級高的進程不能 立即打斷當前正在運行的進程,獲得CPU 資源.這對一些要求進程立即搶占CPU ,並且一次運行完成的實時應用是不能滿足要求的.

Copyright © Linux教程網 All Rights Reserved