操作系統(tǒng)湯子英課件第二章進(jìn)程管理 高中信息技術(shù)課件教案 人教版_第1頁
操作系統(tǒng)湯子英課件第二章進(jìn)程管理 高中信息技術(shù)課件教案 人教版_第2頁
操作系統(tǒng)湯子英課件第二章進(jìn)程管理 高中信息技術(shù)課件教案 人教版_第3頁
操作系統(tǒng)湯子英課件第二章進(jìn)程管理 高中信息技術(shù)課件教案 人教版_第4頁
操作系統(tǒng)湯子英課件第二章進(jìn)程管理 高中信息技術(shù)課件教案 人教版_第5頁
已閱讀5頁,還剩177頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

11/18/2022第三章

進(jìn)程管理11/10/2022第三章進(jìn)程管理概述進(jìn)程的描述進(jìn)程控制線程進(jìn)程互斥和同步進(jìn)程間通信死鎖問題進(jìn)程其他方面的舉例為了描述程序在并發(fā)執(zhí)行時(shí)對(duì)系統(tǒng)資源的共享,需要一個(gè)描述程序執(zhí)行時(shí)動(dòng)態(tài)特征的概念,這就是進(jìn)程。本章將討論進(jìn)程概念、進(jìn)程控制和進(jìn)程間關(guān)系。概述進(jìn)程互前趨圖:是一個(gè)有向無循環(huán)圖。

前趨圖用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。

圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃至一條語句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在的偏序或前趨關(guān)系“→”。節(jié)點(diǎn)概述:前趨圖:是一個(gè)有向無循環(huán)圖。前趨圖用于描述進(jì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í)行時(shí)的特征

順序性:按照程序結(jié)構(gòu)所指定的次序(2)封閉性(運(yùn)行時(shí)候獨(dú)占處理機(jī)資源,運(yùn)行結(jié)果不受外界影響)-程序可再現(xiàn)性:(3)可再現(xiàn)性(初始條件相同,結(jié)果相同)程序順序執(zhí)行時(shí)的特征順序性:按照程序結(jié)構(gòu)所指定的次序3.1.2程序的并發(fā)執(zhí)行及其特征

3.1.2程序的并發(fā)執(zhí)行及其特征3.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的目的:提高計(jì)算機(jī)的處理能力提高資源利用率分為兩種形式:多道程序環(huán)境下的多道程序的并發(fā)執(zhí)行在某道程序的幾個(gè)程序段中,包含可同時(shí)執(zhí)行或可顛倒順序執(zhí)行的代碼。3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行定義:程序的并發(fā)執(zhí)行是指一組在邏輯上互相獨(dú)立的程序或程序段在執(zhí)行時(shí)間上客觀上互相重疊,即一個(gè)程序或程序段的執(zhí)行尚未結(jié)束,另一個(gè)程序(段)的執(zhí)行已經(jīng)開始的執(zhí)行方式。并發(fā):在一段時(shí)間內(nèi)的同時(shí)并行并行:在同一物理時(shí)刻的同時(shí)3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請(qǐng)求帶輸入啟動(dòng)帶磁帶輸入結(jié)束中斷中斷處理請(qǐng)求磁盤輸入啟動(dòng)盤結(jié)束中斷中斷處理CPU外設(shè)請(qǐng)求盤輸入啟動(dòng)盤,調(diào)度B請(qǐng)求帶輸入啟動(dòng)帶結(jié)束中斷中斷處理調(diào)度A結(jié)束中斷中斷處理調(diào)度B時(shí)間t用戶程序監(jiān)督程序磁盤設(shè)備磁帶設(shè)備用戶程序A用戶程序B監(jiān)督程序磁盤設(shè)備磁帶設(shè)備3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請(qǐng)求帶輸入啟動(dòng)帶磁帶輸入3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時(shí)的前趨圖在該例中存在下述前趨關(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í)行。如何實(shí)現(xiàn)并發(fā)執(zhí)行?3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時(shí)的前趨圖在對(duì)于具有下述四條語句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b請(qǐng)畫出前趨關(guān)系圖。對(duì)于具有下述四條語句的程序段:3.1.2程序并發(fā)執(zhí)行時(shí)的特征

間斷性(相互制約性)-“走走停?!保粋€(gè)程序可能走到中途停下來,失去原有的時(shí)序關(guān)系;失去封閉性:多個(gè)程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個(gè)程序來改變,致使程序的運(yùn)行已失去了封閉性。如:一個(gè)程序?qū)懙酱鎯?chǔ)器中的數(shù)據(jù)可能被另一個(gè)程序修改,失去原有的不變特征。不可再現(xiàn)性:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,也將導(dǎo)致失去其可再現(xiàn)性下面看個(gè)小例子:3.1.2程序并發(fā)執(zhí)行時(shí)的特征間斷性(相互制約性)-“例如,有兩個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N。程序A每執(zhí)行一次時(shí),都要做N∶=N+1操作;程序B每執(zhí)行一次時(shí),都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運(yùn)行。(1)N∶=N+1在Print(N)和N∶=0之前,此時(shí)得到的N值分別為n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此時(shí)得到的N值分別為n,0,1。(3)N∶=N+1在Print(N)和N∶=0之間,此時(shí)得到的N值分別為n,n+1,0。例如,有兩個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N結(jié)論:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,其計(jì)算結(jié)果已經(jīng)和并發(fā)執(zhí)行速度有關(guān),從而使程序失去了可再現(xiàn)性,亦即,程序經(jīng)過多次執(zhí)行后,雖然他們執(zhí)行時(shí)的環(huán)境和初始條件相同,但得到的結(jié)果卻不相同。結(jié)論:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,其計(jì)算結(jié)果已經(jīng)和并

順序執(zhí)行:并發(fā)執(zhí)行:程序具有封閉性程序失去封閉性獨(dú)享資源共享資源(互為存在條件)可再現(xiàn)性程序與“計(jì)算”不再一一對(duì)應(yīng)有相互制約操作系統(tǒng)湯子英課件第二章進(jìn)程管理高中信息技術(shù)課件教案人教版3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

——程序的并發(fā)執(zhí)行并發(fā)執(zhí)行的條件:達(dá)到封閉性和可再現(xiàn)性

并發(fā)執(zhí)行失去封閉性的原因是共享資源的影響,去掉這種影響即可。1966年,由Bernstein給出并發(fā)執(zhí)行的條件。(這里沒有考慮執(zhí)行速度的影響。)。程序P(i)針對(duì)的讀變量集和寫變量集為R(i)和W(i)。任意兩個(gè)程序P(i)和P(j)可并發(fā)的條件:R(i)W(j)=W(i)R(j)=保證一個(gè)程序的兩次讀之間數(shù)據(jù)不變化W(i)W(j)=保證寫的結(jié)果不丟掉現(xiàn)在的問題是這個(gè)條件不好檢查。怎么辦?3.1概述3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

——程序的并發(fā)執(zhí)行程序活動(dòng)不再處于一個(gè)封閉系統(tǒng)中,呈現(xiàn)了獨(dú)立性、并發(fā)性、動(dòng)態(tài)性以及它們之間的相互制約性。“程序”這個(gè)靜態(tài)概念已經(jīng)不能如實(shí)地反映程序活動(dòng)的這些特征,為此,引入“進(jìn)程”這一動(dòng)態(tài)概念來描述系統(tǒng)和用戶的程序活動(dòng)。程序進(jìn)程3.1概述程序活動(dòng)不再處于一個(gè)封閉系統(tǒng)中,呈現(xiàn)了獨(dú)立性、并3.1概述3.1.2進(jìn)程的定義進(jìn)程是程序的一次執(zhí)行;一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過程。簡(jiǎn)言之,進(jìn)程是程序的一次執(zhí)行活動(dòng)進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng);3.1概述3.1概述3.1.2進(jìn)程的定義——進(jìn)程的特征動(dòng)態(tài)性:進(jìn)程對(duì)應(yīng)程序的執(zhí)行進(jìn)程是動(dòng)態(tài)產(chǎn)生:創(chuàng)建運(yùn)行消亡進(jìn)程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換獨(dú)立性:各進(jìn)程的地址空間相互獨(dú)立,除非采用進(jìn)程間通信手段;并發(fā)性:指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存中,且能在一段時(shí)間內(nèi)同時(shí)運(yùn)行;異步性:每個(gè)進(jìn)程都以其相對(duì)獨(dú)立的不可預(yù)知的速度向前推進(jìn);結(jié)構(gòu)化:進(jìn)程=代碼段+數(shù)據(jù)段+PCB;3.1概述3.1概述3.1.2進(jìn)程與程序的區(qū)別進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的:炒菜菜譜進(jìn)程是暫時(shí)的,程序的永久的:進(jìn)程是一個(gè)狀態(tài)變化的過程,程序可長(zhǎng)久保存。進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊(即進(jìn)程狀態(tài)信息)。進(jìn)程與程序的對(duì)應(yīng)關(guān)系:通過多次執(zhí)行,一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程;通過調(diào)用關(guān)系,一個(gè)進(jìn)程可包括多個(gè)程序。進(jìn)程具有并行特征,程序沒有。進(jìn)程是競(jìng)爭(zhēng)計(jì)算機(jī)資源的基本單位。3.1概述程序與進(jìn)程的類比

程序進(jìn)程唱歌的曲譜或音樂樂器的樂譜

演出或演奏

劇本

演出

火車

列車

程序與進(jìn)程的類比

程序進(jìn)程唱歌的1、判斷題:進(jìn)程是一個(gè)程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進(jìn)程對(duì)應(yīng)不同的程序。分析:進(jìn)程是程序在某數(shù)據(jù)集上得一次執(zhí)行,但是不同進(jìn)程可以對(duì)應(yīng)同一程序。2、程序順序執(zhí)行與并發(fā)執(zhí)行有什么不同?3、用戶程序必須在進(jìn)程中運(yùn)行。正確4、判斷題:兩次打開Word字處理程序,編輯同一篇文章,因?yàn)槌绦蛞粯?Word2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運(yùn)行的這兩個(gè)Word字處理程序是同一個(gè)進(jìn)程。錯(cuò)誤,運(yùn)行的是2個(gè)不同的進(jìn)程1、判斷題:進(jìn)程是一個(gè)程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進(jìn)3.1概述3.1.2進(jìn)程的定義——進(jìn)程與程序的區(qū)別用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)步…..線程線程…..進(jìn)程進(jìn)程…..3.1概述用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)3.2.1進(jìn)程的組成

進(jìn)程=程序+數(shù)據(jù)+進(jìn)程控制塊PCB

有人把這三部分稱為”進(jìn)程映像”.程序是進(jìn)程的不可缺少的組成部分;如果一個(gè)程序段允許被共享,則它應(yīng)該是可重入的,或純代碼段數(shù)據(jù)是進(jìn)程處理的對(duì)象進(jìn)程控制塊是進(jìn)程的控制結(jié)構(gòu),包含了進(jìn)程的描述信息、控制信息和資源信息以及現(xiàn)場(chǎng)保護(hù)區(qū),是進(jìn)程的唯一標(biāo)識(shí),系統(tǒng)通過PCB管理和控制進(jìn)程。

通常的程序是不能并發(fā)執(zhí)行的,為使程序能并發(fā)執(zhí)行,應(yīng)為之配置一進(jìn)程控制塊,即PCB;所謂創(chuàng)建進(jìn)程是指創(chuàng)建進(jìn)程實(shí)體中的PCB,撤銷亦如此。3.2.1進(jìn)程的組成3.2進(jìn)程的描述3.2.2進(jìn)程控制塊PCB

(ProcessControlBlock)進(jìn)程控制塊是由OS維護(hù)的用來記錄進(jìn)程相關(guān)信息和管理進(jìn)程而設(shè)置的一個(gè)專門的數(shù)據(jù)結(jié)構(gòu)包含了進(jìn)程的描述信息、控制信息和資源信息以及現(xiàn)場(chǎng)保護(hù)區(qū)PCB是進(jìn)程動(dòng)態(tài)特性的集中反映系統(tǒng)通過PCB感知進(jìn)程的存在,通過PCB中所包含的各項(xiàng)變量的變化,掌握進(jìn)程的狀態(tài)以達(dá)到控制進(jìn)程活動(dòng)的目的3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.2進(jìn)程控制塊PCB

(ProcessControlBlock)PCB結(jié)構(gòu)的全部或部分常駐內(nèi)存;PCB隨進(jìn)程的創(chuàng)建而填寫,隨進(jìn)程的撤消而釋放,有生命周期;系統(tǒng)利用PCB來控制和管理進(jìn)程,所以PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志進(jìn)程與PCB是一一對(duì)應(yīng)的3.2進(jìn)程的描述3.2.3進(jìn)程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進(jìn)程標(biāo)識(shí)符:內(nèi)部進(jìn)程標(biāo)識(shí)符(processID),唯一,通常是一個(gè)整數(shù);進(jìn)程名(外部標(biāo)識(shí)符),通?;诳蓤?zhí)行文件名(不唯一);用戶標(biāo)識(shí)符(userID);進(jìn)程組關(guān)系(processgroup)進(jìn)程控制信息:當(dāng)前狀態(tài);優(yōu)先級(jí)(priority);代碼執(zhí)行入口地址;程序的外存地址;運(yùn)行統(tǒng)計(jì)信息(執(zhí)行時(shí)間、頁面調(diào)度);進(jìn)程間同步和通信;阻塞原因進(jìn)程調(diào)度信息:進(jìn)程狀態(tài)、進(jìn)程優(yōu)先級(jí)、資源信息等處理機(jī)狀態(tài):寄存器值(通用、程序計(jì)數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.2.3進(jìn)程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進(jìn)程標(biāo)識(shí)符:3.2.4PCB的組織方式鏈表:同一狀態(tài)的進(jìn)程其PCB成一鏈表,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表各狀態(tài)的進(jìn)程形成不同的鏈表:就緒鏈表、阻塞鏈表索引表:同一狀態(tài)的進(jìn)程歸入一個(gè)index表(由index指向PCB),多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的index表各狀態(tài)的進(jìn)行形成不同的索引表:就緒索引表、阻塞索引表3.2.4PCB的組織方式鏈表:同一狀態(tài)的進(jìn)程其PCB成OS是根據(jù)PCB來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。簡(jiǎn)單題:進(jìn)程控制塊的作用(要擴(kuò)展)?判斷題:進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志。OS是根據(jù)PCB來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。運(yùn)行Running就緒Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——進(jìn)程的三種基本狀態(tài)基本狀態(tài)間的轉(zhuǎn)換運(yùn)行就緒等待DispatchTimeoutEventW圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換(教材講5種)

結(jié)束新進(jìn)程接納完成圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換結(jié)束新進(jìn)程接納完成作業(yè)后備隊(duì)列進(jìn)程就緒隊(duì)列外存內(nèi)存作業(yè)調(diào)度一些處理器(CPU)阻塞隊(duì)列阻塞隊(duì)列處理機(jī)調(diào)度器(進(jìn)程調(diào)度):是操作系統(tǒng)中的一段代碼,它完成如下功能:1)把處理機(jī)從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程;2)防止某進(jìn)程獨(dú)占處理機(jī)作業(yè)后備隊(duì)列進(jìn)程就緒隊(duì)列外存內(nèi)存作業(yè)調(diào)度3.2.5進(jìn)程的三種基本狀態(tài)

1)就緒(Ready)狀態(tài):已分配到除CPU以外的所有必要的資源,只要能再獲得處理機(jī),便可立即執(zhí)行的狀態(tài)。多個(gè)排成一隊(duì)稱為就緒隊(duì)列。2)執(zhí)行狀態(tài):指進(jìn)程已獲得處理機(jī),其程序正在執(zhí)行;在單處理機(jī)系統(tǒng)中,只能有一個(gè)進(jìn)程處于執(zhí)行狀態(tài);在多處理機(jī)系統(tǒng)中,則可能多個(gè)進(jìn)程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài):進(jìn)程因發(fā)生某事件(如請(qǐng)求I/O、申請(qǐng)緩沖空間等)而暫停執(zhí)行時(shí)的狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,故稱這種暫停狀態(tài)為阻塞狀態(tài),有時(shí)也稱為“等待”狀態(tài)或“睡眠”狀態(tài)。通常將處于阻塞狀態(tài)的進(jìn)程排成一個(gè)隊(duì)列,稱為阻塞隊(duì)列。在有的系統(tǒng)中,按阻塞原因的不同而將處于阻塞狀態(tài)的進(jìn)程排成多個(gè)隊(duì)列。3.2.5進(jìn)程的三種基本狀態(tài)1)就緒(Ready)狀態(tài):3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——進(jìn)程的三種基本狀態(tài)

在進(jìn)程運(yùn)行過程中,由于進(jìn)程自身進(jìn)展情況及外界環(huán)境的變化,這三種基本狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換

就緒運(yùn)行:調(diào)度程序選擇一個(gè)新的進(jìn)程運(yùn)行

運(yùn)行就緒:運(yùn)行進(jìn)程用完了時(shí)間片運(yùn)行進(jìn)程被中斷,因?yàn)橐桓邇?yōu)先級(jí)進(jìn)程處于就緒狀態(tài)

運(yùn)行等待:當(dāng)一進(jìn)程等待某一事件的發(fā)生時(shí),如請(qǐng)求系統(tǒng)服務(wù)無新工作可做

等待就緒:當(dāng)所等待的事件發(fā)生時(shí)初始化I/O且必須等待結(jié)果等待某一進(jìn)程提供輸入(IPC)3.2進(jìn)程的描述初始化I/O且必須等待結(jié)果3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——五狀態(tài)進(jìn)程模型RunningNewExitReadyBlockedCreateAdmitDispatchTimeoutReleaseEventWaitEventOccurs3.2進(jìn)程的描述RunningNewExitReadyBl五狀態(tài)進(jìn)程模型(單隊(duì)列結(jié)構(gòu))AdmitReadyQueue就緒隊(duì)列

DispatchTime-out超時(shí)EventWaitReleaseCPUBlockedQueue等待隊(duì)列EventOccurs提交調(diào)度Processor釋放等待事件事件發(fā)生AdmitReadyQueue就緒隊(duì)列Dispatc五狀態(tài)進(jìn)程模型(多隊(duì)列結(jié)構(gòu))AdmitReadyQueueDispatchTime-outReleaseProcessorEvent1WaitEvent1QueueEvent1OccursEvent2WaitEvent2QueueEvent2OccursAdmitReadyQueueDispatchTime-o3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)創(chuàng)建狀態(tài):創(chuàng)建(新new)狀態(tài)

OS已完成為創(chuàng)建一進(jìn)程所必要的工作已構(gòu)造了進(jìn)程標(biāo)識(shí)符已創(chuàng)建了管理進(jìn)程所需的表格終止?fàn)顟B(tài)(Exit)終止后進(jìn)程移入該狀態(tài)它不再有執(zhí)行資格表格和其它信息暫時(shí)保留實(shí)用程序?yàn)榱朔治鲂阅芎屠寐?,可能要提取程序的歷史信息掛起狀態(tài):把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)導(dǎo)致進(jìn)程創(chuàng)建的原因批處理環(huán)境中,選擇一新作業(yè)即將進(jìn)入內(nèi)存執(zhí)行交互環(huán)境中,新用戶登錄到系統(tǒng)操作系統(tǒng)因提供一項(xiàng)服務(wù)而創(chuàng)建。如:用戶請(qǐng)求打印一個(gè)文件,OS可創(chuàng)建嚴(yán)格管理打印的進(jìn)程,使請(qǐng)求進(jìn)程可繼續(xù)執(zhí)行,與完成打印任務(wù)的時(shí)間無關(guān)由現(xiàn)有進(jìn)程生成,父進(jìn)程子進(jìn)程3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——其它狀態(tài)導(dǎo)致終止進(jìn)程的原因含一個(gè)HALT指令或用于終止的OS顯式服務(wù)調(diào)用分時(shí)系統(tǒng)中,用戶的行為可指示終止,如:用戶退出系統(tǒng)或關(guān)閉自己的終端,該用戶的進(jìn)程將被終止PC機(jī)環(huán)境中,用戶結(jié)束一應(yīng)用程序出現(xiàn)某些錯(cuò)誤時(shí),如,I/O失敗,無效指令等父進(jìn)程可請(qǐng)求它的某個(gè)子進(jìn)程終止父進(jìn)程終止,OS自動(dòng)終止所有后代進(jìn)程3.2進(jìn)程的描述3.2.5掛起進(jìn)程模型

這個(gè)問題的引入是由于進(jìn)程優(yōu)先級(jí)的引入,一些低優(yōu)先級(jí)進(jìn)程可能等待較長(zhǎng)時(shí)間,從而被對(duì)換至外存。目的是:提高處理機(jī)效率:就緒進(jìn)程表為空時(shí),OS將阻塞進(jìn)程從內(nèi)存中“掛起”到磁盤的“掛起隊(duì)列”,再從該隊(duì)列選另一進(jìn)程進(jìn)入內(nèi)存,或接受一個(gè)新進(jìn)程的請(qǐng)求。為運(yùn)行進(jìn)程提供足夠內(nèi)存:資源緊張時(shí),暫停某些進(jìn)程,如:CPU繁忙(或?qū)崟r(shí)任務(wù)執(zhí)行),內(nèi)存緊張用于調(diào)試:在調(diào)試時(shí),掛起被調(diào)試進(jìn)程(從而對(duì)其地址空間進(jìn)行讀寫)3.2.5掛起進(jìn)程模型3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——單掛起進(jìn)程模型RunningNewExitReadyBlockedBlockedSuspendAdmitDispatchTimeoutReleaseEventWaitSuspendActivateEventOccurs3.2進(jìn)程的描述RunningNewExitReadyBl3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——雙掛起進(jìn)程模型RunningReadySuspendExitReadyBlockedBlockedSuspendNewAdmitAdmitSuspendReleaseDispatchTimeoutActivateSuspendEventWaitActivateSuspendEventOccursEventOccurs外存內(nèi)存3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——雙掛起進(jìn)程模型Runnin3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——掛起進(jìn)程模型

掛起進(jìn)程模型的狀態(tài)需考慮二方面:是否就緒,是否在內(nèi)存就緒狀態(tài)(Ready):進(jìn)程在內(nèi)存且可立即進(jìn)入運(yùn)行狀態(tài);阻塞狀態(tài)(Blocked):進(jìn)程在內(nèi)存,并等待某事件的出現(xiàn);就緒掛起狀態(tài)(Ready,suspend):進(jìn)程在外存,但只要進(jìn)入內(nèi)存,即可運(yùn)行;阻塞掛起狀態(tài)(Blocked,suspend):進(jìn)程在外存并等待某事件的出現(xiàn);3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——掛起進(jìn)程模型狀態(tài)間的轉(zhuǎn)換掛起(Suspend):把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存;可能有以下幾種情況:阻塞到阻塞掛起:沒有進(jìn)程處于就緒狀態(tài)或就緒進(jìn)程要求更多內(nèi)存資源時(shí),會(huì)進(jìn)行這種轉(zhuǎn)換,以納入新進(jìn)程或運(yùn)行就緒進(jìn)程;就緒到就緒掛起:當(dāng)有高優(yōu)先級(jí)阻塞(系統(tǒng)認(rèn)為會(huì)很快就緒的)進(jìn)程和低優(yōu)先級(jí)就緒進(jìn)程時(shí),系統(tǒng)會(huì)選擇掛起低優(yōu)先級(jí)就緒進(jìn)程;運(yùn)行到就緒掛起:對(duì)搶先式分時(shí)系統(tǒng),當(dāng)有高優(yōu)先級(jí)阻塞掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起時(shí),系統(tǒng)可能會(huì)把運(yùn)行進(jìn)程轉(zhuǎn)到就緒掛起狀態(tài);3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——掛起進(jìn)程模型狀態(tài)間的轉(zhuǎn)換激活(Activate):把一個(gè)進(jìn)程從外存轉(zhuǎn)到內(nèi)存;可能有以下幾種情況:就緒掛起到就緒:沒有就緒進(jìn)程或掛起就緒進(jìn)程優(yōu)先級(jí)高于就緒進(jìn)程時(shí),會(huì)進(jìn)行這種轉(zhuǎn)換;阻塞掛起到阻塞:當(dāng)一個(gè)進(jìn)程釋放足夠內(nèi)存時(shí),系統(tǒng)會(huì)把一個(gè)高優(yōu)先級(jí)阻塞掛起(系統(tǒng)認(rèn)為會(huì)很快出現(xiàn)所等待的事件)進(jìn)程轉(zhuǎn)為阻塞狀態(tài);較少出現(xiàn)。3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——掛起進(jìn)程模型狀態(tài)間的轉(zhuǎn)換事件出現(xiàn)(EventOccurs):進(jìn)程等待的事件出現(xiàn);如:操作完成、申請(qǐng)成功等;可能的情況有:阻塞到就緒:針對(duì)內(nèi)存進(jìn)程的事件出現(xiàn);阻塞掛起到就緒掛起:針對(duì)外存進(jìn)程的事件出現(xiàn);收容(Admit):收容一個(gè)新進(jìn)程,進(jìn)入就緒狀態(tài)或就緒掛起狀態(tài)。各種狀態(tài)退出:被父進(jìn)程終止或父進(jìn)程本身終止。3.2進(jìn)程的描述練習(xí)思考題如果系統(tǒng)中有N個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待進(jìn)程最多幾個(gè),最少幾個(gè)?有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么? 等待—運(yùn)行;就緒—等待練習(xí)思考題自主設(shè)計(jì)題進(jìn)程的3個(gè)基本狀態(tài):執(zhí)行、就緒、等待,其轉(zhuǎn)換標(biāo)識(shí)分別為1、2、3、4(如圖)。編程模擬進(jìn)程狀態(tài)轉(zhuǎn)換過程,要求:分別建立等待隊(duì)列和就緒隊(duì)列(單隊(duì)列、結(jié)構(gòu)不限),初始狀態(tài)時(shí),1個(gè)進(jìn)程處于執(zhí)行狀態(tài),7個(gè)進(jìn)程在等待隊(duì)列中,7個(gè)進(jìn)程在就緒隊(duì)列中。手工觸發(fā)任意一種轉(zhuǎn)換,顯示轉(zhuǎn)換發(fā)生后的執(zhí)行進(jìn)程和兩個(gè)隊(duì)列的進(jìn)程。執(zhí)行1234等待就緒自主設(shè)計(jì)題執(zhí)行1234等待就緒3.3進(jìn)程控制的功能:完成進(jìn)程狀態(tài)的轉(zhuǎn)換。原語(primitive)※:由若干條指令構(gòu)成的“原子操作(atomicoperation)”過程,作為一個(gè)整體而不可分割--要么全都完成,要么全都不做。許多系統(tǒng)調(diào)用就是原語。注意:系統(tǒng)調(diào)用并不都是原語。進(jìn)程A調(diào)用read(),因無數(shù)據(jù)而阻塞,在read()里未返回。然后進(jìn)程B調(diào)用read(),此時(shí)read()被重入。系統(tǒng)調(diào)用不一定一次執(zhí)行完并返回該進(jìn)程,有可能在特定的點(diǎn)暫停,而轉(zhuǎn)入到其他進(jìn)程。3.3進(jìn)程控制的功能:完成進(jìn)程狀態(tài)的轉(zhuǎn)換。原語(primi3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程創(chuàng)建原語進(jìn)程樹ABCDJFGHIEKLM進(jìn)程樹是有向樹父子關(guān)系表示創(chuàng)建與被創(chuàng)建的關(guān)系父子關(guān)系不表示執(zhí)行的先后關(guān)系3.3進(jìn)程控制ABCDJFGHIEKLM進(jìn)程樹是有向樹3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程創(chuàng)建原語子進(jìn)程的創(chuàng)建的3種形式產(chǎn)生新進(jìn)程不產(chǎn)生新進(jìn)程復(fù)制現(xiàn)有進(jìn)程的上下文fork(新進(jìn)程的系統(tǒng)上下文會(huì)有不同)加載程序spawn(創(chuàng)建新進(jìn)程并加載新程序)exec(加載新程序并覆蓋自身)3.3進(jìn)程控制產(chǎn)生新進(jìn)程不產(chǎn)生新進(jìn)程復(fù)制現(xiàn)有進(jìn)程的上下文f3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程創(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;/*插入家族隊(duì)列*/geny:=∧;geny:=i;i.sdata:=RQ;insert(RQ,i);/*插入就緒隊(duì)列*/End;查找PCB集合,返回PCB的內(nèi)部標(biāo)識(shí)符i被創(chuàng)建進(jìn)程的外部標(biāo)識(shí)符處理機(jī)的初始狀態(tài)進(jìn)程優(yōu)先級(jí)初始內(nèi)存數(shù)所需資源清單進(jìn)程狀態(tài)有關(guān)的指針3.3進(jìn)程控制ProcedureCreate(n,S03.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程創(chuàng)建原語進(jìn)程創(chuàng)建需要的參數(shù):被創(chuàng)建進(jìn)程的外部標(biāo)識(shí)符n處理機(jī)的初始狀態(tài)S0(包括CPU的工作方式、進(jìn)程起始地址及屏蔽碼等);進(jìn)程優(yōu)先級(jí)P0;初始內(nèi)存數(shù)M0;其它所需資源清單R0

i.sdata是一個(gè)與進(jìn)程狀態(tài)有關(guān)的指針。3.3進(jìn)程控制3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程撤銷原語Destroy也稱為“終止”或主程序返回:調(diào)用exit()可終止進(jìn)程。釋放資源:釋放內(nèi)外存空間關(guān)閉所有打開文件釋放共享內(nèi)存段和各種鎖定lock3.3進(jìn)程控制也稱為“終止”或主程序返回:調(diào)用exit()3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程撤銷原語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)用者提供的進(jìn)程的外部標(biāo)識(shí)如果進(jìn)程正在運(yùn)行,則立即停止其運(yùn)行,并設(shè)置調(diào)度標(biāo)志為真3.3進(jìn)程控制ProcedureDestroy(n)Pr3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程阻塞原語Block

阻塞原因:當(dāng)進(jìn)程期待的某事件尚未出現(xiàn)時(shí),該進(jìn)程調(diào)用阻塞原語把自己阻塞起來。具體事件如下:請(qǐng)求系統(tǒng)服務(wù)啟動(dòng)某種操作新數(shù)據(jù)尚未到達(dá)無新工作可做注意:由自己阻塞自己,但該進(jìn)程的喚醒則是在該進(jìn)程所期待的事件發(fā)生后,由“發(fā)現(xiàn)者”進(jìn)程調(diào)用喚醒原語實(shí)現(xiàn)3.3進(jìn)程控制3.3.2.進(jìn)程阻塞過程

正在執(zhí)行的進(jìn)程,當(dāng)發(fā)現(xiàn)上述某事件時(shí),無法繼續(xù)執(zhí)行,于是進(jìn)程調(diào)用阻塞原語block把自己阻塞??梢?,進(jìn)程的阻塞是進(jìn)程自身的一種主動(dòng)行為。進(jìn)入block過程后,由于此時(shí)該進(jìn)程還處于執(zhí)行狀態(tài),所以應(yīng)先立即停止執(zhí)行,把進(jìn)程控制塊中的現(xiàn)行狀態(tài)由“執(zhí)行”改為阻塞,并將PCB插入阻塞隊(duì)列。如果系統(tǒng)中設(shè)置了因不同事件而阻塞的多個(gè)阻塞隊(duì)列,則應(yīng)將本進(jìn)程插入到具有相同事件的阻塞(等待)隊(duì)列。最后,轉(zhuǎn)調(diào)度程序進(jìn)行重新調(diào)度,將處理機(jī)分配給另一就緒進(jìn)程,并進(jìn)行切換。

3.3.2.進(jìn)程阻塞過程3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程阻塞原語Block阻塞進(jìn)程的描述Procedureblock(r)Begini:=EP;stop(i);i.status:=“blocked”;i.sdata:=WQ(r);insert(WQ(r),i);scheduler;End;r為指向等待原因的對(duì)應(yīng)等待隊(duì)列的指針從執(zhí)行進(jìn)程的指針獲得進(jìn)程的內(nèi)部標(biāo)識(shí)符i停止進(jìn)程i進(jìn)程調(diào)度程序3.3進(jìn)程控制Procedureblock(r)r為指3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——

進(jìn)程喚醒原語Wakeup喚醒原因:進(jìn)程等待的事件發(fā)生,等待隊(duì)列中的進(jìn)程喚醒。喚醒進(jìn)程的兩種方法:由系統(tǒng)進(jìn)程喚醒。系統(tǒng)進(jìn)程統(tǒng)一控制事件的發(fā)生,并將“事件發(fā)生”這一消息通知等待進(jìn)程。等待的是公共資源。由事件發(fā)生進(jìn)程喚醒。事件發(fā)生進(jìn)程與被喚醒的進(jìn)程是合作關(guān)系,等待私有資源。3.3進(jìn)程控制3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——進(jìn)程喚醒原語Wakeup)喚醒原語的描述Procedurewakeup(n)Begini:=GetInternalName(n);remove(WQ(r),i);i.status:=“Ready”;i.sdata:=RQ;insert(RQ,i);continue;End;從相應(yīng)的等待隊(duì)列中摘下被喚醒的進(jìn)程狀態(tài)置為“就緒態(tài)ready”插入就緒隊(duì)列喚醒進(jìn)程返回或轉(zhuǎn)進(jìn)程調(diào)度3.3進(jìn)程控制Procedurewakeup(n)從相應(yīng)3.3.2進(jìn)程控制的主要原語——掛起原語Suspend引起進(jìn)程掛起的事件:掛起原語的執(zhí)行過程是:首先檢查被掛起進(jìn)程的狀態(tài),若處于活動(dòng)就緒狀態(tài),便將其改為靜止就緒;對(duì)于活動(dòng)阻塞狀態(tài)的進(jìn)程,則將之改為靜止阻塞。最后,若被掛起的進(jìn)程正在執(zhí)行,則轉(zhuǎn)向調(diào)度程序重新調(diào)度。-或父進(jìn)程請(qǐng)求將自己的某個(gè)子進(jìn)程掛起,-系統(tǒng)將利用掛起原語suspend()將指定進(jìn)程或處于阻塞狀態(tài)的進(jìn)程掛起。-用戶進(jìn)程請(qǐng)求將自己掛起;3.3.2進(jìn)程控制的主要原語——掛起原語Suspend引3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——掛起原語SuspendPrimitive掛起原語的描述procedureSuspend(n,a)/*掛起指定標(biāo)識(shí)符n的Begin進(jìn)程的進(jìn)程原語*/i:=GetInternalName(n);/*參數(shù)a是用于保存該S:=i.status;進(jìn)程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進(jìn)程控制procedureSuspend(n,a3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——激活原語

Active進(jìn)程的激活過程系統(tǒng)將利用激活原語active()將指定進(jìn)程激活。激活原語先將進(jìn)程從外存調(diào)入內(nèi)存,檢查該進(jìn)程的現(xiàn)行狀態(tài),若是靜止就緒,便將之改為活動(dòng)就緒;若為靜止阻塞便將之改為活動(dòng)阻塞。3.3進(jìn)程控制進(jìn)程的激活過程3.3進(jìn)程控制3.3.2進(jìn)程控制的主要原語——激活原語

ActivePrimitive激活原語的描述procedureactive(n)/*n為進(jìn)程標(biāo)志符*/begini:=GetInternalName(n);i.status:=ifi.status=“readys”then“readya”else“blockeda”;ifi.status=“readya”thenscheduler;elsecontinueEnd;3.3進(jìn)程控制procedureactive(n)例:NT線程的掛起和激活 NT中處理機(jī)的分配對(duì)象為線程,一個(gè)線程可被多次掛起和多次激活。在線程內(nèi)有一個(gè)掛起計(jì)數(shù)(suspendcount),掛起操作使該計(jì)數(shù)加1,激活操作將該計(jì)數(shù)減1;當(dāng)掛起計(jì)數(shù)為0時(shí),線程恢復(fù)執(zhí)行。(1)掛起:WindowsNT中的SuspendThread可掛起指定的線程;DWORDSuspendThread(HANDLEhThread//handletothethread);(2)激活:WindowsNT中的ResumeThread可恢復(fù)指定線程的執(zhí)行;DWORDResumeThread(HANDLEhThread//identifiesthreadtorestart);例:NT線程的掛起和激活 NT中處理機(jī)的分配對(duì)象為線程,一例子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;運(yùn)行結(jié)果CreateThreadMainThread0SubThread0SubThread1MainThread1Suspendthreadisok.MainThread2MainThread3Resumethreadisok.SubThread2SubThread3MainThread4SubThread4運(yùn)行結(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í)間,輸出順序會(huì)有變化 }}此處是用戶自己的函數(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é)果會(huì)有變化。 }} inti;運(yùn)行結(jié)果CreateThreadMainThread0//輸出后。Sleep(4000)SubThread0//輸出后,Sleep(2000)SubThread1//輸出后,Sleep(2000)MainThread1//輸出后。Sleep(4000)Suspendthreadisok.MainThread2MainThread3Resumethreadisok.//輸出后。Sleep(4000)SubThread2SubThread3MainThread4SubThread4進(jìn)程創(chuàng)建后只要通過進(jìn)程調(diào)度獲得cpu,就自動(dòng)執(zhí)行!運(yùn)行結(jié)果CreateThread進(jìn)程創(chuàng)建后只要通過進(jìn)程調(diào)度獲3.4線程(THREAD)

引入線程的目的是簡(jiǎn)化進(jìn)程間的通信,以小的開銷來提高進(jìn)程內(nèi)的并發(fā)程度。3.4線程(THREAD)引入線程的目的是簡(jiǎn)化進(jìn)程間的通信3.4.1線程的引入進(jìn)程:資源分配單位(存儲(chǔ)器、文件)和CPU調(diào)度(分派)單位-未引入線程時(shí)。又稱為“任務(wù)(task)“線程:作為CPU調(diào)度單位,而引入線程后進(jìn)程只作為其他資源分配單位。只擁有必不可少的資源,如:線程狀態(tài)、寄存器上下文和棧同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài)線程的優(yōu)點(diǎn):減小并發(fā)執(zhí)行的時(shí)間和空間開銷(線程的創(chuàng)建、退出和調(diào)度),因此容許在系統(tǒng)中建立更多的線程來提高并發(fā)程度。線程的創(chuàng)建時(shí)間比進(jìn)程短;線程的終止時(shí)間比進(jìn)程短;同進(jìn)程內(nèi)的線程切換時(shí)間比進(jìn)程短;由于同進(jìn)程內(nèi)線程間共享內(nèi)存和文件資源,可直接進(jìn)行不通過內(nèi)核的通信;3.4.1線程的引入進(jìn)程:資源分配單位(存儲(chǔ)器、文件)和C進(jìn)程與線程的關(guān)系進(jìn)程與線程的關(guān)系3.4.2線程的屬性

線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故又稱為輕型進(jìn)程(1)輕型實(shí)體。(線程是進(jìn)程中的一個(gè)實(shí)體)(2)獨(dú)立調(diào)度和分派的基本單位。在多線程OS中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。而把進(jìn)程作為資源擁有的單位。由于線程很“輕’’,故線程的切換非常迅速且開銷小。(3)可并發(fā)執(zhí)行。

(4)共享進(jìn)程資源。3.4.2線程的屬性線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故3.4.3OS對(duì)線程的實(shí)現(xiàn)方式內(nèi)核維護(hù)進(jìn)程和線程的上下文信息;線程切換由內(nèi)核完成;一個(gè)線程發(fā)起系統(tǒng)調(diào)用而阻塞,不會(huì)影響其他線程的運(yùn)行。時(shí)間片分配給線程,所以多線程的進(jìn)程獲得更多CPU時(shí)間。依賴于OS核心,由內(nèi)核的內(nèi)部需求進(jìn)行創(chuàng)建和撤銷,用來執(zhí)行一個(gè)指定的函數(shù)。WindowsNT和OS/2支持內(nèi)核線程;1)內(nèi)核線程(kernel-levelthread)3.4.3OS對(duì)線程的實(shí)現(xiàn)方式內(nèi)核維護(hù)進(jìn)程和線程的上下文信2)用戶線程(user-levelthread)用戶線程的維護(hù)由應(yīng)用進(jìn)程完成;內(nèi)核不了解用戶線程的存在;用戶線程切換不需要內(nèi)核特權(quán);用戶線程調(diào)度算法可針對(duì)應(yīng)用優(yōu)化;不依賴于OS核心,應(yīng)用進(jìn)程利用線程庫提供創(chuàng)建、同步、調(diào)度和管理線程的函數(shù)來控制用戶線程。如:數(shù)據(jù)庫系統(tǒng)informix,圖形處理AldusPageMaker。調(diào)度由應(yīng)用軟件內(nèi)部進(jìn)行,通常采用非搶先式和更簡(jiǎn)單的規(guī)則,也無需用戶態(tài)/核心態(tài)切換,所以速度特別快。一個(gè)線程發(fā)起系統(tǒng)調(diào)用而阻塞,則整個(gè)進(jìn)程在等待。時(shí)間片分配給進(jìn)程,多線程則每個(gè)線程就慢。2)用戶線程(user-levelthread)用戶線程的

例:線程執(zhí)行時(shí)間對(duì)于只設(shè)置了用戶級(jí)線程的系統(tǒng),調(diào)度是以進(jìn)程為單位的,在采用輪轉(zhuǎn)調(diào)度算法時(shí),各個(gè)進(jìn)程輪流執(zhí)行一個(gè)時(shí)間片,這對(duì)諸進(jìn)程而言,看似公平的,但假如在A進(jìn)程中包含了一個(gè)用戶級(jí)線程,而在另一個(gè)進(jìn)程B中含有100個(gè)線程,這樣,進(jìn)程A中線程的運(yùn)行時(shí)間,將是進(jìn)程B中線程運(yùn)行時(shí)間的100倍;相應(yīng)地,速度就快100倍。假如系統(tǒng)中是設(shè)置的內(nèi)核支持線程,其調(diào)度是以線程為單位進(jìn)行的,這樣,進(jìn)程B可以獲得的CPU時(shí)間是進(jìn)程A的100倍,進(jìn)程B可使100個(gè)系統(tǒng)調(diào)用并發(fā)工作。例:線程執(zhí)行時(shí)間3.4.4Solaris操作系統(tǒng)中的線程同時(shí)實(shí)現(xiàn)了用戶級(jí)線程與內(nèi)核支持線程。

SUN

SolarisOS在用戶級(jí)線程和內(nèi)核級(jí)線程之間,定義了一種輕型進(jìn)程LWP(內(nèi)核控制線程,也稱為輕權(quán)進(jìn)程),一個(gè)進(jìn)程中至少有一個(gè)LWP。3.4.4Solaris操作系統(tǒng)中的線程同時(shí)實(shí)現(xiàn)了用戶級(jí)線Solaris支持內(nèi)核線程(Kernelthreads)、輕權(quán)進(jìn)程(LightweightProcesses)和用戶線程(UserLevelThreads)。一個(gè)進(jìn)程可有大量用戶線程;大量用戶線程復(fù)用少量的輕權(quán)進(jìn)程,不同的輕權(quán)進(jìn)程分別對(duì)應(yīng)不同的內(nèi)核線程。Solaris支持內(nèi)核線程(Kernelthreads)、用戶級(jí)線程在使用系統(tǒng)調(diào)用時(shí)(如文件讀寫),需要“捆綁(bound)”在一個(gè)LWP上,用戶級(jí)線程可通過LWP訪問內(nèi)核,但內(nèi)核所看到的總是多個(gè)LWP,而看不到用戶級(jí)線程。永久捆綁:一個(gè)LWP固定被一個(gè)用戶級(jí)線程占用,該LWP移到LWP池之外臨時(shí)捆綁:從LWP池中臨時(shí)分配一個(gè)未被占用的LWP在使用系統(tǒng)調(diào)用時(shí),如果所有LWP已被其他用戶級(jí)線程所占用(捆綁),則該線程阻塞直到有可用的LWP--例如6個(gè)用戶級(jí)線程,而LWP池中有4個(gè)LWP如果LWP執(zhí)行系統(tǒng)調(diào)用時(shí)阻塞(如read()調(diào)用),則當(dāng)前捆綁在LWP上的用戶級(jí)線程也阻塞。每個(gè)要通信的用戶級(jí)線程都需要一個(gè)LWP用戶級(jí)線程在使用系統(tǒng)調(diào)用時(shí)(如文件讀寫),需要“捆綁(bouSolaris用戶線程和輕權(quán)進(jìn)程Solaris用戶線程和輕權(quán)進(jìn)程用戶線程、輕權(quán)進(jìn)程LWP和核心線程的關(guān)系同時(shí)有4個(gè)用戶級(jí)線程發(fā)出對(duì)文件的讀寫請(qǐng)求,而任務(wù)中只有3個(gè)LPW,則3個(gè)用戶級(jí)線程可執(zhí)行讀寫請(qǐng)求,余下的必須等用戶線程、輕權(quán)進(jìn)程LWP和核心線程的關(guān)系同時(shí)有4個(gè)用戶級(jí)線程有關(guān)的C庫函數(shù)/*創(chuàng)建用戶級(jí)線程 */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池),若兩者同時(shí)指定則創(chuàng)建兩個(gè)新LWP,一個(gè)永久捆綁而另一個(gè)放入LWP池有關(guān)的系統(tǒng)調(diào)用/*在當(dāng)前進(jìn)程中創(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);/*注意:沒有進(jìn)行"捆綁"操作的系統(tǒng)調(diào)用*/有關(guān)的C庫函數(shù)/*創(chuàng)建用戶級(jí)線程 */有關(guān)的系統(tǒng)調(diào)用3.4.5進(jìn)程和線程的關(guān)系(1)線程是進(jìn)程的一個(gè)組成部分。每個(gè)進(jìn)程在創(chuàng)建時(shí)通常只有一個(gè)線程,需要時(shí)這個(gè)線程可以創(chuàng)建其它線程。(2)進(jìn)程的多線程都在進(jìn)程的地址空間活動(dòng)。-某進(jìn)程內(nèi)的線程在其他進(jìn)程不可見。(3)資源是分給進(jìn)程的,而不是分給線程的,線程在執(zhí)行中需要資源時(shí),系統(tǒng)從進(jìn)程的資源配額中扣除并分配給它。(4)處理機(jī)調(diào)度的基本單位是線程,線程之間競(jìng)爭(zhēng)處理機(jī),真正在處理機(jī)上運(yùn)行的是線程。(5)線程在執(zhí)行過程中,需要同步。3.4.5進(jìn)程和線程的關(guān)系11/18/2022第三章

進(jìn)程管理11/10/2022第三章進(jìn)程管理概述進(jìn)程的描述進(jìn)程控制線程進(jìn)程互斥和同步進(jìn)程間通信死鎖問題進(jìn)程其他方面的舉例為了描述程序在并發(fā)執(zhí)行時(shí)對(duì)系統(tǒng)資源的共享,需要一個(gè)描述程序執(zhí)行時(shí)動(dòng)態(tài)特征的概念,這就是進(jìn)程。本章將討論進(jìn)程概念、進(jìn)程控制和進(jìn)程間關(guān)系。概述進(jìn)程互前趨圖:是一個(gè)有向無循環(huán)圖。

前趨圖用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。

圖中的每個(gè)結(jié)點(diǎn)可用于描述一個(gè)程序段或進(jìn)程,乃至一條語句;結(jié)點(diǎn)間的有向邊則用于表示兩個(gè)結(jié)點(diǎn)之間存在的偏序或前趨關(guān)系“→”。節(jié)點(diǎn)概述:前趨圖:是一個(gè)有向無循環(huán)圖。前趨圖用于描述進(jì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í)行時(shí)的特征

順序性:按照程序結(jié)構(gòu)所指定的次序(2)封閉性(運(yùn)行時(shí)候獨(dú)占處理機(jī)資源,運(yùn)行結(jié)果不受外界影響)-程序可再現(xiàn)性:(3)可再現(xiàn)性(初始條件相同,結(jié)果相同)程序順序執(zhí)行時(shí)的特征順序性:按照程序結(jié)構(gòu)所指定的次序3.1.2程序的并發(fā)執(zhí)行及其特征

3.1.2程序的并發(fā)執(zhí)行及其特征3.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的目的:提高計(jì)算機(jī)的處理能力提高資源利用率分為兩種形式:多道程序環(huán)境下的多道程序的并發(fā)執(zhí)行在某道程序的幾個(gè)程序段中,包含可同時(shí)執(zhí)行或可顛倒順序執(zhí)行的代碼。3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行定義:程序的并發(fā)執(zhí)行是指一組在邏輯上互相獨(dú)立的程序或程序段在執(zhí)行時(shí)間上客觀上互相重疊,即一個(gè)程序或程序段的執(zhí)行尚未結(jié)束,另一個(gè)程序(段)的執(zhí)行已經(jīng)開始的執(zhí)行方式。并發(fā):在一段時(shí)間內(nèi)的同時(shí)并行并行:在同一物理時(shí)刻的同時(shí)3.1.2程序的并發(fā)執(zhí)行3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請(qǐng)求帶輸入啟動(dòng)帶磁帶輸入結(jié)束中斷中斷處理請(qǐng)求磁盤輸入啟動(dòng)盤結(jié)束中斷中斷處理CPU外設(shè)請(qǐng)求盤輸入啟動(dòng)盤,調(diào)度B請(qǐng)求帶輸入啟動(dòng)帶結(jié)束中斷中斷處理調(diào)度A結(jié)束中斷中斷處理調(diào)度B時(shí)間t用戶程序監(jiān)督程序磁盤設(shè)備磁帶設(shè)備用戶程序A用戶程序B監(jiān)督程序磁盤設(shè)備磁帶設(shè)備3.1.2程序的并發(fā)執(zhí)行CPU外設(shè)請(qǐng)求帶輸入啟動(dòng)帶磁帶輸入3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時(shí)的前趨圖在該例中存在下述前趨關(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í)行。如何實(shí)現(xiàn)并發(fā)執(zhí)行?3.1.2程序的并發(fā)執(zhí)行圖2-3并發(fā)執(zhí)行時(shí)的前趨圖在對(duì)于具有下述四條語句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b請(qǐng)畫出前趨關(guān)系圖。對(duì)于具有下述四條語句的程序段:3.1.2程序并發(fā)執(zhí)行時(shí)的特征

間斷性(相互制約性)-“走走停停”,一個(gè)程序可能走到中途停下來,失去原有的時(shí)序關(guān)系;失去封閉性:多個(gè)程序共享系統(tǒng)中的各種資源,因而這些資源的狀態(tài)將由多個(gè)程序來改變,致使程序的運(yùn)行已失去了封閉性。如:一個(gè)程序?qū)懙酱鎯?chǔ)器中的數(shù)據(jù)可能被另一個(gè)程序修改,失去原有的不變特征。不可再現(xiàn)性:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,也將導(dǎo)致失去其可再現(xiàn)性下面看個(gè)小例子:3.1.2程序并發(fā)執(zhí)行時(shí)的特征間斷性(相互制約性)-“例如,有兩個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N。程序A每執(zhí)行一次時(shí),都要做N∶=N+1操作;程序B每執(zhí)行一次時(shí),都要執(zhí)行Print(N)操作,然后再將N置成“0”。程序A和B以不同的速度運(yùn)行。(1)N∶=N+1在Print(N)和N∶=0之前,此時(shí)得到的N值分別為n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此時(shí)得到的N值分別為n,0,1。(3)N∶=N+1在Print(N)和N∶=0之間,此時(shí)得到的N值分別為n,n+1,0。例如,有兩個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N結(jié)論:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,其計(jì)算結(jié)果已經(jīng)和并發(fā)執(zhí)行速度有關(guān),從而使程序失去了可再現(xiàn)性,亦即,程序經(jīng)過多次執(zhí)行后,雖然他們執(zhí)行時(shí)的環(huán)境和初始條件相同,但得到的結(jié)果卻不相同。結(jié)論:程序在并發(fā)執(zhí)行時(shí),由于失去了封閉性,其計(jì)算結(jié)果已經(jīng)和并

順序執(zhí)行:并發(fā)執(zhí)行:程序具有封閉性程序失去封閉性獨(dú)享資源共享資源(互為存在條件)可再現(xiàn)性程序與“計(jì)算”不再一一對(duì)應(yīng)有相互制約操作系統(tǒng)湯子英課件第二章進(jìn)程管理高中信息技術(shù)課件教案人教版3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

——程序的并發(fā)執(zhí)行并發(fā)執(zhí)行的條件:達(dá)到封閉性和可再現(xiàn)性

并發(fā)執(zhí)行失去封閉性的原因是共享資源的影響,去掉這種影響即可。1966年,由Bernstein給出并發(fā)執(zhí)行的條件。(這里沒有考慮執(zhí)行速度的影響。)。程序P(i)針對(duì)的讀變量集和寫變量集為R(i)和W(i)。任意兩個(gè)程序P(i)和P(j)可并發(fā)的條件:R(i)W(j)=W(i)R(j)=保證一個(gè)程序的兩次讀之間數(shù)據(jù)不變化W(i)W(j)=保證寫的結(jié)果不丟掉現(xiàn)在的問題是這個(gè)條件不好檢查。怎么辦?3.1概述3.1概述3.1.1程序的順序執(zhí)行和并發(fā)執(zhí)行

——程序的并發(fā)執(zhí)行程序活動(dòng)不再處于一個(gè)封閉系統(tǒng)中,呈現(xiàn)了獨(dú)立性、并發(fā)性、動(dòng)態(tài)性以及它們之間的相互制約性。“程序”這個(gè)靜態(tài)概念已經(jīng)不能如實(shí)地反映程序活動(dòng)的這些特征,為此,引入“進(jìn)程”這一動(dòng)態(tài)概念來描述系統(tǒng)和用戶的程序活動(dòng)。程序進(jìn)程3.1概述程序活動(dòng)不再處于一個(gè)封閉系統(tǒng)中,呈現(xiàn)了獨(dú)立性、并3.1概述3.1.2進(jìn)程的定義進(jìn)程是程序的一次執(zhí)行;一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過程。簡(jiǎn)言之,進(jìn)程是程序的一次執(zhí)行活動(dòng)進(jìn)程是程序在一個(gè)數(shù)據(jù)集合上運(yùn)行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位;進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時(shí)所發(fā)生的活動(dòng);3.1概述3.1概述3.1.2進(jìn)程的定義——進(jìn)程的特征動(dòng)態(tài)性:進(jìn)程對(duì)應(yīng)程序的執(zhí)行進(jìn)程是動(dòng)態(tài)產(chǎn)生:創(chuàng)建運(yùn)行消亡進(jìn)程在其生命周期內(nèi),在三種基本狀態(tài)之間轉(zhuǎn)換獨(dú)立性:各進(jìn)程的地址空間相互獨(dú)立,除非采用進(jìn)程間通信手段;并發(fā)性:指多個(gè)進(jìn)程實(shí)體同存于內(nèi)存中,且能在一段時(shí)間內(nèi)同時(shí)運(yùn)行;異步性:每個(gè)進(jìn)程都以其相對(duì)獨(dú)立的不可預(yù)知的速度向前推進(jìn);結(jié)構(gòu)化:進(jìn)程=代碼段+數(shù)據(jù)段+PCB;3.1概述3.1概述3.1.2進(jìn)程與程序的區(qū)別進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的:炒菜菜譜進(jìn)程是暫時(shí)的,程序的永久的:進(jìn)程是一個(gè)狀態(tài)變化的過程,程序可長(zhǎng)久保存。進(jìn)程與程序的組成不同:進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊(即進(jìn)程狀態(tài)信息)。進(jìn)程與程序的對(duì)應(yīng)關(guān)系:通過多次執(zhí)行,一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程;通過調(diào)用關(guān)系,一個(gè)進(jìn)程可包括多個(gè)程序。進(jìn)程具有并行特征,程序沒有。進(jìn)程是競(jìng)爭(zhēng)計(jì)算機(jī)資源的基本單位。3.1概述程序與進(jìn)程的類比

程序進(jìn)程唱歌的曲譜或音樂樂器的樂譜

演出或演奏

劇本

演出

火車

列車

程序與進(jìn)程的類比

程序進(jìn)程唱歌的1、判斷題:進(jìn)程是一個(gè)程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進(jìn)程對(duì)應(yīng)不同的程序。分析:進(jìn)程是程序在某數(shù)據(jù)集上得一次執(zhí)行,但是不同進(jìn)程可以對(duì)應(yīng)同一程序。2、程序順序執(zhí)行與并發(fā)執(zhí)行有什么不同?3、用戶程序必須在進(jìn)程中運(yùn)行。正確4、判斷題:兩次打開Word字處理程序,編輯同一篇文章,因?yàn)槌绦蛞粯?Word2003),數(shù)據(jù)一樣(同一篇文章),所以系統(tǒng)中運(yùn)行的這兩個(gè)Word字處理程序是同一個(gè)進(jìn)程。錯(cuò)誤,運(yùn)行的是2個(gè)不同的進(jìn)程1、判斷題:進(jìn)程是一個(gè)程序在某數(shù)據(jù)集上的一次執(zhí)行,所以不同進(jìn)3.1概述3.1.2進(jìn)程的定義——進(jìn)程與程序的區(qū)別用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)步…..線程線程…..進(jìn)程進(jìn)程…..3.1概述用戶作業(yè)由用戶創(chuàng)建由用戶指定由系統(tǒng)創(chuàng)建作業(yè)步作業(yè)3.2.1進(jìn)程的組成

進(jìn)程=程序+數(shù)據(jù)+進(jìn)程控制塊PCB

有人把這三部分稱為”進(jìn)程映像”.程序是進(jìn)程的不可缺少的組成部分;如果一個(gè)程序段允許被共享,則它應(yīng)該是可重入的,或純代碼段數(shù)據(jù)是進(jìn)程處理的對(duì)象進(jìn)程控制塊是進(jìn)程的控制結(jié)構(gòu),包含了進(jìn)程的描述信息、控制信息和資源信息以及現(xiàn)場(chǎng)保護(hù)區(qū),是進(jìn)程的唯一標(biāo)識(shí),系統(tǒng)通過PCB管理和控制進(jìn)程。

通常的程序是不能并發(fā)執(zhí)行的,為使程序能并發(fā)執(zhí)行,應(yīng)為之配置一進(jìn)程控制塊,即PCB;所謂創(chuàng)建進(jìn)程是指創(chuàng)建進(jìn)程實(shí)體中的PCB,撤銷亦如此。3.2.1進(jìn)程的組成3.2進(jìn)程的描述3.2.2進(jìn)程控制塊PCB

(ProcessControlBlock)進(jìn)程控制塊是由OS維護(hù)的用來記錄進(jìn)程相關(guān)信息和管理進(jìn)程而設(shè)置的一個(gè)專門的數(shù)據(jù)結(jié)構(gòu)包含了進(jìn)程的描述信息、控制信息和資源信息以及現(xiàn)場(chǎng)保護(hù)區(qū)PCB是進(jìn)程動(dòng)態(tài)特性的集中反映系統(tǒng)通過PCB感知進(jìn)程的存在,通過PCB中所包含的各項(xiàng)變量的變化,掌握進(jìn)程的狀態(tài)以達(dá)到控制進(jìn)程活動(dòng)的目的3.2進(jìn)程的描述3.2進(jìn)程的描述3.2.2進(jìn)程控制塊PCB

(ProcessControlBlock)PCB結(jié)構(gòu)的全部或部分常駐內(nèi)存;PCB隨進(jìn)程的創(chuàng)建而填寫,隨進(jìn)程的撤消而釋放,有生命周期;系統(tǒng)利用PCB來控制和管理進(jìn)程,所以PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志進(jìn)程與PCB是一一對(duì)應(yīng)的3.2進(jìn)程的描述3.2.3進(jìn)程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進(jìn)程標(biāo)識(shí)符:內(nèi)部進(jìn)程標(biāo)識(shí)符(processID),唯一,通常是一個(gè)整數(shù);進(jìn)程名(外部標(biāo)識(shí)符),通?;诳蓤?zhí)行文件名(不唯一);用戶標(biāo)識(shí)符(userID);進(jìn)程組關(guān)系(processgroup)進(jìn)程控制信息:當(dāng)前狀態(tài);優(yōu)先級(jí)(priority);代碼執(zhí)行入口地址;程序的外存地址;運(yùn)行統(tǒng)計(jì)信息(執(zhí)行時(shí)間、頁面調(diào)度);進(jìn)程間同步和通信;阻塞原因進(jìn)程調(diào)度信息:進(jìn)程狀態(tài)、進(jìn)程優(yōu)先級(jí)、資源信息等處理機(jī)狀態(tài):寄存器值(通用、程序計(jì)數(shù)器PC、狀態(tài)PSW,地址包括棧指針)3.2.3進(jìn)程控制塊的內(nèi)容(數(shù)據(jù)結(jié)構(gòu)很復(fù)雜)進(jìn)程標(biāo)識(shí)符:3.2.4PCB的組織方式鏈表:同一狀態(tài)的進(jìn)程其PCB成一鏈表,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表各狀態(tài)的進(jìn)程形成不同的鏈表:就緒鏈表、阻塞鏈表索引表:同一狀態(tài)的進(jìn)程歸入一個(gè)index表(由index指向PCB),多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的index表各狀態(tài)的進(jìn)行形成不同的索引表:就緒索引表、阻塞索引表3.2.4PCB的組織方式鏈表:同一狀態(tài)的進(jìn)程其PCB成OS是根據(jù)PCB來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。簡(jiǎn)單題:進(jìn)程控制塊的作用(要擴(kuò)展)?判斷題:進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志。OS是根據(jù)PCB來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。運(yùn)行Running就緒Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2進(jìn)程的描述3.2.5進(jìn)程的狀態(tài)及其轉(zhuǎn)換——進(jìn)程的三種基本狀態(tài)基本狀態(tài)間的轉(zhuǎn)換運(yùn)行就緒等待DispatchTimeoutEventW圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換(教材講5種)

結(jié)束新進(jìn)程接納完成圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換結(jié)束新進(jìn)程接納完成作業(yè)后備隊(duì)列進(jìn)程就緒隊(duì)列外存內(nèi)存作業(yè)調(diào)度一些處理器(CPU)阻塞隊(duì)列阻塞隊(duì)列處理機(jī)調(diào)度器(進(jìn)程調(diào)度):是操作系統(tǒng)中的一段代碼,它完成如下功能:1)把處理機(jī)從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程;2)防止某進(jìn)程獨(dú)占處理機(jī)作業(yè)后備隊(duì)列進(jìn)程就緒隊(duì)列外存內(nèi)存作業(yè)調(diào)度3.2.5進(jìn)程的三種基本狀態(tài)

1)就緒(Ready)狀態(tài):已分配到除CPU以外的所有必要的資源,只要能再獲得處理機(jī),便可立即執(zhí)行的狀態(tài)。多個(gè)排成一隊(duì)稱為就緒隊(duì)列。2)執(zhí)行狀態(tài):指進(jìn)程已獲得處理機(jī),其程序正在執(zhí)行;在單處理機(jī)系統(tǒng)中,只能有一個(gè)進(jìn)程處于執(zhí)行狀態(tài);在多處理機(jī)系統(tǒng)中,則可能多個(gè)進(jìn)程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài):進(jìn)程因發(fā)生某事件(如請(qǐng)求I/O、申請(qǐng)緩沖空間等)而暫停執(zhí)行時(shí)的狀態(tài),亦即進(jìn)程的執(zhí)行受到阻塞,故稱這種暫停狀態(tài)為阻塞狀態(tài),有時(shí)也稱為“等待”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論