作業狀態
作業從提交給系統、直到它完成任務后退出系統前,在整個活動過程中它會處于不同的狀態。通常,作業狀態分為四種:提交、后備、執行和完成,如圖所示。

作業的基本狀態
1.提交狀態——用戶向系統提交一個作業時,該作業所處的狀況。如將一套作業卡片交給機房管理員,由管理員將它們放到讀卡機予以讀入;或者用戶通過鍵盤向機器輸入其作業。
2.后備狀態——用戶作業經輸入設備(如讀卡機)送入輸入井(磁盤)中存放,等待進入內存時所處的狀況。此時,該作業的數據已轉換成機器可讀的內部形式,并且作業請求資源等信息也交給了操作系統。
3.執行狀態——作業分配到所需的資源,被調入內存,其進程經調度在處理機(CPU)上運行相應的程序時所處的狀況。此時該作業處于活動狀況。由于內存中有多個作業,所以在單CPU系統中,任何時刻真正在運行的作業至多只能有一個。
4.完成狀態——即作業完成了計算任務,結果由打印機輸出,最后由系統回收分配給它的全部資源,準備退出系統時的作業狀況。

作業調度
1.作業控制塊(JCB)
在多道批處理系統中通常有上百個作業被收容在輸入井(磁盤)中。為了管理和調度作業,系統為每個作業設置了一個作業控制塊(JCB),它記錄該作業的有關信息。不同系統的JCB的組成內容有所區別。圖示出JCB的主要內容。

如同PCB是進程在系統中存在的標志一樣,JCB是作業在系統中存在的標志。作業進入系統時由SPOOLing系統為每個作業建立一個JCB;當作業退出系統時,則它的JCB也一起被撤消。在磁盤輸入井中的所有后備作業按作業類型(CPU型,I/O型等)組成不同的后備作業隊列。由作業調度從中挑選作業,隨后放入內存,予以運行。
2.作業調度的功能
作業調度的主要任務是完成作業從后備狀態到執行狀態和從執行狀態到完成狀態的轉換。具體來說,通常作業調度程序要完成以下工作(這就是作業調度的功能):
(1)記錄系統中各個作業的情況。要當好指揮,必須對所管對象心中有數。同樣,作業調度程序必須掌握各個作業進入系統時的有關情況,并把每個作業在各個階段的情況(包括分配的資源和作業狀態等)都記錄在它的JCB中。作業調度程序就是根據各個作業的JCB中的信息對作業進行調度和管理的。
(2)按照某種調度算法從后備作業隊列中挑選作業,即決定接納多少個作業進入內存和挑選哪些作業進入內存。這項工作非常重要,它取決于多道程序度,直接關系到系統的性能。往往選擇對資源需求不同的作業進行合理搭配,使得系統中各部分資源都得到均衡利用。
(3)為選中的作業分配內存和外設等資源。
(4)為選中的作業建立相應的進程,并把該進程放入就緒隊列中。
何時創建新進程一般由多道程序決定,因為創建的進程越多,每個進程占用CPU的百分比就越小。為了對當前的一組進程提供良好的服務,作業調度程序要限制多道程序度。
(5)作業結束后進行善后處理工作,如輸出必要的信息,收回該作業所占用的全部資源,撤消與該作業相關的全部進程和該作業的JCB。
應該指出,內存和外設的分配與釋放的工作,實際上分別由存儲管理程序和設備管理程序完成,即由作業調度程序調用它們來實現的。
進程調度的功能和時機
進程只有在得到CPU之后才能真正活動起來。一個就緒進程怎樣獲得CPU的控制權呢?這是由進程調度實現的。
進程調度也叫低級調度。進程調度程序也往往叫低級調度程序,它完成進程狀態從就緒態到運行態的轉化。實際上,進程調度程序完成一臺物理的CPU轉變成多臺虛擬(或邏輯)的CPU的工作。
1.進程調度的主要功能
(1)保存現場。當前運行的進程調用進程調度程序時,即表示該進程要求放棄CPU(因時間片用完或等待I/O等原因)。這時,進程調度程序把它的現場信息,如程序計數器及通用寄存器的內容等保留在該進程PCB的現場信息區中。
(2)挑選進程。根據一定的調度算法(如優先級算法),從就緒隊列中選出一個進程來,并把它的狀態改為運行態,準備把CPU分配給它。
(3)恢復現場。為選中的進程恢復現場信息,并把CPU的控制權交給該進程,從而使它接著上次間斷的地方繼續運行。
2.進程調度的時機
(1)任務完成。正在運行的進程完成其任務后,主動釋放對CPU的控制。
(2)等待資源。由于等待某些資源或事件,正在運行的進程不得不放棄CPU。
(3) 運行到時。在分時系統中,當前進程使用完規定的時間片,時鐘中斷使該進程讓出CPU。
(4)發現標志。核心處理完中斷或陷入事件后,發現系統中“重新調度”標志(如linux系統中進程task_struct的成員need_resched)被置上,表示有比當前用戶進程更適宜運行的進程,則執行進程調度。
進程調度程序是操作系統的真正核心,它直接負責CPU的分配。系統中所有進程都是在CPU上運行的,進程調度程序就是它們的切換開關。
如果把硬件CPU看成一臺裸機,那么加上這個調度程序之后,就變成多臺邏輯上相同的CPU,只是速度慢一些。在有的機器上,甚至用微程序設計把這個程序裝入只讀存儲器(ROM)中,從而提高CPU的調度效率。