本章考核知識(shí)點(diǎn):1.多道程序設(shè)計(jì) 2.進(jìn)程 3.進(jìn)程狀態(tài) 4.進(jìn)程控制塊 5.進(jìn)程隊(duì)列 6.可再入程序 7.中斷及中斷響應(yīng) 8.中斷優(yōu)先級(jí) 9.進(jìn)程調(diào)度
自學(xué)要求:通過本章學(xué)習(xí)應(yīng)該掌握多道程序設(shè)計(jì)是如何提高計(jì)算機(jī)系統(tǒng)效率的;進(jìn)程與程序有什么區(qū)別;進(jìn)程的基本狀態(tài)以及狀態(tài)變化;進(jìn)程隊(duì)列及進(jìn)程調(diào)度策略;中斷的作用。
重點(diǎn)是:多道程序設(shè)計(jì);進(jìn)程的定義和屬性;進(jìn)程調(diào)度策略。
一、 多道程序設(shè)計(jì)( 領(lǐng)會(huì) )
1、什么是多道程序設(shè)計(jì)。
讓多個(gè)計(jì)算問題同時(shí)裝入一個(gè)計(jì)算機(jī)系統(tǒng)的主存儲(chǔ)器并行執(zhí)行,這種設(shè)計(jì)技術(shù)稱“ 多道程序設(shè)計(jì) ”,這種計(jì)算機(jī)系統(tǒng)稱“多道程序設(shè)計(jì)系統(tǒng)” 或簡稱“多道系統(tǒng)”。
存儲(chǔ)保護(hù) :在多道程序設(shè)計(jì)的系統(tǒng)中,主存儲(chǔ)器中同時(shí)存放了多個(gè)作業(yè)的程序。為避免相互干擾,必須提供必要的手段使得在主存儲(chǔ)器中的各道程序只能訪問自己的區(qū)域。這樣,每道程序執(zhí)行時(shí),都不會(huì)破壞其他各道的程序和數(shù)據(jù)。特別是當(dāng)某道程序發(fā)生錯(cuò)誤的時(shí),也不至于影響其它的程序。
程序浮動(dòng) :在多道程序設(shè)計(jì)系統(tǒng)中,對(duì)程序有一些特殊要求,也就是說,程序可以隨機(jī)地從主存的一個(gè)區(qū)域移動(dòng)到另一個(gè)區(qū)域,程序被移動(dòng)后仍絲毫不影響它的執(zhí)行,這種技術(shù)稱為“程序浮動(dòng)”。
在多道程序設(shè)計(jì)的系統(tǒng)中,有三點(diǎn)基本要求:
用“存儲(chǔ)保護(hù)”的方法保證各道程序互不侵犯;
用“程序浮動(dòng)”技術(shù)讓程序能靈活地改變存放區(qū)域且能正確執(zhí)行;
必須對(duì)資源按一定的策略分配和調(diào)度。
2、 多道程序設(shè)計(jì) 利用了系統(tǒng)與外圍設(shè)備的并行工作能力,從而提高工作效率。具體表現(xiàn)為:
提高了處理器的利用率;
充分利用外圍設(shè)備資源:計(jì)算機(jī)系統(tǒng)配置多種外圍設(shè)備,采用多道程序設(shè)計(jì)并行工作時(shí),可以將使用不同設(shè)備的程序搭配在一起同時(shí)裝入主存儲(chǔ)器,使得系統(tǒng)中各外圍設(shè)備經(jīng)常處于忙碌狀態(tài),系統(tǒng)資源被充分利用;
發(fā)揮了處理器與外圍設(shè)備以及外圍設(shè)備之間的并行工作能力;
從總體上說,采用多道程序設(shè)計(jì)技術(shù)后,可以有效地提高系統(tǒng)中資源的利用率,增加單位時(shí)間內(nèi)的算題量,從而提高了吞吐率。
3、 多道程序設(shè)計(jì) 對(duì)算題量和算題時(shí)間的影響。 采用多道程序設(shè)計(jì)能改變系統(tǒng)資源的使用情況,提高系統(tǒng)效率。但是應(yīng)注意以下兩個(gè)問題:
可能延長程序的執(zhí)行時(shí)間;
并行工作道數(shù)與系統(tǒng)效率不成正比。從表面上看,增加并行工作道數(shù)就可提高系統(tǒng)效率,但實(shí)際上并行工作道數(shù)與系統(tǒng)效率是不成正比,因?yàn)椴⑿械牡罃?shù)要根據(jù)系統(tǒng)配置的資源和用戶對(duì)資源的要求而定:
(1)主存儲(chǔ)器的大小限制了可同時(shí)裝入的程序數(shù)量;
(2)外圍設(shè)備的數(shù)量也是一個(gè)制約條件;
(3)多個(gè)程序同時(shí)要求使用同一資源的情況也會(huì)經(jīng)常發(fā)生。
總之,多道程序設(shè)計(jì)能提高系統(tǒng)資源的使用效率,增加單位時(shí)間的算題量;但是對(duì)每個(gè)計(jì)算問題來說,從算題開始到全部完成所需要的時(shí)間可能延長,另外在確定并行工作道數(shù)時(shí)應(yīng)綜合系統(tǒng)的資源配置和用戶對(duì)資源的要求。
二、 進(jìn)程( 領(lǐng)會(huì) )
1、 進(jìn)程 的定義:把一個(gè)程序在一個(gè)數(shù)據(jù)集上的一次執(zhí)行稱為一個(gè)“進(jìn)程”。
2、 進(jìn)程是由 程序 、 數(shù)據(jù)集 和 進(jìn)程控制塊 三部分組成。
我們舉一個(gè)例子,比如在有一個(gè)用戶程序notepad.exe(記事本),當(dāng)它存放在磁盤上時(shí),就是一個(gè)程序,在windows操作系統(tǒng)下運(yùn)行它時(shí),就會(huì)在內(nèi)存中建立一個(gè)記事本程序的進(jìn)程,而我們?cè)谟浭卤局芯庉嫷漠?dāng)前文字就是這個(gè)進(jìn)程的數(shù)據(jù)集,操作系統(tǒng)會(huì)為當(dāng)前的進(jìn)程設(shè)置一個(gè)進(jìn)程控制塊。如果我們?cè)俅蜷_一個(gè)記事本程序的窗口,就會(huì)建立另一個(gè)進(jìn)程,此時(shí)運(yùn)行的是同一個(gè)程序,但存在兩個(gè)進(jìn)程,第二個(gè)窗口中的編輯內(nèi)容就是第二個(gè)進(jìn)程的數(shù)據(jù)集。
3、 進(jìn)程 與 程序 的區(qū)別及關(guān)系。程序是靜止的,進(jìn)程是動(dòng)態(tài)的。進(jìn)程包括程序和程序處理的對(duì)象(數(shù)據(jù)集),進(jìn)程能得到程序處理的結(jié)果。進(jìn)程和程序并非一一對(duì)應(yīng)的,一個(gè)程序運(yùn)行在不同的數(shù)據(jù)集上就構(gòu)成了不同的進(jìn)程。通常把進(jìn)程分為“系統(tǒng)進(jìn)程”和“用戶進(jìn)程”兩大類,把完成操作系統(tǒng)功能的進(jìn)程稱為系統(tǒng)進(jìn)程,而完成用戶功能的進(jìn)程則稱為用戶進(jìn)程。
三、 進(jìn)程狀態(tài)( 領(lǐng)會(huì) )
1、 進(jìn)程的 三種基本狀態(tài) .通常,根據(jù)進(jìn)程執(zhí)行過程中不同時(shí)刻的狀態(tài),可歸納為三種基本狀態(tài):
。 等待態(tài) :等待某個(gè)事件的完成;
。 就緒態(tài) :等待系統(tǒng)分配處理器以便運(yùn)行;
。 運(yùn)行態(tài) :占有處理器正在運(yùn)行。
2、進(jìn)程的狀態(tài)變化
進(jìn)程在執(zhí)行中狀態(tài)會(huì)不斷地改變,每個(gè)進(jìn)程在任何時(shí)刻總是處于上述三種基本狀態(tài)的某一種基本狀態(tài),進(jìn)程狀態(tài)之間轉(zhuǎn)換關(guān)系如下圖所示:
運(yùn)行態(tài)→等待態(tài) 往往是由于等待外設(shè),等待主存等資源分配或等待人工干預(yù)而引起的。
等待態(tài)→就緒態(tài) 則是等待的條件已滿足,只需分配到處理器后就能運(yùn)行。
運(yùn)行態(tài)→就緒態(tài) 不是由于自身原因,而是由外界原因使運(yùn)行狀態(tài)的進(jìn)程讓出處理器,這時(shí)候就變成就緒態(tài)。例如時(shí)間片用完,或有更高優(yōu)先級(jí)的進(jìn)程來搶占處理器等。
就緒態(tài)→運(yùn)行態(tài) 系統(tǒng)按某種策略選中就緒隊(duì)列中的一個(gè)進(jìn)程占用處理器,此時(shí)就變成了運(yùn)行態(tài)。
進(jìn)程 有 四個(gè)基本屬性 :
。多態(tài)性 從誕生、運(yùn)行,直至消滅。
。多個(gè)不同的進(jìn)程可以包括相同的程序
。三種基本狀態(tài) 它們之間可進(jìn)行轉(zhuǎn)換
。并發(fā)性 并發(fā)執(zhí)行的進(jìn)程輪流占用處理器
四、進(jìn)程控制塊( 領(lǐng)會(huì) )
1、 進(jìn)程控制塊 的基本內(nèi)容。 通常進(jìn)程控制塊包含四類信息:
。標(biāo)志信息 含唯一的進(jìn)程名
。說明信息 有進(jìn)程狀態(tài)、等待原因、進(jìn)程程序存放位置和進(jìn)程數(shù)據(jù)存放位置
?,F(xiàn)場信息 包括通用、控制和程序狀態(tài)字寄存器的內(nèi)容
。管理信息 存放程序優(yōu)先數(shù)和隊(duì)列指針
2、 進(jìn)程控制塊 的作用
進(jìn)程控制塊(Process Control Block,簡稱PCB),是操作系統(tǒng)為進(jìn)程分配的用于標(biāo)志進(jìn)程,記錄各進(jìn)程執(zhí)行情況的。進(jìn)程控制塊是進(jìn)程存在的標(biāo)志,它記錄了進(jìn)程從創(chuàng)建到消亡動(dòng)態(tài)變化的狀況,進(jìn)程隊(duì)列實(shí)際也是進(jìn)程控制塊的鏈接。操作系統(tǒng)利用進(jìn)程控制塊對(duì)進(jìn)程進(jìn)行控制和管理。
進(jìn)程控制塊的作用有:
(1)記錄進(jìn)程的有關(guān)信息,以便操作系統(tǒng)的進(jìn)程調(diào)度程序?qū)M(jìn)程進(jìn)行調(diào)度。這些信息包括標(biāo)志信息、說明信息、現(xiàn)場信息和管理信息等;
(2)標(biāo)志進(jìn)程的存在,進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志
五、進(jìn)程隊(duì)列( 領(lǐng)會(huì) )
1、 進(jìn)程隊(duì)列 的鏈接。
在多道程序設(shè)計(jì)的系統(tǒng)中往往會(huì)同時(shí)創(chuàng)建多個(gè) 進(jìn)程 .在單處理器的情況下,每次只能讓一個(gè)進(jìn)程運(yùn)行,其他的進(jìn)程處于就緒狀態(tài)或等待狀態(tài)。為了便于管理,經(jīng)常把處于相同狀態(tài)的進(jìn)程鏈接在一起,稱“進(jìn)程隊(duì)列”,由于 進(jìn)程控制塊 能標(biāo)志進(jìn)程的存在和動(dòng)態(tài)刻畫進(jìn)程的特性,因此, 進(jìn)程隊(duì)列 可以用 進(jìn)程控制塊 的連接來形成。鏈接的方式有兩種:單向鏈接和雙向鏈接。
2、 進(jìn)程基本隊(duì)列
就緒隊(duì)列 :由若干就緒進(jìn)程按一定次序鏈接起來的隊(duì)列。
等待隊(duì)列 :把等待資源或等待某些事件的進(jìn)程排列的隊(duì)列
3、進(jìn)程的入隊(duì)和出隊(duì)。
出隊(duì)和入隊(duì) :當(dāng)發(fā)生的某個(gè)事件使一個(gè)進(jìn)程的狀態(tài)發(fā)生變化時(shí),這個(gè)進(jìn)程就要退出所在的某個(gè)隊(duì)列而排入到另一個(gè)隊(duì)列中去。
出隊(duì) :一個(gè)進(jìn)程從所在的隊(duì)列退出的操作稱為出隊(duì)
入隊(duì) :一個(gè)進(jìn)程排入到一個(gè)指定的隊(duì)列的操作稱為入隊(duì)。
系統(tǒng)中負(fù)責(zé)進(jìn)程入隊(duì)和出隊(duì)的工作稱為隊(duì)列管理。
無論單向鏈接還是雙向鏈接,解決入,出隊(duì)問題,都是首先找到該隊(duì)列的隊(duì)首指針,沿鏈找出要入隊(duì)的進(jìn)程以及它要插入的位置,或找出要出隊(duì)的進(jìn)程,然后修改本進(jìn)程指針(入隊(duì)情況)和相鄰進(jìn)程的有關(guān)指針值即可。
六、可再入程序( 識(shí)記 )
(1) 什么是 可再入程序 . 一個(gè)能被 多個(gè)用戶同時(shí)調(diào)用 的程序稱做“ 可再入 ”的程序。
(2) 可再入程序的性質(zhì)。
可再入程序必須是純代碼,在執(zhí)行時(shí)自身不改變;
一個(gè)可再入程序要求調(diào)用者提供工作區(qū),以保證程序以同樣方式為各用戶服務(wù)。
編譯程序 和 操作系統(tǒng)程序 通常都是“可再入”程序,能同時(shí)被不同用戶調(diào)用而構(gòu)成不同的進(jìn)程。
七、中斷及中斷響應(yīng)( 領(lǐng)會(huì) )
1、 中斷 的定義。
一個(gè)進(jìn)程占有處理器運(yùn)行時(shí),由于自身或者外界的原因(出現(xiàn)了事件)使運(yùn)行被打斷,讓操作系統(tǒng)處理所出現(xiàn)的事件,到適當(dāng)?shù)臅r(shí)候再讓被打斷的進(jìn)程繼續(xù)運(yùn)行,這個(gè)過程稱為“中斷”。
2、 中斷 的類型。
從中斷事件的性質(zhì)出發(fā),中斷可以分為兩大類:
。 強(qiáng)迫性中斷事件 包括硬件故障中斷,程序性中斷,外部中斷和輸入輸出中斷等
。 自愿性中斷事件 是由正在運(yùn)行的進(jìn)程執(zhí)行一條訪管指令用以請(qǐng)求系統(tǒng)調(diào)用而引起的中斷,這種中斷也稱為“訪管中斷”。
自愿中斷 的斷點(diǎn)是確定的,而 強(qiáng)迫性中斷 的斷點(diǎn)可能發(fā)生在任何位置。
3、中斷的響應(yīng)和處理。
中斷響應(yīng) (硬件即中斷裝置操作)
處理器每執(zhí)行一條指令后,硬件的中斷位置立即檢查有無中斷事件發(fā)生,若有中斷事件發(fā)生,則暫停現(xiàn)行進(jìn)程的執(zhí)行,而讓操作系統(tǒng)的中斷處理程序占用處理器,這一過程稱為“中斷響應(yīng)”。
中斷響應(yīng)過程中,中斷裝置要做以下三項(xiàng)工作:
是否有中斷事件發(fā)生
判別自愿性中斷,只要檢查操作碼是否為訪管指令。
判別強(qiáng)迫性中斷,則要檢查中斷寄存器內(nèi)容。若為0,則無中斷;若非0,則表示有中斷事件發(fā)生。
若有中斷發(fā)生,保護(hù)斷點(diǎn)信息
每個(gè)程序都有一個(gè)程序狀態(tài)字(PSW)來反映本狀態(tài)的執(zhí)行狀態(tài),如基本狀態(tài)、中斷碼和中斷屏蔽位等內(nèi)容。處理器設(shè)有一個(gè)“程序狀態(tài)字寄存器”用來存放當(dāng)前運(yùn)行程序的PSW.程序狀態(tài)字可分為當(dāng)前PSW、舊PSW和新PSW.
當(dāng)出現(xiàn)中斷事件后,把被中斷進(jìn)程的PSW保存為舊PSW,即完成斷點(diǎn)信息保護(hù)。
啟動(dòng)操作系統(tǒng)的中斷處理程序工作
中斷裝置通過“交換PSW”過程完成此項(xiàng)任務(wù),即把出現(xiàn)的中斷事件存放到當(dāng)前PSW中斷碼位置,然后把該當(dāng)前PSW保存為舊PSW,再把操作系統(tǒng)中斷處理程序的新PSW送到程序狀態(tài)字寄存器中,成為當(dāng)前的PSW.
中斷處理 ( 軟件即操作系統(tǒng)操作 )
操作系統(tǒng)的中斷處理程序?qū)χ袛嗍录M(jìn)行處理時(shí),大致要做三方面的工作:
保護(hù)被中斷進(jìn)程的現(xiàn)場信息
把中斷時(shí)的通用寄存器,控制寄存器內(nèi)容及舊PSW保存到被中斷進(jìn)程的進(jìn)程控制塊中。
分析中斷原因
根據(jù)舊PSW的中斷碼可知發(fā)生該中斷的具體原因。
處理發(fā)生的中斷事件
一般只做一些簡單處理,在多數(shù)情況下把具體的處理交給其他程序模塊去做。
八、 中斷優(yōu)先級(jí)和中斷屏蔽( 識(shí)記 )
1、 中斷優(yōu)先級(jí) 是硬件設(shè)計(jì)時(shí)確定的。中斷裝置按預(yù)定的順序來響應(yīng)同時(shí)出現(xiàn)的中斷事件,這個(gè)預(yù)定的順序稱為“中斷優(yōu)先級(jí)”。中斷優(yōu)先級(jí)是按中斷事件的重要性和緊迫程度來確定的 ,是由硬件設(shè)計(jì)時(shí)固定下來的。一般情況下,優(yōu)先級(jí)的高低順序依次為: 硬件故障中斷 、 自愿中斷 、 程序性中斷 , 外部中斷和輸入輸出中斷 .
2、中斷的嵌套處理
3、中斷屏蔽的作用。中斷優(yōu)先級(jí)只是規(guī)定了中斷裝置響應(yīng)同時(shí)出現(xiàn)的中斷的次序,當(dāng)中斷裝置響應(yīng)了某個(gè)中斷后中斷處理程序在進(jìn)行處理時(shí),中斷裝置也可能去響應(yīng)另一個(gè)中斷事件。因此會(huì)出現(xiàn)優(yōu)先級(jí)低的中斷事件的處理打斷優(yōu)先級(jí)高的中斷事件的處理,使得中斷事件的處理順序與響應(yīng)順序不一致,而且會(huì)形成多重嵌套處理,使多現(xiàn)場保護(hù)、程序返回等工作變的復(fù)雜。
中斷屏蔽技術(shù)就是為了解決上述問題而提出的在一個(gè)中斷處理沒有結(jié)束之前不響應(yīng)其他中斷事件,或者只響應(yīng)比當(dāng)前級(jí)別高的中斷事件。于是,當(dāng)中斷裝置檢查到有中斷事件后,便去查看PSW中中斷屏蔽標(biāo)志,如果沒有屏蔽就響應(yīng)該中斷;否則,暫時(shí)不響應(yīng)該中斷,待屏蔽標(biāo)志消除后再響應(yīng)。自愿中斷是不能屏蔽的。
九、 進(jìn)程調(diào)度( 領(lǐng)會(huì) )
1、進(jìn)程調(diào)度的職責(zé)。按選定的進(jìn)程調(diào)度算法從就緒隊(duì)列中選擇一個(gè)進(jìn)程,讓它占用處理器。
2、選擇進(jìn)程調(diào)度算法的幾個(gè)準(zhǔn)則:
。提高處理器利用率
。增大吞吐量
。減少等待時(shí)間
??s短響應(yīng)時(shí)間
3、進(jìn)程調(diào)度的常用算法: 先來先服務(wù) 、 優(yōu)先數(shù)法 、 輪轉(zhuǎn)法 、 分級(jí)調(diào)度 .
先來先服務(wù)調(diào)度算法 該算法按進(jìn)程進(jìn)入就緒隊(duì)列的先后次序選擇可以占用處理器的進(jìn)程。
優(yōu)先數(shù)調(diào)度算法 對(duì)每個(gè)進(jìn)程確定一個(gè)優(yōu)先數(shù),該算法總是讓優(yōu)先數(shù)最高的進(jìn)程先使用處理器。對(duì)具有相同優(yōu)先數(shù)的進(jìn)程,再采用先來先服務(wù)的次序分配處理器。系統(tǒng)常以任務(wù)的緊迫性和系統(tǒng)效率等因素確定進(jìn)程的優(yōu)先數(shù)。進(jìn)程的優(yōu)先數(shù)可以固定的,也可隨進(jìn)程執(zhí)行過程動(dòng)態(tài)變化。 一個(gè)高優(yōu)先數(shù)的進(jìn)程占用處理器后,系統(tǒng)處理該進(jìn)程時(shí)有兩種方法,一是“非搶占式”,另一種是“可搶占式”。前者是此進(jìn)程占用處理器后一直運(yùn)行到結(jié)束,除非本身主動(dòng)讓出處理器,后者則是嚴(yán)格保證任何時(shí)刻總是讓優(yōu)先數(shù)最高的進(jìn)程在處理器上運(yùn)行。
時(shí)間片輪轉(zhuǎn)調(diào)度法 把規(guī)定進(jìn)程一次使用處理器的最長時(shí)間稱為“時(shí)間片”。時(shí)間片輪轉(zhuǎn)調(diào)度算法讓就緒進(jìn)程按就緒的先后次序排成隊(duì)列,每次總選擇該隊(duì)列中第一個(gè)進(jìn)程占用處理器,但規(guī)定只能使用一個(gè)時(shí)間片,如該進(jìn)程尚未完成,則排入隊(duì)尾,等待下一個(gè)供它使用的時(shí)間片。各個(gè)進(jìn)程就這樣輪轉(zhuǎn)運(yùn)行。時(shí)間片輪轉(zhuǎn)算法經(jīng)常用于分時(shí)操作系統(tǒng)中。
分級(jí)調(diào)度算法 由系統(tǒng)設(shè)置多個(gè)就緒隊(duì)列,每個(gè)就緒隊(duì)列中的進(jìn)程按時(shí)間片輪轉(zhuǎn)法占用處理器,這就是分級(jí)調(diào)度算法。
4、 進(jìn)程的切換 進(jìn)程調(diào)度將從就緒隊(duì)列中另選一個(gè)進(jìn)程占用處理器,使一個(gè)進(jìn)程讓出處理器,由另一個(gè)進(jìn)程占用處理器的過程稱“進(jìn)程切換”。
若有一個(gè)進(jìn)程從運(yùn)行態(tài)變成等待態(tài),或完成工作后就撤消,則必定會(huì)發(fā)生進(jìn)程切換。若一個(gè)進(jìn)程從運(yùn)行態(tài)或等待態(tài)變成就緒態(tài),則不一定發(fā)生進(jìn)程切換。