進程在運行中不斷地改變其運行狀態。一般,一個運行進程必須具備如下三種基本狀態。算法
在特定的狀況下,這三種狀態能夠相互轉換。spa
就緒->執行, 當前運行進程阻塞,調度程序選一個優先權最高的進程佔有處理機;操作系統
執行->就緒, 當前運行進程時間片用完;blog
執行->等待,當前運行進程等待鍵盤輸入,進入了睡眠狀態。隊列
等待->就緒,I/O操做完成,被中斷處理程序喚醒。進程
剛從其餘狀態進入就緒態的進程須要置入調度隊列,該隊列不必定按進入隊列的時間前後順序排列。事件
從等待態中出來的進程一般不直接進入運行態,而要進入就緒態。若是須要直接進入運行態,這屬於搶先式調度,經過搶先式中斷完成。it
從執行態到就緒態的轉換髮生在搶先式終端處理中,例如I/O或分時下的時間片。分時是在多個用戶同時以交互方式使用計算機時採用的一種技術。終端
分時技術:每當時鐘中斷髮生時且發現當前運行進程已連續在CPU上運行了必定的時間(稱爲時間片,通常爲20ms~250ms)時,就強制地發生進程切換,使當前進程退出CPU,從新調度,選出另外一個進程在CPU上運行。此時,退出的進程不能變爲等待狀態,由於它不是由於等待I/O而退出的,也不能變爲終止,由於它還沒有結束,所以,它須要轉換爲就緒態,等待屬於它的時間片的到來。程序
當正在創建一個新進程時,計算機上的當前運行進程是哪個?
該新進程的父進程。
同時處於就緒態的進程常常有多個,所以須要一個CPU調度算法來君頂那一個就緒進程先運行。衡量CPU調度算法的標準有:CPU利用率、用戶程序響應時間、系統吞吐量、公平合理性、設備利用率等。
常見的調度算法有先來先服務FIFO、輪轉調度法RR(時間片法)、優先級調度法、短做業優先SJF、最短剩餘事件優先、最高相應比優先、多級反饋法、策略驅動法、最晚時間限調度、二級調度法。
FIFO算法:通常應用於實時性系統中,最早進入就緒態的進程最早進入運行態。
輪轉調度法:根據系統給與的時間片,進行進程的輪詢訪問CPU,若時間片結束,該進程還在運行,就會被強制撤出。該方法一般和FIFO或優先級算法一塊兒使用。
優先級調度法:根據不一樣進程的重要程度和緊急程度,來賦予每一個進程一個優先級,帶有最高優先級的進程最早執行。優先級調度算法分爲靜態優先級和動態優先級兩種。動態優先級能夠防止優先級高的進程不停地執行。
最短做業優先:最早執行佔用CPU時間最短的進程。最短的進程第一個執行老是產生最小的平均相應事件。
最短剩餘時間優先:剩餘運行事件最短的進程最早運行。
最高相應比優先:最早執行相應比最高的進程。相應比的計算公式爲1+等待時間/估計運行時間。
多級反饋法:是目前最經常使用的算法!它結合了FIFO、RR、優先級算法和SJF算法。該算法有多個隊列,同一隊列中的進程優先級相同,不一樣隊列中進程優先級不一樣,不一樣隊列擁有不一樣的時間片。
策略驅動法:基於對各個用戶的承諾。
最晚時間限調度:保證在每一個進程必須完成的最晚時間限錢運行完該進程。
二級調度算法:在系統負載很重時,不是全部的進程創建就當即進入就緒態,有些進程創建起來後,進入後備隊列。操做系統採用一個二級調度程序來決定進程在後備隊列和就緒隊列之間的轉換。其中一級調度是從後備隊列中選擇進程使其轉換爲就緒態;另外一級調度則是在就緒隊列中選擇一個執行。