程序在運作中不斷地改變其運作狀态。通常,一個運作程序必須具有以下三種基本狀态。
執行态run:程序正在使用cpu
等待态wait:程序正在等待i/o完成,不在使用也不能使用cpu
就緒态ready:程序不在使用cpu,但已經純備好用使用cpu
在特定的情況下,這三種狀态可以互相轉換。

就緒->執行, 目前運作程序阻塞,排程程式選一個優先權最高的程序占有處理機;
執行->就緒, 目前運作程序時間片用完;
執行->等待,目前運作程序等待鍵盤輸入,進入了睡眠狀态。
等待->就緒,i/o操作完成,被中斷處理程式喚醒。
剛從其他狀态進入就緒态的程序需要置入排程隊列,該隊列不一定按進入隊列的時間先後順序排列。
從等待态中出來的程序通常不直接進入運作态,而要進入就緒态。如果需要直接進入運作态,這屬于搶先式排程,通過搶先式中斷完成。
從執行态到就緒态的轉換發生在搶先式終端進行中,例如i/o或分時下的時間片。分時是在多個使用者同時以互動方式使用計算機時采用的一種技術。
分時技術:每當時鐘中斷發生時且發現目前運作程序已連續在cpu上運作了一定的時間(稱為時間片,一般為20ms~250ms)時,就強制地發生程序切換,使目前程序退出cpu,重新排程,選出另一個程序在cpu上運作。此時,退出的程序不能變為等待狀态,因為它不是因為等待i/o而退出的,也不能變為終止,因為它尚未結束,是以,它需要轉換為就緒态,等待屬于它的時間片的到來。
當正在建立一個新程序時,計算機上的目前運作程序是哪一個?
該新程序的父程序。
同時處于就緒态的程序經常有多個,是以需要一個cpu排程算法來君頂那一個就緒程序先運作。衡量cpu排程算法的标準有:cpu使用率、使用者程式響應時間、系統吞吐量、公平合理性、裝置使用率等。 常見的排程算法有先來先服務fifo、輪轉排程法rr(時間片法)、優先級排程法、短作業優先sjf、最短剩餘事件優先、最高相應比優先、多級回報法、政策驅動法、最晚時間限排程、二級排程法。
fifo算法:一般應用于實時性系統中,最先進入就緒态的程序最先進入運作态。
輪轉排程法:根據系統給與的時間片,進行程序的輪詢通路cpu,若時間片結束,該程序還在運作,就會被強制撤出。該方法通常和fifo或優先級算法一起使用。
優先級排程法:根據不同程序的重要程度和緊急程度,來賦予每個程序一個優先級,帶有最高優先級的程序最先執行。優先級排程算法分為靜态優先級和動态優先級兩種。動态優先級可以防止優先級高的程序不停地執行。
最短作業優先:最先執行占用cpu時間最短的程序。最短的程序第一個執行總是産生最小的平均相應事件。
最短剩餘時間優先:剩餘運作事件最短的程序最先運作。
最高相應比優先:最先執行相應比最高的程序。相應比的計算公式為1+等待時間/估計運作時間。
多級回報法:是目前最常用的算法!它結合了fifo、rr、優先級算法和sjf算法。該算法有多個隊列,同一隊列中的程序優先級相同,不同隊列中程序優先級不同,不同隊列擁有不同的時間片。
政策驅動法:基于對各個使用者的承諾。
最晚時間限排程:保證在每個程序必須完成的最晚時間限錢運作完該程序。
二級排程算法:在系統負載很重時,不是所有的程序建立就立即進入就緒态,有些程序建立起來後,進入後備隊列。作業系統采用一個二級排程程式來決定程序在後備隊列和就緒隊列之間的轉換。其中一級排程是從後備隊列中選擇程序使其轉換為就緒态;另一級排程則是在就緒隊列中選擇一個執行。
![]()
程式狀态轉換、CPU排程算法CPU排程算法