




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
11/18/2022第三章
進程管理11/10/2022第三章進程管理概述進程的描述進程控制線程進程互斥和同步進程間通信死鎖問題進程其他方面的舉例為了描述程序在并發(fā)執(zhí)行時對系統(tǒng)資源的共享,需要一個描述程序執(zhí)行時動態(tài)特征的概念,這就是進程。本章將討論進程概念、進程控制和進程間關(guān)系。概述進程互前趨圖:是一個有向無循環(huán)圖。
前趨圖用于描述進程之間執(zhí)行的前后關(guān)系。
圖中的每個結(jié)點可用于描述一個程序段或進程,乃至一條語句;結(jié)點間的有向邊則用于表示兩個結(jié)點之間存在的偏序或前趨關(guān)系“→”。節(jié)點概述:前趨圖:是一個有向無循環(huán)圖。前趨圖用于描述進程之間執(zhí)行的前圖2-1(a)中存在著這樣的前趨關(guān)系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9圖2-1前趨圖圖2-1(a)中存在著這樣的前趨關(guān)系:圖2-1前趨圖或表示為:P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9)}應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-1(b)中卻有著下述的前趨關(guān)系:S2→S3,S3→S2
圖2-1前趨圖或表示為:應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-1(3.1.1程序的順序執(zhí)行3.1.1程序的順序執(zhí)行圖2-2程序的順序執(zhí)行S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;試想S1、S2、S3三條語句以何順序執(zhí)行?3.1.1程序的順序執(zhí)行圖2-2程序的順序執(zhí)行S1:a∶=x+y;試想S程序順序執(zhí)行時的特征
順序性:按照程序結(jié)構(gòu)所指定的次序(2)封閉性(運行時候獨占處理機資源,運行結(jié)果不受外界影響)-程序可再現(xiàn)性:(3)可再現(xiàn)性(初始條件相同,結(jié)果相同)程序順序執(zhí)行時的特征順序性:按照程序結(jié)構(gòu)所指定的次序3.1.2程序的并發(fā)執(zhí)行及其特征
3.1.2程序的并發(fā)執(zhí)行及其特征3.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的目的:提高計算機的處理能力提高資源利用率分為兩種形式:多道程序環(huán)境下的多道程序的并發(fā)執(zhí)行在某道程序的幾個程序段中,包含可同時執(zhí)行或可顛倒順序執(zhí)行的代碼。3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行定義:程序的并發(fā)執(zhí)行是指一組在邏輯上互相獨立的程序或程序段在執(zhí)行時間上客觀上互相重疊,即一個程序或程序段的執(zhí)行尚未結(jié)束,另一個程序(段)的執(zhí)行已經(jīng)開始的執(zhí)行方式。并發(fā):在一段時間內(nèi)的同時并行并行:在同一物理時刻的同時3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請求帶輸入啟動帶磁帶輸入結(jié)束中斷中斷處理請求磁盤輸入啟動盤結(jié)束中斷中斷處理CPU外設(shè)請求盤輸入啟動盤,調(diào)度B請求帶輸入啟動帶結(jié)束中斷中斷處理調(diào)度A結(jié)束中斷中斷處理調(diào)度B時間t用戶程序監(jiān)督程序磁盤設(shè)備磁帶設(shè)備用戶程序A用戶程序B監(jiān)督程序磁盤設(shè)備磁帶設(shè)備3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請求帶輸入啟動帶磁帶輸入3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時的前趨圖在該例中存在下述前趨關(guān)系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之間,可以并發(fā)執(zhí)行。如何實現(xiàn)并發(fā)執(zhí)行?3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時的前趨圖在對于具有下述四條語句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b請畫出前趨關(guān)系圖。對于具有下述四條語句的程序段:3.1.2程序并發(fā)執(zhí)行時的特征
間斷性(相互制約性)-“走走停停”,一個程序可能走到中途停下來,失去原有的時序關(guān)系;失去封閉性:多個程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個程序來改變,致使程序的運行已失去了封閉性。如:一個程序?qū)懙酱鎯ζ髦械臄?shù)據(jù)可能被另一個程序修改,失去原有的不變特征。不可再現(xiàn)性:程序在并發(fā)執(zhí)行時,由于失去了封閉性,也將導(dǎo)致失去其可再現(xiàn)性下面看個小例子:3.1.2程序并發(fā)執(zhí)行時的特征間斷性(相互制約性)-“例如,有兩個循環(huán)程序A和B,它們共享一個變量N。程序A每執(zhí)行一次時,都要做N∶=N+1操作;程序B每執(zhí)行一次時,都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運行。(1)N∶=N+1在Print(N)和N∶=0之前,此時得到的N值分別為n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此時得到的N值分別為n,0,1。(3)N∶=N+1在Print(N)和N∶=0之間,此時得到的N值分別為n,n+1,0。例如,有兩個循環(huán)程序A和B,它們共享一個變量N結(jié)論:程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結(jié)果已經(jīng)和并發(fā)執(zhí)行速度有關(guān),從而使程序失去了可再現(xiàn)性,亦即,程序經(jīng)過多次執(zhí)行后,雖然他們執(zhí)行時的環(huán)境和初始條件相同,但得到的結(jié)果卻不相同。結(jié)論:程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結(jié)果已經(jīng)和并
順序執(zhí)行:并發(fā)執(zhí)行:程序具有封閉性程序失去封閉性獨享資源共享資源(互為存在條件)可再現(xiàn)性程序與“計算”不再一一對應(yīng)有相互制約操作系統(tǒng)湯子英課件第二章進程管理高中信息技術(shù)課件教案人教版3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行
——程序的并發(fā)執(zhí)行并發(fā)執(zhí)行的條件:達到封閉性和可再現(xiàn)性
并發(fā)執(zhí)行失去封閉性的原因是共享資源的影響,去掉這種影響即可。1966年,由Bernstein給出并發(fā)執(zhí)行的條件。(這里沒有考慮執(zhí)行速度的影響。)。程序P(i)針對的讀變量集和寫變量集為R(i)和W(i)。任意兩個程序P(i)和P(j)可并發(fā)的條件:R(i)W(j)=W(i)R(j)=保證一個程序的兩次讀之間數(shù)據(jù)不變化W(i)W(j)=保證寫的結(jié)果不丟掉現(xiàn)在的問題是這個條件不好檢查。怎么辦?3.1概述3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行
——程序的并發(fā)執(zhí)行程序活動不再處于一個封閉系統(tǒng)中,呈現(xiàn)了獨立性、并發(fā)性、動態(tài)性以及它們之間的相互制約性。“程序”這個靜態(tài)概念已經(jīng)不能如實地反映程序活動的這些特征,為此,引入“進程”這一動態(tài)概念來描述系統(tǒng)和用戶的程序活動。程序進程3.1概述程序活動不再處于一個封閉系統(tǒng)中,呈現(xiàn)了獨立性、并3.1概述3.1.2進程的定義進程是程序的一次執(zhí)行;一個具有一定獨立功能的程序在一個數(shù)據(jù)集合上的一次動態(tài)執(zhí)行過程。簡言之,進程是程序的一次執(zhí)行活動進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位;進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動;3.1概述3.1概述3.1.2進程的定義——進程的特征動態(tài)性:進程對應(yīng)程序的執(zhí)行進程是動態(tài)產(chǎn)生:創(chuàng)建運行消亡進程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換獨立性:各進程的地址空間相互獨立,除非采用進程間通信手段;并發(fā)性:指多個進程實體同存于內(nèi)存中,且能在一段時間內(nèi)同時運行;異步性:每個進程都以其相對獨立的不可預(yù)知的速度向前推進;結(jié)構(gòu)化:進程=代碼段+數(shù)據(jù)段+PCB;3.1概述3.1概述3.1.2進程與程序的區(qū)別進程是動態(tài)的,程序是靜態(tài)的:炒菜菜譜進程是暫時的,程序的永久的:進程是一個狀態(tài)變化的過程,程序可長久保存。進程與程序的組成不同:進程的組成包括程序、數(shù)據(jù)和進程控制塊(即進程狀態(tài)信息)。進程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行,一個程序可對應(yīng)多個進程;通過調(diào)用關(guān)系,一個進程可包括多個程序。進程具有并行特征,程序沒有。進程是競爭計算機資源的基本單位。3.1概述程序與進程的類比
程序進程唱歌的曲譜或音樂樂器的樂譜
演出或演奏
劇本
演出
火車
列車
程序與進程的類比
程序進程唱歌的1、判斷題:進程是一個程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進程對應(yīng)不同的程序。分析:進程是程序在某數(shù)據(jù)集上得一次執(zhí)行,但是不同進程可以對應(yīng)同一程序。2、程序順序執(zhí)行與并發(fā)執(zhí)行有什么不同?3、用戶程序必須在進程中運行。正確4、判斷題:兩次打開Word字處理程序,編輯同一篇文章,因為程序一樣(Word2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運行的這兩個Word字處理程序是同一個進程。錯誤,運行的是2個不同的進程1、判斷題:進程是一個程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進3.1概述3.1.2進程的定義——進程與程序的區(qū)別用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)步…..線程線程…..進程進程…..3.1概述用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)3.2.1進程的組成
進程=程序+數(shù)據(jù)+進程控制塊PCB
有人把這三部分稱為”進程映像”.程序是進程的不可缺少的組成部分;如果一個程序段允許被共享,則它應(yīng)該是可重入的,或純代碼段數(shù)據(jù)是進程處理的對象進程控制塊是進程的控制結(jié)構(gòu),包含了進程的描述信息、控制信息和資源信息以及現(xiàn)場保護區(qū),是進程的唯一標識,系統(tǒng)通過PCB管理和控制進程。
通常的程序是不能并發(fā)執(zhí)行的,為使程序能并發(fā)執(zhí)行,應(yīng)為之配置一進程控制塊,即PCB;所謂創(chuàng)建進程是指創(chuàng)建進程實體中的PCB,撤銷亦如此。3.2.1進程的組成3.2進程的描述3.2.2進程控制塊PCB
(ProcessControlBlock)進程控制塊是由OS維護的用來記錄進程相關(guān)信息和管理進程而設(shè)置的一個專門的數(shù)據(jù)結(jié)構(gòu)包含了進程的描述信息、控制信息和資源信息以及現(xiàn)場保護區(qū)PCB是進程動態(tài)特性的集中反映系統(tǒng)通過PCB感知進程的存在,通過PCB中所包含的各項變量的變化,掌握進程的狀態(tài)以達到控制進程活動的目的3.2進程的描述3.2進程的描述3.2.2進程控制塊PCB
(ProcessControlBlock)PCB結(jié)構(gòu)的全部或部分常駐內(nèi)存;PCB隨進程的創(chuàng)建而填寫,隨進程的撤消而釋放,有生命周期;系統(tǒng)利用PCB來控制和管理進程,所以PCB是系統(tǒng)感知進程存在的唯一標志進程與PCB是一一對應(yīng)的3.2進程的描述3.2.3進程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進程標識符:內(nèi)部進程標識符(processID),唯一,通常是一個整數(shù);進程名(外部標識符),通?;诳蓤?zhí)行文件名(不唯一);用戶標識符(userID);進程組關(guān)系(processgroup)進程控制信息:當(dāng)前狀態(tài);優(yōu)先級(priority);代碼執(zhí)行入口地址;程序的外存地址;運行統(tǒng)計信息(執(zhí)行時間、頁面調(diào)度);進程間同步和通信;阻塞原因進程調(diào)度信息:進程狀態(tài)、進程優(yōu)先級、資源信息等處理機狀態(tài):寄存器值(通用、程序計數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.2.3進程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進程標識符:3.2.4PCB的組織方式鏈表:同一狀態(tài)的進程其PCB成一鏈表,多個狀態(tài)對應(yīng)多個不同的鏈表各狀態(tài)的進程形成不同的鏈表:就緒鏈表、阻塞鏈表索引表:同一狀態(tài)的進程歸入一個index表(由index指向PCB),多個狀態(tài)對應(yīng)多個不同的index表各狀態(tài)的進行形成不同的索引表:就緒索引表、阻塞索引表3.2.4PCB的組織方式鏈表:同一狀態(tài)的進程其PCB成OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。簡單題:進程控制塊的作用(要擴展)?判斷題:進程控制塊是進程存在的唯一標志。OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。運行Running就緒Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——進程的三種基本狀態(tài)基本狀態(tài)間的轉(zhuǎn)換運行就緒等待DispatchTimeoutEventW圖2-5進程的三種基本狀態(tài)及其轉(zhuǎn)換(教材講5種)
結(jié)束新進程接納完成圖2-5進程的三種基本狀態(tài)及其轉(zhuǎn)換結(jié)束新進程接納完成作業(yè)后備隊列進程就緒隊列外存內(nèi)存作業(yè)調(diào)度一些處理器(CPU)阻塞隊列阻塞隊列處理機調(diào)度器(進程調(diào)度):是操作系統(tǒng)中的一段代碼,它完成如下功能:1)把處理機從一個進程切換到另一個進程;2)防止某進程獨占處理機作業(yè)后備隊列進程就緒隊列外存內(nèi)存作業(yè)調(diào)度3.2.5進程的三種基本狀態(tài)
1)就緒(Ready)狀態(tài):已分配到除CPU以外的所有必要的資源,只要能再獲得處理機,便可立即執(zhí)行的狀態(tài)。多個排成一隊稱為就緒隊列。2)執(zhí)行狀態(tài):指進程已獲得處理機,其程序正在執(zhí)行;在單處理機系統(tǒng)中,只能有一個進程處于執(zhí)行狀態(tài);在多處理機系統(tǒng)中,則可能多個進程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài):進程因發(fā)生某事件(如請求I/O、申請緩沖空間等)而暫停執(zhí)行時的狀態(tài),亦即進程的執(zhí)行受到阻塞,故稱這種暫停狀態(tài)為阻塞狀態(tài),有時也稱為“等待”狀態(tài)或“睡眠”狀態(tài)。通常將處于阻塞狀態(tài)的進程排成一個隊列,稱為阻塞隊列。在有的系統(tǒng)中,按阻塞原因的不同而將處于阻塞狀態(tài)的進程排成多個隊列。3.2.5進程的三種基本狀態(tài)1)就緒(Ready)狀態(tài):3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——進程的三種基本狀態(tài)
在進程運行過程中,由于進程自身進展情況及外界環(huán)境的變化,這三種基本狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換
就緒運行:調(diào)度程序選擇一個新的進程運行
運行就緒:運行進程用完了時間片運行進程被中斷,因為一高優(yōu)先級進程處于就緒狀態(tài)
運行等待:當(dāng)一進程等待某一事件的發(fā)生時,如請求系統(tǒng)服務(wù)無新工作可做
等待就緒:當(dāng)所等待的事件發(fā)生時初始化I/O且必須等待結(jié)果等待某一進程提供輸入(IPC)3.2進程的描述初始化I/O且必須等待結(jié)果3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——五狀態(tài)進程模型RunningNewExitReadyBlockedCreateAdmitDispatchTimeoutReleaseEventWaitEventOccurs3.2進程的描述RunningNewExitReadyBl五狀態(tài)進程模型(單隊列結(jié)構(gòu))AdmitReadyQueue就緒隊列
DispatchTime-out超時EventWaitReleaseCPUBlockedQueue等待隊列EventOccurs提交調(diào)度Processor釋放等待事件事件發(fā)生AdmitReadyQueue就緒隊列Dispatc五狀態(tài)進程模型(多隊列結(jié)構(gòu))AdmitReadyQueueDispatchTime-outReleaseProcessorEvent1WaitEvent1QueueEvent1OccursEvent2WaitEvent2QueueEvent2OccursAdmitReadyQueueDispatchTime-o3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)創(chuàng)建狀態(tài):創(chuàng)建(新new)狀態(tài)
OS已完成為創(chuàng)建一進程所必要的工作已構(gòu)造了進程標識符已創(chuàng)建了管理進程所需的表格終止?fàn)顟B(tài)(Exit)終止后進程移入該狀態(tài)它不再有執(zhí)行資格表格和其它信息暫時保留實用程序為了分析性能和利用率,可能要提取程序的歷史信息掛起狀態(tài):把一個進程從內(nèi)存轉(zhuǎn)到外存3.2進程的描述3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)導(dǎo)致進程創(chuàng)建的原因批處理環(huán)境中,選擇一新作業(yè)即將進入內(nèi)存執(zhí)行交互環(huán)境中,新用戶登錄到系統(tǒng)操作系統(tǒng)因提供一項服務(wù)而創(chuàng)建。如:用戶請求打印一個文件,OS可創(chuàng)建嚴格管理打印的進程,使請求進程可繼續(xù)執(zhí)行,與完成打印任務(wù)的時間無關(guān)由現(xiàn)有進程生成,父進程子進程3.2進程的描述3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)導(dǎo)致終止進程的原因含一個HALT指令或用于終止的OS顯式服務(wù)調(diào)用分時系統(tǒng)中,用戶的行為可指示終止,如:用戶退出系統(tǒng)或關(guān)閉自己的終端,該用戶的進程將被終止PC機環(huán)境中,用戶結(jié)束一應(yīng)用程序出現(xiàn)某些錯誤時,如,I/O失敗,無效指令等父進程可請求它的某個子進程終止父進程終止,OS自動終止所有后代進程3.2進程的描述3.2.5掛起進程模型
這個問題的引入是由于進程優(yōu)先級的引入,一些低優(yōu)先級進程可能等待較長時間,從而被對換至外存。目的是:提高處理機效率:就緒進程表為空時,OS將阻塞進程從內(nèi)存中“掛起”到磁盤的“掛起隊列”,再從該隊列選另一進程進入內(nèi)存,或接受一個新進程的請求。為運行進程提供足夠內(nèi)存:資源緊張時,暫停某些進程,如:CPU繁忙(或?qū)崟r任務(wù)執(zhí)行),內(nèi)存緊張用于調(diào)試:在調(diào)試時,掛起被調(diào)試進程(從而對其地址空間進行讀寫)3.2.5掛起進程模型3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——單掛起進程模型RunningNewExitReadyBlockedBlockedSuspendAdmitDispatchTimeoutReleaseEventWaitSuspendActivateEventOccurs3.2進程的描述RunningNewExitReadyBl3.2.5進程的狀態(tài)及其轉(zhuǎn)換——雙掛起進程模型RunningReadySuspendExitReadyBlockedBlockedSuspendNewAdmitAdmitSuspendReleaseDispatchTimeoutActivateSuspendEventWaitActivateSuspendEventOccursEventOccurs外存內(nèi)存3.2.5進程的狀態(tài)及其轉(zhuǎn)換——雙掛起進程模型Runnin3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——掛起進程模型
掛起進程模型的狀態(tài)需考慮二方面:是否就緒,是否在內(nèi)存就緒狀態(tài)(Ready):進程在內(nèi)存且可立即進入運行狀態(tài);阻塞狀態(tài)(Blocked):進程在內(nèi)存,并等待某事件的出現(xiàn);就緒掛起狀態(tài)(Ready,suspend):進程在外存,但只要進入內(nèi)存,即可運行;阻塞掛起狀態(tài)(Blocked,suspend):進程在外存并等待某事件的出現(xiàn);3.2進程的描述3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——掛起進程模型狀態(tài)間的轉(zhuǎn)換掛起(Suspend):把一個進程從內(nèi)存轉(zhuǎn)到外存;可能有以下幾種情況:阻塞到阻塞掛起:沒有進程處于就緒狀態(tài)或就緒進程要求更多內(nèi)存資源時,會進行這種轉(zhuǎn)換,以納入新進程或運行就緒進程;就緒到就緒掛起:當(dāng)有高優(yōu)先級阻塞(系統(tǒng)認為會很快就緒的)進程和低優(yōu)先級就緒進程時,系統(tǒng)會選擇掛起低優(yōu)先級就緒進程;運行到就緒掛起:對搶先式分時系統(tǒng),當(dāng)有高優(yōu)先級阻塞掛起進程因事件出現(xiàn)而進入就緒掛起時,系統(tǒng)可能會把運行進程轉(zhuǎn)到就緒掛起狀態(tài);3.2進程的描述3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——掛起進程模型狀態(tài)間的轉(zhuǎn)換激活(Activate):把一個進程從外存轉(zhuǎn)到內(nèi)存;可能有以下幾種情況:就緒掛起到就緒:沒有就緒進程或掛起就緒進程優(yōu)先級高于就緒進程時,會進行這種轉(zhuǎn)換;阻塞掛起到阻塞:當(dāng)一個進程釋放足夠內(nèi)存時,系統(tǒng)會把一個高優(yōu)先級阻塞掛起(系統(tǒng)認為會很快出現(xiàn)所等待的事件)進程轉(zhuǎn)為阻塞狀態(tài);較少出現(xiàn)。3.2進程的描述3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——掛起進程模型狀態(tài)間的轉(zhuǎn)換事件出現(xiàn)(EventOccurs):進程等待的事件出現(xiàn);如:操作完成、申請成功等;可能的情況有:阻塞到就緒:針對內(nèi)存進程的事件出現(xiàn);阻塞掛起到就緒掛起:針對外存進程的事件出現(xiàn);收容(Admit):收容一個新進程,進入就緒狀態(tài)或就緒掛起狀態(tài)。各種狀態(tài)退出:被父進程終止或父進程本身終止。3.2進程的描述練習(xí)思考題如果系統(tǒng)中有N個進程,運行的進程最多幾個,最少幾個;就緒進程最多幾個最少幾個;等待進程最多幾個,最少幾個?有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么? 等待—運行;就緒—等待練習(xí)思考題自主設(shè)計題進程的3個基本狀態(tài):執(zhí)行、就緒、等待,其轉(zhuǎn)換標識分別為1、2、3、4(如圖)。編程模擬進程狀態(tài)轉(zhuǎn)換過程,要求:分別建立等待隊列和就緒隊列(單隊列、結(jié)構(gòu)不限),初始狀態(tài)時,1個進程處于執(zhí)行狀態(tài),7個進程在等待隊列中,7個進程在就緒隊列中。手工觸發(fā)任意一種轉(zhuǎn)換,顯示轉(zhuǎn)換發(fā)生后的執(zhí)行進程和兩個隊列的進程。執(zhí)行1234等待就緒自主設(shè)計題執(zhí)行1234等待就緒3.3進程控制的功能:完成進程狀態(tài)的轉(zhuǎn)換。原語(primitive)※:由若干條指令構(gòu)成的“原子操作(atomicoperation)”過程,作為一個整體而不可分割--要么全都完成,要么全都不做。許多系統(tǒng)調(diào)用就是原語。注意:系統(tǒng)調(diào)用并不都是原語。進程A調(diào)用read(),因無數(shù)據(jù)而阻塞,在read()里未返回。然后進程B調(diào)用read(),此時read()被重入。系統(tǒng)調(diào)用不一定一次執(zhí)行完并返回該進程,有可能在特定的點暫停,而轉(zhuǎn)入到其他進程。3.3進程控制的功能:完成進程狀態(tài)的轉(zhuǎn)換。原語(primi3.3進程控制3.3.2進程控制的主要原語——進程創(chuàng)建原語進程樹ABCDJFGHIEKLM進程樹是有向樹父子關(guān)系表示創(chuàng)建與被創(chuàng)建的關(guān)系父子關(guān)系不表示執(zhí)行的先后關(guān)系3.3進程控制ABCDJFGHIEKLM進程樹是有向樹3.3進程控制3.3.2進程控制的主要原語——進程創(chuàng)建原語子進程的創(chuàng)建的3種形式產(chǎn)生新進程不產(chǎn)生新進程復(fù)制現(xiàn)有進程的上下文fork(新進程的系統(tǒng)上下文會有不同)加載程序spawn(創(chuàng)建新進程并加載新程序)exec(加載新程序并覆蓋自身)3.3進程控制產(chǎn)生新進程不產(chǎn)生新進程復(fù)制現(xiàn)有進程的上下文f3.3進程控制3.3.2進程控制的主要原語——進程創(chuàng)建原語創(chuàng)建原語描述ProcedureCreate(n,S0,P0,M0,R0)Begini:=GetInternalName(n);i.id:=n;i.priority:=P0;/*初始化PCB*/i.CPU_State:=S0;i.Mainstore:=M0;i.resources:=R0;i.status:=Ready;j:=EP;i.parent:=j;/*插入家族隊列*/geny:=∧;geny:=i;i.sdata:=RQ;insert(RQ,i);/*插入就緒隊列*/End;查找PCB集合,返回PCB的內(nèi)部標識符i被創(chuàng)建進程的外部標識符處理機的初始狀態(tài)進程優(yōu)先級初始內(nèi)存數(shù)所需資源清單進程狀態(tài)有關(guān)的指針3.3進程控制ProcedureCreate(n,S03.3進程控制3.3.2進程控制的主要原語——進程創(chuàng)建原語進程創(chuàng)建需要的參數(shù):被創(chuàng)建進程的外部標識符n處理機的初始狀態(tài)S0(包括CPU的工作方式、進程起始地址及屏蔽碼等);進程優(yōu)先級P0;初始內(nèi)存數(shù)M0;其它所需資源清單R0
i.sdata是一個與進程狀態(tài)有關(guān)的指針。3.3進程控制3.3進程控制3.3.2進程控制的主要原語——進程撤銷原語Destroy也稱為“終止”或主程序返回:調(diào)用exit()可終止進程。釋放資源:釋放內(nèi)外存空間關(guān)閉所有打開文件釋放共享內(nèi)存段和各種鎖定lock3.3進程控制也稱為“終止”或主程序返回:調(diào)用exit()3.3進程控制3.3.2進程控制的主要原語——進程撤銷原語Destroy撤消原語的描述ProcedureDestroy(n)BeginSched:=false;i:=GetInternalName(n);Kill(i);ifSchedthenScheduler
elsecontinue;End;ProcedureKill(i)Beginifi.status=“Running”thenstop(i);Sched:=True;remove(i.sdata,i);forallS∈genydoKill(S);forallr∈Mainstore∪
i.resourcesdoRelease(r);Release(PCB(i))End;(Kill是可遞歸的)調(diào)用者提供的進程的外部標識如果進程正在運行,則立即停止其運行,并設(shè)置調(diào)度標志為真3.3進程控制ProcedureDestroy(n)Pr3.3進程控制3.3.2進程控制的主要原語——進程阻塞原語Block
阻塞原因:當(dāng)進程期待的某事件尚未出現(xiàn)時,該進程調(diào)用阻塞原語把自己阻塞起來。具體事件如下:請求系統(tǒng)服務(wù)啟動某種操作新數(shù)據(jù)尚未到達無新工作可做注意:由自己阻塞自己,但該進程的喚醒則是在該進程所期待的事件發(fā)生后,由“發(fā)現(xiàn)者”進程調(diào)用喚醒原語實現(xiàn)3.3進程控制3.3.2.進程阻塞過程
正在執(zhí)行的進程,當(dāng)發(fā)現(xiàn)上述某事件時,無法繼續(xù)執(zhí)行,于是進程調(diào)用阻塞原語block把自己阻塞。可見,進程的阻塞是進程自身的一種主動行為。進入block過程后,由于此時該進程還處于執(zhí)行狀態(tài),所以應(yīng)先立即停止執(zhí)行,把進程控制塊中的現(xiàn)行狀態(tài)由“執(zhí)行”改為阻塞,并將PCB插入阻塞隊列。如果系統(tǒng)中設(shè)置了因不同事件而阻塞的多個阻塞隊列,則應(yīng)將本進程插入到具有相同事件的阻塞(等待)隊列。最后,轉(zhuǎn)調(diào)度程序進行重新調(diào)度,將處理機分配給另一就緒進程,并進行切換。
3.3.2.進程阻塞過程3.3進程控制3.3.2進程控制的主要原語——進程阻塞原語Block阻塞進程的描述Procedureblock(r)Begini:=EP;stop(i);i.status:=“blocked”;i.sdata:=WQ(r);insert(WQ(r),i);scheduler;End;r為指向等待原因的對應(yīng)等待隊列的指針從執(zhí)行進程的指針獲得進程的內(nèi)部標識符i停止進程i進程調(diào)度程序3.3進程控制Procedureblock(r)r為指3.3進程控制3.3.2進程控制的主要原語——
進程喚醒原語Wakeup喚醒原因:進程等待的事件發(fā)生,等待隊列中的進程喚醒。喚醒進程的兩種方法:由系統(tǒng)進程喚醒。系統(tǒng)進程統(tǒng)一控制事件的發(fā)生,并將“事件發(fā)生”這一消息通知等待進程。等待的是公共資源。由事件發(fā)生進程喚醒。事件發(fā)生進程與被喚醒的進程是合作關(guān)系,等待私有資源。3.3進程控制3.3進程控制3.3.2進程控制的主要原語——進程喚醒原語Wakeup)喚醒原語的描述Procedurewakeup(n)Begini:=GetInternalName(n);remove(WQ(r),i);i.status:=“Ready”;i.sdata:=RQ;insert(RQ,i);continue;End;從相應(yīng)的等待隊列中摘下被喚醒的進程狀態(tài)置為“就緒態(tài)ready”插入就緒隊列喚醒進程返回或轉(zhuǎn)進程調(diào)度3.3進程控制Procedurewakeup(n)從相應(yīng)3.3.2進程控制的主要原語——掛起原語Suspend引起進程掛起的事件:掛起原語的執(zhí)行過程是:首先檢查被掛起進程的狀態(tài),若處于活動就緒狀態(tài),便將其改為靜止就緒;對于活動阻塞狀態(tài)的進程,則將之改為靜止阻塞。最后,若被掛起的進程正在執(zhí)行,則轉(zhuǎn)向調(diào)度程序重新調(diào)度。-或父進程請求將自己的某個子進程掛起,-系統(tǒng)將利用掛起原語suspend()將指定進程或處于阻塞狀態(tài)的進程掛起。-用戶進程請求將自己掛起;3.3.2進程控制的主要原語——掛起原語Suspend引3.3進程控制3.3.2進程控制的主要原語——掛起原語SuspendPrimitive掛起原語的描述procedureSuspend(n,a)/*掛起指定標識符n的Begin進程的進程原語*/i:=GetInternalName(n);/*參數(shù)a是用于保存該S:=i.status;進程PCB副本的內(nèi)存區(qū)*/ifS=“Running”thenstop(i);a:=copyPCB(i);ifS=“blockeda”theni.status:=“blockeds”elsei.status:=“readys”ifS=“Running”thenSchedulerelsecontinue;End;3.3進程控制procedureSuspend(n,a3.3進程控制3.3.2進程控制的主要原語——激活原語
Active進程的激活過程系統(tǒng)將利用激活原語active()將指定進程激活。激活原語先將進程從外存調(diào)入內(nèi)存,檢查該進程的現(xiàn)行狀態(tài),若是靜止就緒,便將之改為活動就緒;若為靜止阻塞便將之改為活動阻塞。3.3進程控制進程的激活過程3.3進程控制3.3.2進程控制的主要原語——激活原語
ActivePrimitive激活原語的描述procedureactive(n)/*n為進程標志符*/begini:=GetInternalName(n);i.status:=ifi.status=“readys”then“readya”else“blockeda”;ifi.status=“readya”thenscheduler;elsecontinueEnd;3.3進程控制procedureactive(n)例:NT線程的掛起和激活 NT中處理機的分配對象為線程,一個線程可被多次掛起和多次激活。在線程內(nèi)有一個掛起計數(shù)(suspendcount),掛起操作使該計數(shù)加1,激活操作將該計數(shù)減1;當(dāng)掛起計數(shù)為0時,線程恢復(fù)執(zhí)行。(1)掛起:WindowsNT中的SuspendThread可掛起指定的線程;DWORDSuspendThread(HANDLEhThread//handletothethread);(2)激活:WindowsNT中的ResumeThread可恢復(fù)指定線程的執(zhí)行;DWORDResumeThread(HANDLEhThread//identifiesthreadtorestart);例:NT線程的掛起和激活 NT中處理機的分配對象為線程,一例子NT_thread.cpp#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){ inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000); }}例子NT_thread.cpp#include<stdiovoidmain(void){cout<<"CreateThread"<<endl; //Createathread; DWORDIDThread; HANDLEhThread; hThread=CreateThread(NULL,//nosecurityattributes0,//usedefaultstacksize(LPTHREAD_START_ROUTINE)SubThread,//threadfunctionNULL,//nothreadfunctionargument0,//usedefaultcreationflags&IDThread);//returnsthreadidentifier
//Checkthereturnvalueforsuccess. if(hThread==NULL) cout<<"CreateThreaderror"<<endl;voidmain(void)
inti; for(i=0;i<5;i++) { cout<<"MainThread"<<i<<endl; if(i==1) {if(SuspendThread(hThread)==0xFFFFFFFF) {cout<<"Suspendthreaderror."<<endl; } else {cout<<"Suspendthreadisok."<<endl; } } if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) {cout<<"Resumethreaderror."<<endl;} else {cout<<"Resumethreadisok."<<endl; } }Sleep(4000); }} inti;運行結(jié)果CreateThreadMainThread0SubThread0SubThread1MainThread1Suspendthreadisok.MainThread2MainThread3Resumethreadisok.SubThread2SubThread3MainThread4SubThread4運行結(jié)果CreateThread例子NT_thread.cpp#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){ inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000);//改一下時間,輸出順序會有變化 }}此處是用戶自己的函數(shù),完成指定功能例子NT_thread.cpp#include<stvoidmain(void){cout<<"CreateThread"<<endl; //Createathread; DWORDIDThread; HANDLEhThread; hThread=CreateThread(NULL,//nosecurityattributes0,//usedefaultstacksize(LPTHREAD_START_ROUTINE)SubThread,//threadfunctionNULL,//nothreadfunctionargument0,//usedefaultcreationflags&IDThread);//returnsthreadidentifier
//Checkthereturnvalueforsuccess. if(hThread==NULL) cout<<"CreateThreaderror"<<endl;voidmain(void)
inti; for(i=0;i<5;i++) { cout<<"MainThread"<<i<<endl; if(i==1) {if(SuspendThread(hThread)==0xFFFFFFFF) {cout<<"Suspendthreaderror."<<endl; } else {cout<<"Suspendthreadisok."<<endl; } } if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) {cout<<"Resumethreaderror."<<endl;} else {cout<<"Resumethreadisok."<<endl; } }Sleep(4000);//改一下結(jié)果會有變化。 }} inti;運行結(jié)果CreateThreadMainThread0//輸出后。Sleep(4000)SubThread0//輸出后,Sleep(2000)SubThread1//輸出后,Sleep(2000)MainThread1//輸出后。Sleep(4000)Suspendthreadisok.MainThread2MainThread3Resumethreadisok.//輸出后。Sleep(4000)SubThread2SubThread3MainThread4SubThread4進程創(chuàng)建后只要通過進程調(diào)度獲得cpu,就自動執(zhí)行!運行結(jié)果CreateThread進程創(chuàng)建后只要通過進程調(diào)度獲3.4線程(THREAD)
引入線程的目的是簡化進程間的通信,以小的開銷來提高進程內(nèi)的并發(fā)程度。3.4線程(THREAD)引入線程的目的是簡化進程間的通信3.4.1線程的引入進程:資源分配單位(存儲器、文件)和CPU調(diào)度(分派)單位-未引入線程時。又稱為“任務(wù)(task)“線程:作為CPU調(diào)度單位,而引入線程后進程只作為其他資源分配單位。只擁有必不可少的資源,如:線程狀態(tài)、寄存器上下文和棧同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài)線程的優(yōu)點:減小并發(fā)執(zhí)行的時間和空間開銷(線程的創(chuàng)建、退出和調(diào)度),因此容許在系統(tǒng)中建立更多的線程來提高并發(fā)程度。線程的創(chuàng)建時間比進程短;線程的終止時間比進程短;同進程內(nèi)的線程切換時間比進程短;由于同進程內(nèi)線程間共享內(nèi)存和文件資源,可直接進行不通過內(nèi)核的通信;3.4.1線程的引入進程:資源分配單位(存儲器、文件)和C進程與線程的關(guān)系進程與線程的關(guān)系3.4.2線程的屬性
線程具有許多傳統(tǒng)進程所具有的特征,故又稱為輕型進程(1)輕型實體。(線程是進程中的一個實體)(2)獨立調(diào)度和分派的基本單位。在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調(diào)度和分派的基本單位。而把進程作為資源擁有的單位。由于線程很“輕’’,故線程的切換非常迅速且開銷小。(3)可并發(fā)執(zhí)行。
(4)共享進程資源。3.4.2線程的屬性線程具有許多傳統(tǒng)進程所具有的特征,故3.4.3OS對線程的實現(xiàn)方式內(nèi)核維護進程和線程的上下文信息;線程切換由內(nèi)核完成;一個線程發(fā)起系統(tǒng)調(diào)用而阻塞,不會影響其他線程的運行。時間片分配給線程,所以多線程的進程獲得更多CPU時間。依賴于OS核心,由內(nèi)核的內(nèi)部需求進行創(chuàng)建和撤銷,用來執(zhí)行一個指定的函數(shù)。WindowsNT和OS/2支持內(nèi)核線程;1)內(nèi)核線程(kernel-levelthread)3.4.3OS對線程的實現(xiàn)方式內(nèi)核維護進程和線程的上下文信2)用戶線程(user-levelthread)用戶線程的維護由應(yīng)用進程完成;內(nèi)核不了解用戶線程的存在;用戶線程切換不需要內(nèi)核特權(quán);用戶線程調(diào)度算法可針對應(yīng)用優(yōu)化;不依賴于OS核心,應(yīng)用進程利用線程庫提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制用戶線程。如:數(shù)據(jù)庫系統(tǒng)informix,圖形處理AldusPageMaker。調(diào)度由應(yīng)用軟件內(nèi)部進行,通常采用非搶先式和更簡單的規(guī)則,也無需用戶態(tài)/核心態(tài)切換,所以速度特別快。一個線程發(fā)起系統(tǒng)調(diào)用而阻塞,則整個進程在等待。時間片分配給進程,多線程則每個線程就慢。2)用戶線程(user-levelthread)用戶線程的
例:線程執(zhí)行時間對于只設(shè)置了用戶級線程的系統(tǒng),調(diào)度是以進程為單位的,在采用輪轉(zhuǎn)調(diào)度算法時,各個進程輪流執(zhí)行一個時間片,這對諸進程而言,看似公平的,但假如在A進程中包含了一個用戶級線程,而在另一個進程B中含有100個線程,這樣,進程A中線程的運行時間,將是進程B中線程運行時間的100倍;相應(yīng)地,速度就快100倍。假如系統(tǒng)中是設(shè)置的內(nèi)核支持線程,其調(diào)度是以線程為單位進行的,這樣,進程B可以獲得的CPU時間是進程A的100倍,進程B可使100個系統(tǒng)調(diào)用并發(fā)工作。例:線程執(zhí)行時間3.4.4Solaris操作系統(tǒng)中的線程同時實現(xiàn)了用戶級線程與內(nèi)核支持線程。
SUN
SolarisOS在用戶級線程和內(nèi)核級線程之間,定義了一種輕型進程LWP(內(nèi)核控制線程,也稱為輕權(quán)進程),一個進程中至少有一個LWP。3.4.4Solaris操作系統(tǒng)中的線程同時實現(xiàn)了用戶級線Solaris支持內(nèi)核線程(Kernelthreads)、輕權(quán)進程(LightweightProcesses)和用戶線程(UserLevelThreads)。一個進程可有大量用戶線程;大量用戶線程復(fù)用少量的輕權(quán)進程,不同的輕權(quán)進程分別對應(yīng)不同的內(nèi)核線程。Solaris支持內(nèi)核線程(Kernelthreads)、用戶級線程在使用系統(tǒng)調(diào)用時(如文件讀寫),需要“捆綁(bound)”在一個LWP上,用戶級線程可通過LWP訪問內(nèi)核,但內(nèi)核所看到的總是多個LWP,而看不到用戶級線程。永久捆綁:一個LWP固定被一個用戶級線程占用,該LWP移到LWP池之外臨時捆綁:從LWP池中臨時分配一個未被占用的LWP在使用系統(tǒng)調(diào)用時,如果所有LWP已被其他用戶級線程所占用(捆綁),則該線程阻塞直到有可用的LWP--例如6個用戶級線程,而LWP池中有4個LWP如果LWP執(zhí)行系統(tǒng)調(diào)用時阻塞(如read()調(diào)用),則當(dāng)前捆綁在LWP上的用戶級線程也阻塞。每個要通信的用戶級線程都需要一個LWP用戶級線程在使用系統(tǒng)調(diào)用時(如文件讀寫),需要“捆綁(bouSolaris用戶線程和輕權(quán)進程Solaris用戶線程和輕權(quán)進程用戶線程、輕權(quán)進程LWP和核心線程的關(guān)系同時有4個用戶級線程發(fā)出對文件的讀寫請求,而任務(wù)中只有3個LPW,則3個用戶級線程可執(zhí)行讀寫請求,余下的必須等用戶線程、輕權(quán)進程LWP和核心線程的關(guān)系同時有4個用戶級線程有關(guān)的C庫函數(shù)/*創(chuàng)建用戶級線程 */intthr_create(void*stack_base,size_tstack_size,void*(*start_routine)(void*),void*arg,longflags,thread_t*new_thread_id); 其中flags包括:THR_BOUND(永久捆綁),THR_NEW_LWP(創(chuàng)建新LWP放入LWP池),若兩者同時指定則創(chuàng)建兩個新LWP,一個永久捆綁而另一個放入LWP池有關(guān)的系統(tǒng)調(diào)用/*在當(dāng)前進程中創(chuàng)建LWP */int_lwp_create(ucontext_t*contextp,unsignedlongflags,lwpid_t*new_lwp_id);/*構(gòu)造LWP上下文 */void_lwp_makecontext(ucontext_t*ucp,void(*start_routine)(void*),void*arg,void*private,caddr_tstack_base,size_tstack_size);/*注意:沒有進行"捆綁"操作的系統(tǒng)調(diào)用*/有關(guān)的C庫函數(shù)/*創(chuàng)建用戶級線程 */有關(guān)的系統(tǒng)調(diào)用3.4.5進程和線程的關(guān)系(1)線程是進程的一個組成部分。每個進程在創(chuàng)建時通常只有一個線程,需要時這個線程可以創(chuàng)建其它線程。(2)進程的多線程都在進程的地址空間活動。-某進程內(nèi)的線程在其他進程不可見。(3)資源是分給進程的,而不是分給線程的,線程在執(zhí)行中需要資源時,系統(tǒng)從進程的資源配額中扣除并分配給它。(4)處理機調(diào)度的基本單位是線程,線程之間競爭處理機,真正在處理機上運行的是線程。(5)線程在執(zhí)行過程中,需要同步。3.4.5進程和線程的關(guān)系11/18/2022第三章
進程管理11/10/2022第三章進程管理概述進程的描述進程控制線程進程互斥和同步進程間通信死鎖問題進程其他方面的舉例為了描述程序在并發(fā)執(zhí)行時對系統(tǒng)資源的共享,需要一個描述程序執(zhí)行時動態(tài)特征的概念,這就是進程。本章將討論進程概念、進程控制和進程間關(guān)系。概述進程互前趨圖:是一個有向無循環(huán)圖。
前趨圖用于描述進程之間執(zhí)行的前后關(guān)系。
圖中的每個結(jié)點可用于描述一個程序段或進程,乃至一條語句;結(jié)點間的有向邊則用于表示兩個結(jié)點之間存在的偏序或前趨關(guān)系“→”。節(jié)點概述:前趨圖:是一個有向無循環(huán)圖。前趨圖用于描述進程之間執(zhí)行的前圖2-1(a)中存在著這樣的前趨關(guān)系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9圖2-1前趨圖圖2-1(a)中存在著這樣的前趨關(guān)系:圖2-1前趨圖或表示為:P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9)}應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-1(b)中卻有著下述的前趨關(guān)系:S2→S3,S3→S2
圖2-1前趨圖或表示為:應(yīng)當(dāng)注意,前趨圖中必須不存在循環(huán),但在圖2-1(3.1.1程序的順序執(zhí)行3.1.1程序的順序執(zhí)行圖2-2程序的順序執(zhí)行S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;試想S1、S2、S3三條語句以何順序執(zhí)行?3.1.1程序的順序執(zhí)行圖2-2程序的順序執(zhí)行S1:a∶=x+y;試想S程序順序執(zhí)行時的特征
順序性:按照程序結(jié)構(gòu)所指定的次序(2)封閉性(運行時候獨占處理機資源,運行結(jié)果不受外界影響)-程序可再現(xiàn)性:(3)可再現(xiàn)性(初始條件相同,結(jié)果相同)程序順序執(zhí)行時的特征順序性:按照程序結(jié)構(gòu)所指定的次序3.1.2程序的并發(fā)執(zhí)行及其特征
3.1.2程序的并發(fā)執(zhí)行及其特征3.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的目的:提高計算機的處理能力提高資源利用率分為兩種形式:多道程序環(huán)境下的多道程序的并發(fā)執(zhí)行在某道程序的幾個程序段中,包含可同時執(zhí)行或可顛倒順序執(zhí)行的代碼。3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行定義:程序的并發(fā)執(zhí)行是指一組在邏輯上互相獨立的程序或程序段在執(zhí)行時間上客觀上互相重疊,即一個程序或程序段的執(zhí)行尚未結(jié)束,另一個程序(段)的執(zhí)行已經(jīng)開始的執(zhí)行方式。并發(fā):在一段時間內(nèi)的同時并行并行:在同一物理時刻的同時3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請求帶輸入啟動帶磁帶輸入結(jié)束中斷中斷處理請求磁盤輸入啟動盤結(jié)束中斷中斷處理CPU外設(shè)請求盤輸入啟動盤,調(diào)度B請求帶輸入啟動帶結(jié)束中斷中斷處理調(diào)度A結(jié)束中斷中斷處理調(diào)度B時間t用戶程序監(jiān)督程序磁盤設(shè)備磁帶設(shè)備用戶程序A用戶程序B監(jiān)督程序磁盤設(shè)備磁帶設(shè)備3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請求帶輸入啟動帶磁帶輸入3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時的前趨圖在該例中存在下述前趨關(guān)系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之間,可以并發(fā)執(zhí)行。如何實現(xiàn)并發(fā)執(zhí)行?3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時的前趨圖在對于具有下述四條語句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b請畫出前趨關(guān)系圖。對于具有下述四條語句的程序段:3.1.2程序并發(fā)執(zhí)行時的特征
間斷性(相互制約性)-“走走停?!?,一個程序可能走到中途停下來,失去原有的時序關(guān)系;失去封閉性:多個程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個程序來改變,致使程序的運行已失去了封閉性。如:一個程序?qū)懙酱鎯ζ髦械臄?shù)據(jù)可能被另一個程序修改,失去原有的不變特征。不可再現(xiàn)性:程序在并發(fā)執(zhí)行時,由于失去了封閉性,也將導(dǎo)致失去其可再現(xiàn)性下面看個小例子:3.1.2程序并發(fā)執(zhí)行時的特征間斷性(相互制約性)-“例如,有兩個循環(huán)程序A和B,它們共享一個變量N。程序A每執(zhí)行一次時,都要做N∶=N+1操作;程序B每執(zhí)行一次時,都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運行。(1)N∶=N+1在Print(N)和N∶=0之前,此時得到的N值分別為n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此時得到的N值分別為n,0,1。(3)N∶=N+1在Print(N)和N∶=0之間,此時得到的N值分別為n,n+1,0。例如,有兩個循環(huán)程序A和B,它們共享一個變量N結(jié)論:程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結(jié)果已經(jīng)和并發(fā)執(zhí)行速度有關(guān),從而使程序失去了可再現(xiàn)性,亦即,程序經(jīng)過多次執(zhí)行后,雖然他們執(zhí)行時的環(huán)境和初始條件相同,但得到的結(jié)果卻不相同。結(jié)論:程序在并發(fā)執(zhí)行時,由于失去了封閉性,其計算結(jié)果已經(jīng)和并
順序執(zhí)行:并發(fā)執(zhí)行:程序具有封閉性程序失去封閉性獨享資源共享資源(互為存在條件)可再現(xiàn)性程序與“計算”不再一一對應(yīng)有相互制約操作系統(tǒng)湯子英課件第二章進程管理高中信息技術(shù)課件教案人教版3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行
——程序的并發(fā)執(zhí)行并發(fā)執(zhí)行的條件:達到封閉性和可再現(xiàn)性
并發(fā)執(zhí)行失去封閉性的原因是共享資源的影響,去掉這種影響即可。1966年,由Bernstein給出并發(fā)執(zhí)行的條件。(這里沒有考慮執(zhí)行速度的影響。)。程序P(i)針對的讀變量集和寫變量集為R(i)和W(i)。任意兩個程序P(i)和P(j)可并發(fā)的條件:R(i)W(j)=W(i)R(j)=保證一個程序的兩次讀之間數(shù)據(jù)不變化W(i)W(j)=保證寫的結(jié)果不丟掉現(xiàn)在的問題是這個條件不好檢查。怎么辦?3.1概述3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行
——程序的并發(fā)執(zhí)行程序活動不再處于一個封閉系統(tǒng)中,呈現(xiàn)了獨立性、并發(fā)性、動態(tài)性以及它們之間的相互制約性?!俺绦颉边@個靜態(tài)概念已經(jīng)不能如實地反映程序活動的這些特征,為此,引入“進程”這一動態(tài)概念來描述系統(tǒng)和用戶的程序活動。程序進程3.1概述程序活動不再處于一個封閉系統(tǒng)中,呈現(xiàn)了獨立性、并3.1概述3.1.2進程的定義進程是程序的一次執(zhí)行;一個具有一定獨立功能的程序在一個數(shù)據(jù)集合上的一次動態(tài)執(zhí)行過程。簡言之,進程是程序的一次執(zhí)行活動進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位;進程是一個程序及其數(shù)據(jù)在處理機上順序執(zhí)行時所發(fā)生的活動;3.1概述3.1概述3.1.2進程的定義——進程的特征動態(tài)性:進程對應(yīng)程序的執(zhí)行進程是動態(tài)產(chǎn)生:創(chuàng)建運行消亡進程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換獨立性:各進程的地址空間相互獨立,除非采用進程間通信手段;并發(fā)性:指多個進程實體同存于內(nèi)存中,且能在一段時間內(nèi)同時運行;異步性:每個進程都以其相對獨立的不可預(yù)知的速度向前推進;結(jié)構(gòu)化:進程=代碼段+數(shù)據(jù)段+PCB;3.1概述3.1概述3.1.2進程與程序的區(qū)別進程是動態(tài)的,程序是靜態(tài)的:炒菜菜譜進程是暫時的,程序的永久的:進程是一個狀態(tài)變化的過程,程序可長久保存。進程與程序的組成不同:進程的組成包括程序、數(shù)據(jù)和進程控制塊(即進程狀態(tài)信息)。進程與程序的對應(yīng)關(guān)系:通過多次執(zhí)行,一個程序可對應(yīng)多個進程;通過調(diào)用關(guān)系,一個進程可包括多個程序。進程具有并行特征,程序沒有。進程是競爭計算機資源的基本單位。3.1概述程序與進程的類比
程序進程唱歌的曲譜或音樂樂器的樂譜
演出或演奏
劇本
演出
火車
列車
程序與進程的類比
程序進程唱歌的1、判斷題:進程是一個程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進程對應(yīng)不同的程序。分析:進程是程序在某數(shù)據(jù)集上得一次執(zhí)行,但是不同進程可以對應(yīng)同一程序。2、程序順序執(zhí)行與并發(fā)執(zhí)行有什么不同?3、用戶程序必須在進程中運行。正確4、判斷題:兩次打開Word字處理程序,編輯同一篇文章,因為程序一樣(Word2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運行的這兩個Word字處理程序是同一個進程。錯誤,運行的是2個不同的進程1、判斷題:進程是一個程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進3.1概述3.1.2進程的定義——進程與程序的區(qū)別用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)步…..線程線程…..進程進程…..3.1概述用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)3.2.1進程的組成
進程=程序+數(shù)據(jù)+進程控制塊PCB
有人把這三部分稱為”進程映像”.程序是進程的不可缺少的組成部分;如果一個程序段允許被共享,則它應(yīng)該是可重入的,或純代碼段數(shù)據(jù)是進程處理的對象進程控制塊是進程的控制結(jié)構(gòu),包含了進程的描述信息、控制信息和資源信息以及現(xiàn)場保護區(qū),是進程的唯一標識,系統(tǒng)通過PCB管理和控制進程。
通常的程序是不能并發(fā)執(zhí)行的,為使程序能并發(fā)執(zhí)行,應(yīng)為之配置一進程控制塊,即PCB;所謂創(chuàng)建進程是指創(chuàng)建進程實體中的PCB,撤銷亦如此。3.2.1進程的組成3.2進程的描述3.2.2進程控制塊PCB
(ProcessControlBlock)進程控制塊是由OS維護的用來記錄進程相關(guān)信息和管理進程而設(shè)置的一個專門的數(shù)據(jù)結(jié)構(gòu)包含了進程的描述信息、控制信息和資源信息以及現(xiàn)場保護區(qū)PCB是進程動態(tài)特性的集中反映系統(tǒng)通過PCB感知進程的存在,通過PCB中所包含的各項變量的變化,掌握進程的狀態(tài)以達到控制進程活動的目的3.2進程的描述3.2進程的描述3.2.2進程控制塊PCB
(ProcessControlBlock)PCB結(jié)構(gòu)的全部或部分常駐內(nèi)存;PCB隨進程的創(chuàng)建而填寫,隨進程的撤消而釋放,有生命周期;系統(tǒng)利用PCB來控制和管理進程,所以PCB是系統(tǒng)感知進程存在的唯一標志進程與PCB是一一對應(yīng)的3.2進程的描述3.2.3進程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進程標識符:內(nèi)部進程標識符(processID),唯一,通常是一個整數(shù);進程名(外部標識符),通?;诳蓤?zhí)行文件名(不唯一);用戶標識符(userID);進程組關(guān)系(processgroup)進程控制信息:當(dāng)前狀態(tài);優(yōu)先級(priority);代碼執(zhí)行入口地址;程序的外存地址;運行統(tǒng)計信息(執(zhí)行時間、頁面調(diào)度);進程間同步和通信;阻塞原因進程調(diào)度信息:進程狀態(tài)、進程優(yōu)先級、資源信息等處理機狀態(tài):寄存器值(通用、程序計數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.2.3進程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進程標識符:3.2.4PCB的組織方式鏈表:同一狀態(tài)的進程其PCB成一鏈表,多個狀態(tài)對應(yīng)多個不同的鏈表各狀態(tài)的進程形成不同的鏈表:就緒鏈表、阻塞鏈表索引表:同一狀態(tài)的進程歸入一個index表(由index指向PCB),多個狀態(tài)對應(yīng)多個不同的index表各狀態(tài)的進行形成不同的索引表:就緒索引表、阻塞索引表3.2.4PCB的組織方式鏈表:同一狀態(tài)的進程其PCB成OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。簡單題:進程控制塊的作用(要擴展)?判斷題:進程控制塊是進程存在的唯一標志。OS是根據(jù)PCB來對并發(fā)執(zhí)行的進程進行控制和管理的。運行Running就緒Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2進程的描述3.2.5進程的狀態(tài)及其轉(zhuǎn)換——進程的三種基本狀態(tài)基本狀態(tài)間的轉(zhuǎn)換運行就緒等待DispatchTimeoutEventW圖2-5進程的三種基本狀態(tài)及其轉(zhuǎn)換(教材講5種)
結(jié)束新進程接納完成圖2-5進程的三種基本狀態(tài)及其轉(zhuǎn)換結(jié)束新進程接納完成作業(yè)后備隊列進程就緒隊列外存內(nèi)存作業(yè)調(diào)度一些處理器(CPU)阻塞隊列阻塞隊列處理機調(diào)度器(進程調(diào)度):是操作系統(tǒng)中的一段代碼,它完成如下功能:1)把處理機從一個進程切換到另一個進程;2)防止某進程獨占處理機作業(yè)后備隊列進程就緒隊列外存內(nèi)存作業(yè)調(diào)度3.2.5進程的三種基本狀態(tài)
1)就緒(Ready)狀態(tài):已分配到除CPU以外的所有必要的資源,只要能再獲得處理機,便可立即執(zhí)行的狀態(tài)。多個排成一隊稱為就緒隊列。2)執(zhí)行狀態(tài):指進程已獲得處理機,其程序正在執(zhí)行;在單處理機系統(tǒng)中,只能有一個進程處于執(zhí)行狀態(tài);在多處理機系統(tǒng)中,則可能多個進程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài):進程因發(fā)生某事件(如請求I/O、申請緩沖空間等)而暫停執(zhí)行時的狀態(tài),亦即進程的執(zhí)行受到阻塞,故稱這種暫停狀態(tài)為阻塞狀態(tài),有時也稱為“等待”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書和立項書區(qū)別
- 蒙醫(yī)課題申報書
- 小課題研究申報書
- 上虞勞動合同范本
- 血脂管理課題申報書范文
- 南京房子合同范本
- 供暖商務(wù)合同范本
- 課題研究申報書范例圖表
- 朗讀課題立項申報書
- pos機銷售合同范本
- 醫(yī)院診斷證明書word模板
- 硝酸鎂法制取濃硝酸
- PFMEA-失效模式分析案例
- 2023年高考語文全國甲卷作文深度解析及范文 課件31張
- 國家藥監(jiān)局醫(yī)療器械技術(shù)審評檢查大灣區(qū)分中心第二批員額制人員公開招聘(2023年)模擬預(yù)測(共1000題)筆試備考題庫及答案解析
- Unit+6+Lesson+3+The+Superhero+Behind+Superman+課件高中英語北師大版(2019)必修第二冊+
- 地面貼磚工藝施工規(guī)范及驗收標準
- 血液凈化標準操作規(guī)程(SOP)血液灌流操作
- Unit 1 Whats the matter 單元測試題及答案(含聽力MP3)
- 2023年棗莊科技職業(yè)學(xué)院單招綜合素質(zhì)模擬試題及答案解析
- 化工企業(yè)安全生產(chǎn)教育培訓(xùn)計劃及內(nèi)容
評論
0/150
提交評論