進程調度與切換
引起進程調度的原因
首先由於UNIX系統是分時系統因而其時鐘中斷處理程序須每隔一定時間便對要求進程調度程序進行調度的標志runrun予以置位以引起調度程序重新調度其次當進程執行了waitexit及sleep等系統調用後要放棄處理機時也會引起調度程序重新進行調度此外當進程執行完系統調用功能而從核心態返回到用戶態時如果系統中又出現了更高優先級的進程在等待處理機時內核應搶占當前進程的處理機這也會引起調度
調度算法
進程調度在此是采用動態優先數輪轉調度算法調度程序在進行調度時首先從處於內存就緒或被搶占狀態的進程中選擇一個其優先數最小(優先級最高)的進程若此時系統中(同時)有多個進程都具有相同的最高優先級則內核將選擇其中處於就緒狀態或被搶占狀態最久的進程將它從其所在隊列中移出並進行進程上下文的切換恢復其運行
進程優先級的分類
UNIX系統把進程的優先級分成兩類第一類是核心優先級又可進一步把它分為可中斷和不可中斷兩種當一個軟中斷信號到達時若有進程正在可中斷優先級上睡眠該進程將立即被喚醒若有進程處於不可中斷優先級上則該進程繼續睡眠對諸如對換等待磁盤I/O等待緩沖區等幾個優先級都屬於不可中斷優先級而等待輸入等待終端輸出等待子進程退出的幾個優先級都是可中斷優先級另一類是用戶優先級它又被分成n+級其中第級為最高優先級第n級的優先級最低
進程優先數的計算
其中基本用戶優先數即proc結構中的偏移值nice可由用戶將它設置成~中的任一個數一旦設定後用戶僅能使其值增加特權用戶才有權減小nice的值而最近使用CPU的時間則是指當前占有處理機的進程本次使用CPU的時間內核每隔 ms便對該時間做加操作這樣占有CPU的進程其優先數將會隨著它占有CPU時間的增加而加大相應地其優先級便隨之降低
進程切換
在OS中凡要進行中斷處理和執行系統調用時都將涉及到進程上下文的保存和恢復問題此時系統所保存或恢復的上下文都是屬於同一個進程的而在進程調度之後內核所應執行的是進程上下文的切換即內核是把當前進程的上下文保存起來而所恢復的則是進程調度程序所選中的進程的上下文以使該進程能恢復執行
——返回教材目錄
了解更多計算機相關基礎課程視頻
From:http://tw.wingwit.com/Article/program/czxt/201311/24327.html