作業(yè)狀態(tài)
作業(yè)從提交給系統(tǒng)、直到它完成任務(wù)后退出系統(tǒng)前,在整個(gè)活動(dòng)過(guò)程中它會(huì)處于不同的狀態(tài)。通常,作業(yè)狀態(tài)分為四種:提交、后備、執(zhí)行和完成,如圖所示。
作業(yè)的基本狀態(tài)
1.提交狀態(tài)——用戶(hù)向系統(tǒng)提交一個(gè)作業(yè)時(shí),該作業(yè)所處的狀況。如將一套作業(yè)卡片交給機(jī)房管理員,由管理員將它們放到讀卡機(jī)予以讀入;或者用戶(hù)通過(guò)鍵盤(pán)向機(jī)器輸入其作業(yè)。
2.后備狀態(tài)——用戶(hù)作業(yè)經(jīng)輸入設(shè)備(如讀卡機(jī))送入輸入井(磁盤(pán))中存放,等待進(jìn)入內(nèi)存時(shí)所處的狀況。此時(shí),該作業(yè)的數(shù)據(jù)已轉(zhuǎn)換成機(jī)器可讀的內(nèi)部形式,并且作業(yè)請(qǐng)求資源等信息也交給了操作系統(tǒng)。
3.執(zhí)行狀態(tài)——作業(yè)分配到所需的資源,被調(diào)入內(nèi)存,其進(jìn)程經(jīng)調(diào)度在處理機(jī)(CPU)上運(yùn)行相應(yīng)的程序時(shí)所處的狀況。此時(shí)該作業(yè)處于活動(dòng)狀況。由于內(nèi)存中有多個(gè)作業(yè),所以在單CPU系統(tǒng)中,任何時(shí)刻真正在運(yùn)行的作業(yè)至多只能有一個(gè)。
4.完成狀態(tài)——即作業(yè)完成了計(jì)算任務(wù),結(jié)果由打印機(jī)輸出,最后由系統(tǒng)回收分配給它的全部資源,準(zhǔn)備退出系統(tǒng)時(shí)的作業(yè)狀況。
作業(yè)調(diào)度
1.作業(yè)控制塊(JCB)
在多道批處理系統(tǒng)中通常有上百個(gè)作業(yè)被收容在輸入井(磁盤(pán))中。為了管理和調(diào)度作業(yè),系統(tǒng)為每個(gè)作業(yè)設(shè)置了一個(gè)作業(yè)控制塊(JCB),它記錄該作業(yè)的有關(guān)信息。不同系統(tǒng)的JCB的組成內(nèi)容有所區(qū)別。圖示出JCB的主要內(nèi)容。
如同PCB是進(jìn)程在系統(tǒng)中存在的標(biāo)志一樣,JCB是作業(yè)在系統(tǒng)中存在的標(biāo)志。作業(yè)進(jìn)入系統(tǒng)時(shí)由SPOOLing系統(tǒng)為每個(gè)作業(yè)建立一個(gè)JCB;當(dāng)作業(yè)退出系統(tǒng)時(shí),則它的JCB也一起被撤消。在磁盤(pán)輸入井中的所有后備作業(yè)按作業(yè)類(lèi)型(CPU型,I/O型等)組成不同的后備作業(yè)隊(duì)列。由作業(yè)調(diào)度從中挑選作業(yè),隨后放入內(nèi)存,予以運(yùn)行。
2.作業(yè)調(diào)度的功能
作業(yè)調(diào)度的主要任務(wù)是完成作業(yè)從后備狀態(tài)到執(zhí)行狀態(tài)和從執(zhí)行狀態(tài)到完成狀態(tài)的轉(zhuǎn)換。具體來(lái)說(shuō),通常作業(yè)調(diào)度程序要完成以下工作(這就是作業(yè)調(diào)度的功能):
(1)記錄系統(tǒng)中各個(gè)作業(yè)的情況。要當(dāng)好指揮,必須對(duì)所管對(duì)象心中有數(shù)。同樣,作業(yè)調(diào)度程序必須掌握各個(gè)作業(yè)進(jìn)入系統(tǒng)時(shí)的有關(guān)情況,并把每個(gè)作業(yè)在各個(gè)階段的情況(包括分配的資源和作業(yè)狀態(tài)等)都記錄在它的JCB中。作業(yè)調(diào)度程序就是根據(jù)各個(gè)作業(yè)的JCB中的信息對(duì)作業(yè)進(jìn)行調(diào)度和管理的。
(2)按照某種調(diào)度算法從后備作業(yè)隊(duì)列中挑選作業(yè),即決定接納多少個(gè)作業(yè)進(jìn)入內(nèi)存和挑選哪些作業(yè)進(jìn)入內(nèi)存。這項(xiàng)工作非常重要,它取決于多道程序度,直接關(guān)系到系統(tǒng)的性能。往往選擇對(duì)資源需求不同的作業(yè)進(jìn)行合理搭配,使得系統(tǒng)中各部分資源都得到均衡利用。
(3)為選中的作業(yè)分配內(nèi)存和外設(shè)等資源。
(4)為選中的作業(yè)建立相應(yīng)的進(jìn)程,并把該進(jìn)程放入就緒隊(duì)列中。
何時(shí)創(chuàng)建新進(jìn)程一般由多道程序決定,因?yàn)閯?chuàng)建的進(jìn)程越多,每個(gè)進(jìn)程占用CPU的百分比就越小。為了對(duì)當(dāng)前的一組進(jìn)程提供良好的服務(wù),作業(yè)調(diào)度程序要限制多道程序度。
(5)作業(yè)結(jié)束后進(jìn)行善后處理工作,如輸出必要的信息,收回該作業(yè)所占用的全部資源,撤消與該作業(yè)相關(guān)的全部進(jìn)程和該作業(yè)的JCB。
應(yīng)該指出,內(nèi)存和外設(shè)的分配與釋放的工作,實(shí)際上分別由存儲(chǔ)管理程序和設(shè)備管理程序完成,即由作業(yè)調(diào)度程序調(diào)用它們來(lái)實(shí)現(xiàn)的。
進(jìn)程調(diào)度的功能和時(shí)機(jī)
進(jìn)程只有在得到CPU之后才能真正活動(dòng)起來(lái)。一個(gè)就緒進(jìn)程怎樣獲得CPU的控制權(quán)呢?這是由進(jìn)程調(diào)度實(shí)現(xiàn)的。
進(jìn)程調(diào)度也叫低級(jí)調(diào)度。進(jìn)程調(diào)度程序也往往叫低級(jí)調(diào)度程序,它完成進(jìn)程狀態(tài)從就緒態(tài)到運(yùn)行態(tài)的轉(zhuǎn)化。實(shí)際上,進(jìn)程調(diào)度程序完成一臺(tái)物理的CPU轉(zhuǎn)變成多臺(tái)虛擬(或邏輯)的CPU的工作。
1.進(jìn)程調(diào)度的主要功能
(1)保存現(xiàn)場(chǎng)。當(dāng)前運(yùn)行的進(jìn)程調(diào)用進(jìn)程調(diào)度程序時(shí),即表示該進(jìn)程要求放棄CPU(因時(shí)間片用完或等待I/O等原因)。這時(shí),進(jìn)程調(diào)度程序把它的現(xiàn)場(chǎng)信息,如程序計(jì)數(shù)器及通用寄存器的內(nèi)容等保留在該進(jìn)程PCB的現(xiàn)場(chǎng)信息區(qū)中。
(2)挑選進(jìn)程。根據(jù)一定的調(diào)度算法(如優(yōu)先級(jí)算法),從就緒隊(duì)列中選出一個(gè)進(jìn)程來(lái),并把它的狀態(tài)改為運(yùn)行態(tài),準(zhǔn)備把CPU分配給它。
(3)恢復(fù)現(xiàn)場(chǎng)。為選中的進(jìn)程恢復(fù)現(xiàn)場(chǎng)信息,并把CPU的控制權(quán)交給該進(jìn)程,從而使它接著上次間斷的地方繼續(xù)運(yùn)行。
2.進(jìn)程調(diào)度的時(shí)機(jī)
(1)任務(wù)完成。正在運(yùn)行的進(jìn)程完成其任務(wù)后,主動(dòng)釋放對(duì)CPU的控制。
(2)等待資源。由于等待某些資源或事件,正在運(yùn)行的進(jìn)程不得不放棄CPU。
(3) 運(yùn)行到時(shí)。在分時(shí)系統(tǒng)中,當(dāng)前進(jìn)程使用完規(guī)定的時(shí)間片,時(shí)鐘中斷使該進(jìn)程讓出CPU。
(4)發(fā)現(xiàn)標(biāo)志。核心處理完中斷或陷入事件后,發(fā)現(xiàn)系統(tǒng)中“重新調(diào)度”標(biāo)志(如linux系統(tǒng)中進(jìn)程task_struct的成員need_resched)被置上,表示有比當(dāng)前用戶(hù)進(jìn)程更適宜運(yùn)行的進(jìn)程,則執(zhí)行進(jìn)程調(diào)度。
進(jìn)程調(diào)度程序是操作系統(tǒng)的真正核心,它直接負(fù)責(zé)CPU的分配。系統(tǒng)中所有進(jìn)程都是在CPU上運(yùn)行的,進(jìn)程調(diào)度程序就是它們的切換開(kāi)關(guān)。
如果把硬件CPU看成一臺(tái)裸機(jī),那么加上這個(gè)調(diào)度程序之后,就變成多臺(tái)邏輯上相同的CPU,只是速度慢一些。在有的機(jī)器上,甚至用微程序設(shè)計(jì)把這個(gè)程序裝入只讀存儲(chǔ)器(ROM)中,從而提高CPU的調(diào)度效率。