進(jìn)程的描述與控制(part2)_第1頁
進(jìn)程的描述與控制(part2)_第2頁
進(jìn)程的描述與控制(part2)_第3頁
進(jìn)程的描述與控制(part2)_第4頁
進(jìn)程的描述與控制(part2)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第二章進(jìn)程管理2.1前驅(qū)圖和程序執(zhí)行

2.2進(jìn)程的描述2.3進(jìn)程控制2.4進(jìn)程同步2.5經(jīng)典進(jìn)程的同步問題2.6進(jìn)程通信2.7線程的基本概念2.8線程的實現(xiàn)21.程序順序執(zhí)行時的特征順序性:(2)封閉性:(3)可再現(xiàn)性:2.程序并發(fā)執(zhí)行時的特征間斷性2)失去封閉性3)不可再現(xiàn)性簡單回顧3程序與進(jìn)程之間的區(qū)別進(jìn)程更能真實地描述并發(fā),而程序不能進(jìn)程是由程序,數(shù)據(jù)和控制塊三部分組成的程序是靜態(tài)的,進(jìn)程是動態(tài)的進(jìn)程有生命周期,有誕生有消亡,短暫的;而程序是相對長久的一個程序可對應(yīng)多個進(jìn)程,反之亦然進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而程序沒有4

較典型的進(jìn)程定義有:

(1)進(jìn)程是程序的一次執(zhí)行。

(2)進(jìn)程是一個程序及其數(shù)據(jù)在處理機(jī)上順序執(zhí)行時所發(fā)生的活動。

(3)進(jìn)程是程序在一個數(shù)據(jù)集合上運(yùn)行的過程,它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位。在引入了進(jìn)程實體的概念后,我們可以把傳統(tǒng)OS中的進(jìn)程定義為:“進(jìn)程是進(jìn)程實體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位”。52.進(jìn)程的三種基本狀態(tài)執(zhí)行(Running)狀態(tài)進(jìn)程占有CPU,并在CPU上運(yùn)行2)就緒狀態(tài)一個進(jìn)程已經(jīng)具備運(yùn)行條件,但由于無CPU暫時不能運(yùn)行的狀態(tài)(當(dāng)調(diào)度給其CPU時,立即可以運(yùn)行)3)阻塞狀態(tài)又叫等待態(tài)、封鎖態(tài)、睡眠態(tài)指進(jìn)程因等待某種事件的發(fā)生而暫時不能運(yùn)行的狀態(tài)(即使CPU空閑,該進(jìn)程也不可運(yùn)行)圖2-5進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換就緒就緒阻塞執(zhí)行I/O完成I/O請求進(jìn)程調(diào)度時間片完6增加:創(chuàng)建狀態(tài),終止?fàn)顟B(tài)三種進(jìn)程狀態(tài)->五狀態(tài)進(jìn)程模型創(chuàng)建(新new)狀態(tài)OS已完成為創(chuàng)建一進(jìn)程所必要的工作已構(gòu)造了進(jìn)程標(biāo)識符已創(chuàng)建了管理進(jìn)程所需的表格但還沒有允許執(zhí)行該進(jìn)程(尚未同意)

因為資源有限終止(退出exit)狀態(tài)中止后進(jìn)程移入該狀態(tài)它不再有執(zhí)行資格表格和其它信息暫時由輔助程序保留一旦其他進(jìn)程完成了對終止態(tài)進(jìn)程的信息抽取之后,系統(tǒng)將刪除該進(jìn)程。71.掛起操作的引入由于進(jìn)程的不斷創(chuàng)建,系統(tǒng)資源已不能滿足進(jìn)程運(yùn)行的要求,就必須把某些進(jìn)程掛起(suspend),對換到磁盤鏡像區(qū)中,暫時不參與進(jìn)程調(diào)度,起到平滑系統(tǒng)操作負(fù)荷的目的。原因:(1)終端用戶的請求:修改程序(2)父進(jìn)程請求:對子進(jìn)程的修改等(3)負(fù)荷調(diào)節(jié)的需要:資源不足(4)操作系統(tǒng)的需要:檢查資源利用情況2.2.3.掛起操作和進(jìn)程狀態(tài)的轉(zhuǎn)換82.進(jìn)程狀態(tài)的轉(zhuǎn)換活動就緒→靜止就緒。(2)活動阻塞→靜止阻塞。(3)靜止就緒→活動就緒。(4)靜止阻塞→活動阻塞。圖2-7具有掛起狀態(tài)的進(jìn)程狀態(tài)圖執(zhí)行→靜止就緒。

掛起

激活

就緒狀態(tài)(Ready):進(jìn)程在內(nèi)存且可立即進(jìn)入運(yùn)行狀態(tài)阻塞狀態(tài)(Blocked):進(jìn)程在內(nèi)存并等待某事件的出現(xiàn)靜止阻塞/阻塞掛起狀態(tài)(Blocked,suspend):進(jìn)程在外存并等待某事件的出現(xiàn)靜止就緒/就緒掛起狀態(tài)(Ready,suspend):進(jìn)程在外存,但只要進(jìn)入內(nèi)存,即可運(yùn)行9七狀態(tài)進(jìn)程模型活動掛起事件發(fā)生事件發(fā)生等待事件掛起調(diào)度超時釋放活動掛起掛起(Suspend):把一個進(jìn)程從內(nèi)存轉(zhuǎn)到外存可能有以下幾種情況活動阻塞→靜止阻塞:沒有進(jìn)程處于就緒狀態(tài)或就緒進(jìn)程要求更多內(nèi)存資源時,發(fā)生這種轉(zhuǎn)換,以提交新進(jìn)程或運(yùn)行就緒進(jìn)程活動就緒→靜止就緒:當(dāng)有高優(yōu)先級阻塞(系統(tǒng)認(rèn)為會很快就緒的)進(jìn)程和低優(yōu)先級就緒進(jìn)程時,系統(tǒng)會選擇掛起低優(yōu)先級就緒進(jìn)程運(yùn)行→靜止就緒:對搶占式系統(tǒng),當(dāng)有高優(yōu)先級靜止阻塞進(jìn)程因事件出現(xiàn)而進(jìn)入靜止就緒時,系統(tǒng)可能會把運(yùn)行進(jìn)程轉(zhuǎn)到靜止就緒狀態(tài)10七狀態(tài)進(jìn)程模型活動掛起事件發(fā)生事件發(fā)生等待事件掛起調(diào)度超時釋放活動掛起激活(Activate):把一個進(jìn)程從外存轉(zhuǎn)到內(nèi)存;可能有以下幾種情況:靜止就緒→活動就緒:沒有就緒進(jìn)程或掛起就緒進(jìn)程優(yōu)先級高于就緒進(jìn)程時,發(fā)生轉(zhuǎn)換靜止阻塞→活動阻塞:當(dāng)一個進(jìn)程釋放足夠內(nèi)存時,系統(tǒng)會把一個高優(yōu)先級阻塞掛起進(jìn)程(系統(tǒng)認(rèn)為會很快出現(xiàn)所等待的事件)轉(zhuǎn)換為阻塞狀態(tài)。11可中斷的睡眠狀態(tài)的進(jìn)程會睡眠直到某個條件變?yōu)檎妫绠a(chǎn)生一個硬件中斷、釋放進(jìn)程正在等待的系統(tǒng)資源或是傳遞一個信號都可以是喚醒進(jìn)程的條件??芍袛嗟乃郀顟B(tài)的進(jìn)程會睡眠直到某個條件變?yōu)檎妫绠a(chǎn)生一個硬件中斷、釋放進(jìn)程正在等待的系統(tǒng)資源或是傳遞一個信號都可以是喚醒進(jìn)程的條件。

可中斷的睡眠狀態(tài)的進(jìn)程會睡眠直到某個條件變?yōu)檎?,如產(chǎn)生一個硬件中斷、釋放進(jìn)程正在等待的系統(tǒng)資源或是傳遞一個信號都可以是喚醒進(jìn)程的條件。

只能被如硬件中斷、正在等待的系統(tǒng)資源被釋放等喚醒,對其他進(jìn)程傳遞的信號不響應(yīng)。12進(jìn)程程序用戶所要執(zhí)行的語句序列,必須有進(jìn)程數(shù)據(jù)用戶程序所要處理的數(shù)據(jù)數(shù)據(jù)量可大可小,也可以沒有棧用于過程調(diào)用和參數(shù)傳遞進(jìn)程控制塊PCB(進(jìn)程屬性)處于核心段用戶進(jìn)程不能直接訪問、修改自己的PCB*進(jìn)程要素132.1.4進(jìn)程管理中的數(shù)據(jù)結(jié)構(gòu)1.操作系統(tǒng)中用于管理控制的數(shù)據(jù)結(jié)構(gòu)內(nèi)存設(shè)備文件進(jìn)程內(nèi)存表設(shè)備表文件表進(jìn)程1進(jìn)程2進(jìn)程n…進(jìn)程1…進(jìn)程n進(jìn)程實體及所用資源列表圖2-9操作系統(tǒng)控制表的一般結(jié)構(gòu)142.進(jìn)程控制塊PCB的作用

進(jìn)程控制塊的作用是使一個在多道程序環(huán)境下不能獨立運(yùn)行的程序(含數(shù)據(jù)),成為一個能獨立運(yùn)行的基本單位,一個能與其它進(jìn)程并發(fā)執(zhí)行的進(jìn)程?;蛘哒f,OS是根據(jù)PCB來對并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的。系統(tǒng)為了管理進(jìn)程設(shè)置的一個專門的數(shù)據(jù)結(jié)構(gòu),用它來記錄進(jìn)程的外部特征,描述進(jìn)程的運(yùn)動變化過程

系統(tǒng)利用PCB來控制和管理進(jìn)程,所以PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志進(jìn)程與PCB是一一對應(yīng)的/include/linux/sched.h中structtask_struct15PCB的內(nèi)容163.進(jìn)程控制塊中的信息

1)進(jìn)程標(biāo)識符進(jìn)程標(biāo)識符用于唯一地標(biāo)識一個進(jìn)程。兩種標(biāo)識符:(1)內(nèi)部標(biāo)識符。

在所有的操作系統(tǒng)中,都為每一個進(jìn)程賦予一個唯一的數(shù)字標(biāo)識符,它通常是一個進(jìn)程的序號。設(shè)置內(nèi)部標(biāo)識符主要是為了方便系統(tǒng)使用。

(2)外部標(biāo)識符。

它由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往是由用戶(進(jìn)程)在訪問該進(jìn)程時使用。為了描述進(jìn)程的家族關(guān)系,還應(yīng)設(shè)置父進(jìn)程標(biāo)識及子進(jìn)程標(biāo)識。此外,還可設(shè)置用戶標(biāo)識,以指示擁有該進(jìn)程的用戶。PCB中的信息包含:進(jìn)程標(biāo)識符,處理機(jī)狀態(tài),進(jìn)程調(diào)度信息,進(jìn)程控制信息。17

2)處理機(jī)狀態(tài)處理機(jī)狀態(tài)信息主要是由處理機(jī)的各種寄存器中的內(nèi)容組成的。

①通用寄存器

用戶可視寄存器,它們是用戶程序可以訪問的,用于暫存信息;

②指令計數(shù)器,存放了要訪問的下一條指令的地址;

③程序狀態(tài)字PSW,其中含有狀態(tài)信息,如條件碼(體現(xiàn)當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息。如有無進(jìn)位(CY位),有無溢出(OV位),結(jié)果正負(fù)(SF位),結(jié)果是否為零(ZF位),奇偶標(biāo)志位(P位)等)、執(zhí)行方式、中斷屏蔽標(biāo)志等;

④用戶棧指針

指每個用戶進(jìn)程都有一個或若干個與之相關(guān)的系統(tǒng)棧,用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址。棧指針指向該棧的棧頂。18

3)進(jìn)程調(diào)度信息在PCB中還存放一些與進(jìn)程調(diào)度和進(jìn)程對換有關(guān)的信息,包括:

①進(jìn)程狀態(tài);②進(jìn)程優(yōu)先級;③進(jìn)程調(diào)度所需的其它信息;④事件,即阻塞原因。19

4)進(jìn)程控制信息進(jìn)程控制信息包括:①程序和數(shù)據(jù)的地址;②進(jìn)程同步和通信機(jī)制;③資源清單;④鏈接指針。是指進(jìn)程的程序和數(shù)據(jù)所在的內(nèi)存或外存地(首)址,以便再調(diào)度到該進(jìn)程執(zhí)行時,能從PCB中找到其程序和數(shù)據(jù)指實現(xiàn)進(jìn)程同步和進(jìn)程通信時必需的機(jī)制,如消息隊列指針、信號量等,它們可能全部或部分地放在PCB中是一張列出了除CPU以外的、進(jìn)程所需的全部資源及已經(jīng)分配到該進(jìn)程的資源的清單它給出了本進(jìn)程(PCB)所在隊列中的下一個進(jìn)程的PCB的首地址20PCB的內(nèi)容進(jìn)程描述信息進(jìn)程控制信息CPU現(xiàn)場保護(hù)信息注意:不同操作系統(tǒng)中對進(jìn)程的控制和管理機(jī)制不一樣,PCB中的信息多少也不一樣213.進(jìn)程控制塊的組織方式1)鏈接方式(Linux采用)圖2-11PCB鏈接隊列示意圖鏈接方式,索引方式222)索引方式圖2-12按索引方式組織PCB2324第二章進(jìn)程管理2.1前驅(qū)圖和程序執(zhí)行

2.2進(jìn)程的描述2.3進(jìn)程控制2.4進(jìn)程同步2.5經(jīng)典進(jìn)程的同步問題2.6進(jìn)程通信2.7線程的基本概念2.8線程的實現(xiàn)252.3進(jìn)程控制2.3.1操作系統(tǒng)內(nèi)核處理器管理的一個主要工作是對進(jìn)程的控制,包括:創(chuàng)建進(jìn)程、阻塞進(jìn)程、喚醒進(jìn)程、掛起進(jìn)程、激活進(jìn)程、終止進(jìn)程和撤銷進(jìn)程等現(xiàn)代OS一般采用分層結(jié)構(gòu)與硬件緊密相關(guān)的模塊常用設(shè)備的驅(qū)動程序運(yùn)行頻率較高的模塊硬件A0A1?AnOS內(nèi)核保護(hù)軟件;提高OS效率26處理機(jī)的執(zhí)行狀態(tài):系統(tǒng)態(tài)(管態(tài)),內(nèi)核態(tài)

可執(zhí)行特權(quán)指令,訪問所有的寄存器和存儲區(qū)用戶態(tài)(目態(tài))

可執(zhí)行非特權(quán)指令,訪問指定的寄存器和存儲區(qū)一般OS內(nèi)核的功能:支撐功能

中斷處理、時鐘管理、原語操作資源管理功能

進(jìn)程管理、存儲器管理、設(shè)備管理272.3.2進(jìn)程的創(chuàng)建1.進(jìn)程的層次結(jié)構(gòu)

圖2-13進(jìn)程樹2.進(jìn)程圖(ProcessGraph)父進(jìn)程:創(chuàng)建進(jìn)程的進(jìn)程。子進(jìn)程:被創(chuàng)建的進(jìn)程。各自工作區(qū),僅共享父進(jìn)程打開的文件283.引起創(chuàng)建進(jìn)程的事件用戶登錄。(2)作業(yè)調(diào)度。(3)提供服務(wù)。(4)應(yīng)用請求。在終端上交互式的登錄。系統(tǒng)為用戶創(chuàng)建一個進(jìn)程,并插入就緒隊列

提交一個批處理作業(yè)。操作系統(tǒng)為用戶請求創(chuàng)建一個服務(wù)進(jìn)程。存在的進(jìn)程孵化(spawn)新的進(jìn)程。用戶進(jìn)程自己創(chuàng)建進(jìn)程294.進(jìn)程的創(chuàng)建(CreationofProgress)

(1)申請空白PCB。

(2)為新進(jìn)程分配資源。

(3)初始化進(jìn)程控制塊。

(4)將新進(jìn)程插入就緒隊列,或直接投入運(yùn)行。302.3.3進(jìn)程的終止1.引起進(jìn)程終止(TerminationofProcess)的事件

1)正常結(jié)束在任何計算機(jī)系統(tǒng)中,都應(yīng)有一個用于表示進(jìn)程已經(jīng)運(yùn)行完成的指示。例如,在批處理系統(tǒng)中,通常在程序的最后安排一條Holt指令或終止的系統(tǒng)調(diào)用。當(dāng)程序運(yùn)行到Holt指令時,將產(chǎn)生一個中斷,去通知OS本進(jìn)程已經(jīng)完成。在分時系統(tǒng)中,用戶可利用Logsoff去表示進(jìn)程運(yùn)行完畢,此時同樣可產(chǎn)生一個中斷,去通知OS進(jìn)程已運(yùn)行完畢。312)異常結(jié)束在進(jìn)程運(yùn)行期間,由于出現(xiàn)某些錯誤和故障而迫使進(jìn)程終止。這類異常事件很多,常見的有:

①越界錯誤。程序所訪問的存儲區(qū),已越出該進(jìn)程的區(qū)域;

②保護(hù)錯。進(jìn)程試圖去訪問一個不允許訪問的資源或文件,或者以不適當(dāng)?shù)姆绞竭M(jìn)行訪問,例如,進(jìn)程試圖去寫一個只讀文件;③非法指令。程序試圖去執(zhí)行一條不存在的指令。出現(xiàn)該錯誤的原因,可能是程序錯誤地轉(zhuǎn)移到數(shù)據(jù)區(qū),把數(shù)據(jù)當(dāng)成了指令;

④特權(quán)指令錯。用戶進(jìn)程試圖去執(zhí)行一條只允許OS執(zhí)行的指令;

⑤運(yùn)行超時。進(jìn)程的執(zhí)行時間超過了指定的最大值;⑥等待超時。進(jìn)程等待某事件的時間,超過了規(guī)定的最大值;

⑦算術(shù)運(yùn)算錯。進(jìn)程試圖去執(zhí)行一個被禁止的運(yùn)算,例如,被0除;

⑧I/O故障。指在I/O過程中發(fā)生了錯誤等。323)外界干預(yù)外界干預(yù)并非指在本進(jìn)程運(yùn)行中出現(xiàn)了異常事件,而是指進(jìn)程應(yīng)外界的請求而終止運(yùn)行。這些干預(yù)有:

①操作員或操作系統(tǒng)干預(yù)。由于某種原因,例如,發(fā)生了死鎖,由操作員或操作系統(tǒng)終止該進(jìn)程;

②父進(jìn)程請求。由于父進(jìn)程具有終止自己的任何子孫進(jìn)程的權(quán)利,因而當(dāng)父進(jìn)程提出請求時,系統(tǒng)將終止該進(jìn)程;

③父進(jìn)程終止。當(dāng)父進(jìn)程終止時,OS也將他的所有子孫進(jìn)程終止。332.進(jìn)程的終止過程

(1)根據(jù)被終止進(jìn)程的標(biāo)識符,從PCB集合中找出該進(jìn)程的PCB,從中讀出該進(jìn)程的狀態(tài)。

(2)若被終止進(jìn)程正處于執(zhí)行狀態(tài),應(yīng)立即終止該進(jìn)程的執(zhí)行,并置調(diào)度標(biāo)志為真,用于指示該進(jìn)程被終止后應(yīng)重新進(jìn)行調(diào)度。

(3)若該進(jìn)程還有子孫進(jìn)程,還應(yīng)將其所有子孫進(jìn)程予以終止,以防他們成為不可控的進(jìn)程。

(4)將被終止進(jìn)程所擁有的全部資源,或者歸還給其父進(jìn)程,或者歸還給系統(tǒng)。

(5)將被終止進(jìn)程(它的PCB)從所在隊列(或鏈表)中移出,將它的PCB歸還到PCB池。342.3.4進(jìn)程的阻塞與喚醒1.引起進(jìn)程阻塞和喚醒的事件請求系統(tǒng)服務(wù)2)啟動某種操作3)新數(shù)據(jù)尚未到達(dá)4)無新工作可做352.進(jìn)程阻塞過程

正在執(zhí)行的進(jìn)程,當(dāng)發(fā)現(xiàn)上述某事件時,由于無法繼續(xù)執(zhí)行,于是進(jìn)程便通過調(diào)用阻塞原語block把自己阻塞。可見,進(jìn)程的阻塞是進(jìn)程自身的一種主動行為。

進(jìn)入block過程后,由于此時該進(jìn)程還處于執(zhí)行狀態(tài),所以應(yīng)①立即停止執(zhí)行,保存現(xiàn)場信息到PSW;②把進(jìn)程控制塊中的現(xiàn)行狀態(tài)由“執(zhí)行”改為阻塞,③將PCB插入阻塞隊列。如果系統(tǒng)中設(shè)置了因不同事件而阻塞的多個阻塞隊列,則應(yīng)將本進(jìn)程插入到具有相同事件的阻塞(等待)隊列。最后,轉(zhuǎn)調(diào)度程序進(jìn)行重新調(diào)度,將處理機(jī)分配給另一就緒進(jìn)程,并進(jìn)行切換,亦即,保留被阻塞進(jìn)程的處理機(jī)狀態(tài)(在PCB中),再按新進(jìn)程的PCB中的處理機(jī)狀態(tài)設(shè)置CPU的環(huán)境。363.進(jìn)程喚醒過程當(dāng)被阻塞進(jìn)程所期待的事件出現(xiàn)時,如I/O完成或其所期待的數(shù)據(jù)已經(jīng)到達(dá),則由有關(guān)進(jìn)程(比如,用完并釋放了該I/O設(shè)備的進(jìn)程)調(diào)用喚醒原語wakeup(),將等待該

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論