二.進程(1)進程的基本概念

第二章 進程管理

2.1 進程的基本概念

在傳統(tǒng)的操作系統(tǒng)中,程序并不能獨立運行,作為資源分配和獨立運行的基本單位都是進程。

2.1.1 程序的順序執(zhí)行及其特征

1、程序的順序執(zhí)行

把一個應用程序分成若干個程序段,在各程序段之間,必須按照某種先后次序順序執(zhí)行,僅當前一操作(程序段)執(zhí)行完后,才能執(zhí)行后及操作。

2、程序順序執(zhí)行時的特征

1)順序性

處理機的操作嚴格按照程序所規(guī)定的順序執(zhí)行,即每一操作必須在上一個操作結(jié)束之后開始

2)封閉性

程序是在封閉環(huán)境下執(zhí)行的,即程序運行時獨占全機資源,資源的狀態(tài)(除初始狀態(tài)外)只有本程序才能改變它。程序一旦執(zhí)行,其執(zhí)行結(jié)果不受外界因素影響。

3)可再現(xiàn)性

只要程序執(zhí)行是的環(huán)境和初始條件相同,當程序重復執(zhí)行時,不論它是從頭到尾不停頓的執(zhí)行,還是斷續(xù)執(zhí)行,都將獲得相同的結(jié)果

2.1.2 前趨圖

前趨圖(Precedence Graph)是一個有向無循環(huán)圖,記為DAG(Directed Acyclic Graph),用于描述進程之間之行的前后關(guān)系。如圖:

圖中的每個節(jié)點可用于描述一個程序段或進程,乃至一條語句;節(jié)點間的有向邊表示兩個節(jié)點之間存在的偏序關(guān)系(Partial Order)或者前趨關(guān)系(Precedence Relation)“→”。

→={(Pi,Pj)|Pi must complete before Pj may start},如果(Pi,Pj)∈→,可寫成Pi→Pj,稱Pi是Pj的直接前趨,而稱Pj是Pi的直接后繼。在前趨圖中,把沒有前趨的結(jié)點稱為初始結(jié)點(Initial Node),把沒有后繼的結(jié)點稱為終止結(jié)點(Final Node)。此外,每個結(jié)點還具有一個重量(Weight),用于表示該結(jié)點所含有的程序量或結(jié)點的執(zhí)行時間。在圖2-1(a)和2-1(b)中分別存在著這樣的前趨關(guān)系:

Ii→Ci→Pi? 和? S1→S2→S3

對于圖2-2(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

或表示為:

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)}

應當注意,前趨圖中必須不存在循環(huán),但在圖2-2(b)中卻有這下述的前趨關(guān)系:

S2→S3,S3→S2

顯然,這種前趨關(guān)系是不可能滿足的。

2.1.3 程序的并發(fā)執(zhí)行及其特征

1、程序的并發(fā)執(zhí)行

輸入程序在輸入第一個程序后,在計算程序?qū)υ摮绦蜻M行計算的同時,可由輸入程序再輸入第二個程序,從而使第一個程序的計算操作可與第二個程序的輸入操作并發(fā)執(zhí)行。一般來說,輸入程序在輸入第 i+1個程序時,計算程序可能正在對第 i 個程序進行計算,而答應程序正在打印第 i-1個程序的計算結(jié)果。

2、程序并發(fā)執(zhí)行時的特征

1)間斷性

程序在并發(fā)執(zhí)行時,由于它們共享系統(tǒng)資源,以及為完成同一項任務而相互合作,致使在這些并發(fā)執(zhí)行的程序之間,形成了相互制約的關(guān)系。相互制約將導致并發(fā)程序具有“執(zhí)行——暫停——執(zhí)行”這種間斷性的活動規(guī)律。

2)失去封閉性

程序在并發(fā)執(zhí)行時,是多個程序共享系統(tǒng)中的各種資源。因而這些資源的狀態(tài)將有多個程序來改變,致使程序的運行失去了封閉性。這樣,某程序在執(zhí)行時,必然會受到其他程序的影響。

3)不可再現(xiàn)性

程序在并發(fā)執(zhí)行時,失去了封閉性,計算結(jié)果已與并發(fā)程序的執(zhí)行速度有關(guān),從而使程序的執(zhí)行失去了可再現(xiàn)性,亦即,程序經(jīng)過多次執(zhí)行后,雖然它們執(zhí)行時的環(huán)境和初始條件相同,但得到的結(jié)果卻各不相同。

2.1.4 進程的特征與狀態(tài)

1、進程的特征和定義

1)結(jié)構(gòu)特征

通常的程序是不能并發(fā)執(zhí)行的。為使程序(含數(shù)據(jù))能獨立運行,應為之配置一進程控制塊,即 PCB(Process Control Block):而由程序段、相關(guān)的數(shù)據(jù)段和 PCB 三部分便構(gòu)成了進程實體。在早期的 UNIX 版本中,把這三部分總稱為“進程映像”。在許多情況下所說的進程,實際上是指進程實體,如,所謂創(chuàng)建進程,實質(zhì)上是創(chuàng)建進程實體中的 PCB;而撤銷進程,實質(zhì)上是撤銷進程的 PCB。

2)動態(tài)性

進程的實質(zhì)是進程實體的一次執(zhí)行過程,因此,動態(tài)性是進程的最基本特征。進程實體有一定的生命期,而程序則只是一組有序指令的集合,并存放區(qū)某種介質(zhì)上,其本身并不具有運動的含義,因而是靜態(tài)的。

3)并發(fā)性

并發(fā)性是指多個進程實體同存于內(nèi)存中,且能在一段時間內(nèi)同時運行。并發(fā)性是進程的重要特征,同時也成為 OS 的重要特征。引入進程的目的也正是為了使其進程實體能和其它進程實體并發(fā)執(zhí)行;而程序(沒有建立 PCB)是不能進行并發(fā)執(zhí)行的。

4)獨立性

在傳統(tǒng)的 OS 中,獨立性是指進程實體是一個能獨立運行、獨立分配資源和獨立接受調(diào)度的基本單位。凡未建立 PCB 的程序都不能作為一個獨立的單位參與運行

5)異步性

這是指進程按各自獨立、不可預知的速度向前推進,或說進程實體按異步方式運行。

①進程是程序的一次執(zhí)行

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

③進程是程序在一個數(shù)據(jù)集合上運行的過程,它是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位

在引入了進程實體的概念后,我們可以把傳統(tǒng)的 OS 中的進程定義為:“進程是進程實體的運行過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位”。

2、進程的三種基本狀態(tài)

1)就緒狀態(tài)

當進程已分配到除 CPU 以外的所有必要資源后,只要再獲得 CPU,便可立即執(zhí)行,進程這時的狀態(tài)稱為就緒狀態(tài)。在一個系統(tǒng)中處于就緒狀態(tài)的進程可能有多個,通常將它們排成一個隊列,稱為就緒隊列。

2)執(zhí)行狀態(tài)

進程已獲得 CPU,其程序正在執(zhí)行。在單處理機系統(tǒng)中,只有一個進程處于執(zhí)行狀態(tài);在多處理機系統(tǒng)中,則有多個進程處于執(zhí)行狀態(tài)。

3)阻塞狀態(tài)

正在執(zhí)行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄處理機而處于暫停狀態(tài),亦即進程的執(zhí)行收到阻塞,把這種暫停狀態(tài)成為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)。

致使進程阻塞的典型事件有:請求 I/O,申請緩沖空間等。

3、掛起狀態(tài)

1)引入掛起狀態(tài)的原因

①終端用戶的請求

②父進程請求

③負荷調(diào)節(jié)的需要

④操作系統(tǒng)的需要

2)進程狀態(tài)的轉(zhuǎn)換

①活動就緒→靜止就緒

②活動阻塞→靜止阻塞

③靜止就緒→活動就緒

④靜止阻塞→活動阻塞

4、創(chuàng)建狀態(tài)和終止狀態(tài)

1)創(chuàng)建狀態(tài)

創(chuàng)建一個進程一般要通過兩個步驟:首先,為一個新進程創(chuàng)建 PCB,并填寫必要的管理信息;其次,把該進程轉(zhuǎn)入就緒狀態(tài)并插入就緒隊列中,當一個新進程被創(chuàng)建時,系統(tǒng)已為其分配了 PCB,填寫了進程標識等信息,但由于該進程所必須的資源或其他信息,如主存資源尚未分配時等,一般而言,此時的進程已擁有了自己的 PCB,但進程自身還未進入主存,即創(chuàng)建工作尚未完成,進程還不能被調(diào)度運行,其所處的狀態(tài)就是創(chuàng)建狀態(tài)。

引入創(chuàng)建狀態(tài),是為了保證進程的調(diào)度必須在創(chuàng)建工作完成后進行,以確保對進程控制塊操作的完整性。同時,創(chuàng)建狀態(tài)的引入,也增加了管理的靈活性,操作系統(tǒng)可以根據(jù)系統(tǒng)性能或主存容量的限制,推遲創(chuàng)建狀態(tài)進程的提交。對于處于創(chuàng)建狀態(tài)的進程,獲得了其所必須的資源,以及對其 PCB 初始化工作完成后,進程狀態(tài)便可由創(chuàng)建狀態(tài)轉(zhuǎn)入就緒狀態(tài)。

2)終止狀態(tài)

進程的終止也要通過兩個步驟:首先等待操作系統(tǒng)進行善后處理,然后將其 PCB 清零,并將 PCB 空間返還系統(tǒng)。當一個進程到達了自然結(jié)束點,或是出現(xiàn)了無法克服的錯誤,或是被操作系統(tǒng)所終結(jié),或是被其他有終止權(quán)的進程所終結(jié),它將進入終止狀態(tài)。進入終止狀態(tài)的進程以后不能再執(zhí)行,但在操作系統(tǒng)中依然保留一個記錄,其中保存狀態(tài)碼和一些計時統(tǒng)計數(shù)據(jù),供其他進程收集。一旦其他進程完成了對終止狀態(tài)進程的信息提取之后,操作系統(tǒng)將刪除該進程。

如圖2-8所示,引進創(chuàng)建和終止狀態(tài)后,在進程狀態(tài)轉(zhuǎn)換時,相比較2-7所示的進程五狀態(tài)而言,需要增加考慮下面的幾種情況。

①NULL→創(chuàng)建:一個新進程產(chǎn)生時,該進程處于創(chuàng)建狀態(tài)。

②創(chuàng)建→活動就緒:在當前系統(tǒng)的性能和內(nèi)存的容量均允許的情況下,完成對進程創(chuàng)建的必要操作后,相應的系統(tǒng)進程將進程的狀態(tài)轉(zhuǎn)換為活動就緒狀態(tài)。

③創(chuàng)建→靜止就緒:考慮到系統(tǒng)當前資源狀況和性能要求,并不分配給新建進程所需資源,主要是主存資源,相應的系統(tǒng)進程將進程狀態(tài)轉(zhuǎn)換為靜止就緒狀態(tài),對換到外存,不再參與調(diào)度,此時進程創(chuàng)建工作尚未完成。

④執(zhí)行→終止:當一個進程到達了自然結(jié)束點,或是出現(xiàn)了無法克服的錯誤,或是被操作系統(tǒng)所終結(jié),或是被其他有終止權(quán)的進程所終結(jié),進程即進入終止狀態(tài)。

2.1.5 進程控制塊

1、進程控制塊的作用

為了描述和控制進程的運行,系統(tǒng)為每個進程定義了一個數(shù)據(jù)結(jié)構(gòu)——進程控制塊 PCB(Process Control Block),它是進程實體的一部分,是操作系統(tǒng)中最重要的記錄數(shù)據(jù)結(jié)構(gòu)。PCB 中記錄了操作系統(tǒng)所需的、用于描述進程的當前情況以及控制進程運行的全部信息。

進程控制塊的作用是使一個在多道程序環(huán)境下不能獨立運行的程序(含數(shù)據(jù)),成為一個能獨立運行的基本單位,一個能與其他進程并發(fā)執(zhí)行的進程。或者說,OS 是根據(jù) PCB 來對并發(fā)執(zhí)行的進程進行控制和管理的。

在進程的整個生命期中,系統(tǒng)總是通過 PCB 對進程進行控制的,亦即,系統(tǒng)時根據(jù)進程的 PCB 而不是任何別的什么而感知到該進程的存在的,所以說,PCB 是進程存在的唯一標志。

2、進程控制塊中的信息

1)進程標識符

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

②外部標識符:它由創(chuàng)建者提供,通常是由字母、數(shù)字組成,往往是由用戶(進程)在訪問該進程時使用。為了描述進程的家族關(guān)系,還應設(shè)置父進程標識及子進程標識。此外,還可以設(shè)置用戶標識,以指示擁有該進程的用戶。

2)處理及狀態(tài)

處理機狀態(tài)信息主要是由處理機的各種寄存器中的內(nèi)容組成的。處理機在運行時,許多信息都放在寄存器中,當處理機被中斷時,所有這些信息都必須保存在 PCB 中,以便在該進程重新執(zhí)行時,能從斷點繼續(xù)執(zhí)行。這些寄存器包括:①通用寄存器,又稱為用戶可視寄存器,它們是用戶程序可以訪問的,用于暫存信息,在大多數(shù)處理機中,有8~32個通用寄存器,在 RISC 結(jié)構(gòu)的計算機中可超過100個;②指令計數(shù)器,其中存放了要訪問的下一條指令的地址;③程序狀態(tài)字 PSW,其中含有狀態(tài)信息,如條件碼、執(zhí)行方式、中斷屏蔽標志等;④用戶棧指針,指每個用戶進程都有一個或若干個與之相關(guān)的系統(tǒng)棧,用于存放過程和系統(tǒng)調(diào)用參數(shù)及調(diào)用地址,棧指針指向該棧的棧頂。

3)進程調(diào)度信息

在 PCB 中還存放一些與進程調(diào)度和進程對換有關(guān)的信息,包括:①進程狀態(tài),指明進程的當前狀態(tài),作為進程調(diào)度和對換時的依據(jù);②進程優(yōu)先級,用于描述進程使用處理機的優(yōu)先級別的一個整數(shù),優(yōu)先級高德進程優(yōu)先獲得處理機;③進程調(diào)度所需的其他信息,它們與所采用的進程調(diào)度算法有關(guān),比如,進程已等待 CPU 的時間總和、進程已執(zhí)行的時間總和等;④事件,指進程由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)樽枞麪顟B(tài)所等待發(fā)生的事件,即阻塞原因。

4)進程控制信息

進程控制信息包括:①程序和數(shù)據(jù)的地址,指進程的程序和數(shù)據(jù)所在的內(nèi)存或外存地址,以便再調(diào)度到該進程執(zhí)行時,能從 PCB 中找到其程序和數(shù)據(jù);②進程同步和通信機制,指實現(xiàn)進程同步和進程通信時必須的機制,如消息隊列指針,信號量等,它們可能全部或部分地放在 PCB 中;③資源清單,即一張列出了出 CPU 以外的、進程所需的全部資源及已經(jīng)分配到該進程的資源的清單;④鏈接指針,它給出了本進程(PCB)所在隊列中的下一個進程的 PCB 的首地址。

3、進程控制塊的組織方式

1)鏈接方式

把具有同一狀態(tài)的 PCB,用其中的鏈接字鏈接成一個隊列。可以形成就緒隊列、若干個阻塞隊列和空白隊列等。對其中的就緒隊列常按進程優(yōu)先級的高低排列,把優(yōu)先級高的進程的 PCB 排在隊列前面。此外,也可根據(jù)阻塞原因的不同把處于阻塞狀態(tài)的進程的 PCB 排成等待 I/O 操作完成的隊列和等待分配內(nèi)存的隊列等。如圖:

2)索引方式

系統(tǒng)根據(jù)所有進程的狀態(tài)建立幾張索引表。例如,就緒索引表、阻塞索引表等,并把各索引表在內(nèi)的首地址記錄在內(nèi)存的一些專用單元中。在每個索引表的表目中,記錄具有相應狀態(tài)的某個 PCB 在 PCB 表中的地址。如圖:示出了索引方式的 PCB 組織。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 進程的描述與控制 1.前趨圖與程序執(zhí)行1.1 前趨圖介紹:描述程序先后執(zhí)行順序,又稱為有向無循環(huán)圖,可記為DAG(...
    孫夢翔閱讀 724評論 0 1
  • 1.內(nèi)存的頁面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠不再需要的頁面;如無這樣的...
    杰倫哎呦哎呦閱讀 3,316評論 1 9
  • 甄阜梁丘賜全軍覆沒的消息傳回了王莽耳中,已經(jīng)倉皇不得終日的王莽看出了舂陵軍的目標——宛城。 雖然天下已經(jīng)大亂,但大...
    梁知夏閱讀 2,939評論 12 51
  • 霧氣蒙蒙繞青山 想念的歌兒耳邊唱 天遙地遠思念如狂 手捧書卷看了又看 腦中一片空蕩蕩 心間念念不忘 天涼,莫忘加衣裳
    七加閱讀 320評論 3 3
  • 日精進:敬畏—進入—體驗—交給—持續(xù) 1,缺啥補啥,怕啥練啥; 2,切為我所用,所用為團隊家; 3,我想變,我要...
    我心在夢里丶等你閱讀 147評論 0 0