1、本文所以內容來自 著名高校課件和學生筆記(校園裡面經常見到有人高價買筆記)
2、任課教師不會提供參考文獻,所以只能對作者表示感謝,如果引用了您的作品,可以用回複方式補充參考文獻。
3、我不對文章無關問題進行解答,文章內容也比較難,我也很難解答您遇到的問題,如果發現BUG可以用回複方式幫我修正。
4、本課 電腦作業系統
,適用於電腦作業系統課、考研
本課其他部分的導航條見頁面底部
§3.1 進程的概念
§3.2 進程的描述
§3.3 進程狀態及其轉換
§3.4 進程式控制制
§3.1
進程的概念
• 現代作業系統的重要特點是程式的並發執行,及系
統所擁有的資源被共用和系統的使用者隨機地使用。
這三個特點是互相聯絡和互相依賴的,它們是互相
獨立的使用者如何使用有限的電腦系統資源的反映。
通常,作業系統的重要任務之一是使使用者充分、有
效地利用系統資源。採用一個什麼樣的概念,來描
述電腦程式的執行過程和作為資源分派的基本單
位才能充分反映作業系統的執行並發、資源共用及
使用者隨機的特點呢?這個概念就是進程。為了講清
進程的概念,以及引入進程概念的必要性等,下面
將從作業系統的特點講起。
2
3.1.1
程式的並發執行
1.
程式的順序執行
程式是一個在時間上按嚴格次序前後相繼的操作序
列,是一個靜態概念。程式體現了編程人員要求電腦
完成所要求功能時所應該採取的順序步驟。顯然,一個程
序只有經過執行才能得到最終結果,且一般使用者在編寫程
序時不考慮在自己的程式執行過程中還有其他使用者程式存
在這一事實。另外,電腦
CPU
是通過時序脈衝來控制順
序執行指令的。其執行過程可以描述為:
Repeat IR
← M
[pc
]
pc
← pc+1
1+〈 Execute (instruction in IR)
〉
Until CPU halt
iltnPUhCtal
3
• 這裡IR
為指令寄存器,pc
為程式計數器,M
為儲存空間。顯
然,程式的順序性與電腦硬體的順序性是一致的。我們
把一個具有獨立功能的程式獨佔處理機直至最終結束的過
程稱為程式的順序執行。程式的順序執行具有如下特點:
(1)
順序性
程式順序執行時,其執行過程可看作一系列嚴格按程
序規定的狀態轉移過程。
(2)
封閉性
程式執行得到的最終結果由給定的初始條件決定,不
受外界因素的影響。
(3)
可再現性
只要輸入的初始條件相同,則無論何時重複執行該程
序都會得到相同的結果。
4
2.
多道程式系統中程式執行環境的變化
在許多情況下,需要電腦能夠同時處理多個具有獨立
功能的程式。批處理系統、分時系統、即時系統以及網路與
分布式系統等都是這樣的系統。這樣的執行環境具有下述三
個特點:
(1)
獨立性
每道程式都是邏輯上獨立的,它們之間不存在
邏輯上的制約關係。
(2)
隨機性
在多道程式環境下,特別是在多使用者環境下,
程式和資料的輸入與執行開始時間都是隨機的。
(3)
資源共用
資源共用將導致對進程執行速度的制約。
5
3.
程式的並發執行
(1)
什麼是程式的並發執行
所謂並發執行,是為了增強電腦系統的處理能力和
提高資源使用率所採取的一種同時操作技術。程式的並發
執行可進一步分為兩種:第一種是多道程式系統的程式執
行環境變化所引起的多道程式的並發執行。由於資源的有
限性,多道程式的並發執行總是伴隨著資源的共用與競爭。
從而制約各道程式的執行速度。而無法作到在微觀上,也
就是在指令級上的同時執行。因此,儘管多道程式的並發
執行在宏觀上是同時進行的,但在微觀上仍是順序執行
的;第二種並發執行是在某道程式的幾個程式段中(例如
幾個程式),包含著一部分可以同時執行或順序顛倒執行
的代碼。例如語句:
6
read (a)
;
read (b)
;
• 它們既可以同時執行,也可顛倒次序執行。對於這
樣的語句,同時執行不會改變順序程式所具有的邏
輯性質。因此,可以採用並發執行來充分利用系統
資源以提高電腦的處理能力。
• 程式的並發執行可總結為:一組在邏輯上互相獨立
的程式或程式段在執行過程中,其執行時間在客觀
上互相重疊,即一個程式段的執行尚未結束,另一
個程式段的執行已經開始的這種執行方式。
• 程式的並發執行不同於程式的並存執行。程式的並
行執行是指一組程式按獨立的、非同步速度執行。
並存執行不等於時間上的重疊。可以將並發執行過
程描述為: 7
S0
Cobegin
P1
;P2
;...
Pn
Coend
Sn
• 這裡,S0
,Sn
分別表示並發程式段P1
,P2
,…
,Pn
開始執
行前和並發執行結束後的語句。P1
,P2
,…
,Pn
也可以由
同一程式段中的不同語句組成。1966
年Bernstein
提出了兩
相鄰語句S1
,S2
可以並發執行的條件:
• 將程式中任一語句Si
劃分為兩個變數的集合R(Si
)
和W(Si
iSW(
)
。
其中
R(Si
)={a1 a2
…
am}
,aj(j
=1
,…
,m)
• 是語句Si
在執行期間必須對其進行讀寫的變數;
8
W(Si
)={b1 b2
…
bn
}
,bj(j
jbj
=1
,…
,n)
• 是語句Si
在執行期間必須對其進行修改、訪問
的變數;
• 如果對於語句S1
和S2
,有
①
R(S1)
∩ W(S2)={
∮}
,
②
W(S1)
∩ R(S2)={
∮}
,
③
W(S1)
∩ W(S2)={
∮}
同時成立,則語句S1
和S2
是可以並發執行的。
9
(2)
程式的並發執行所帶來的影響
程式的並發執行充分地利用了系統資源,從而提
高了系統的處理能力,這是並發執行好的一方面。但
是,正如前面所提到的那樣,由於系統資源有限,程
序的並發執行必然導致資源共用和資源競爭,從而改
變程式的執行速度。如果並發執行的各程式段中語句
或指令滿足上述Bernstein
的三個條件,則認為並發執
行不會對執行結果的封閉性和可再現性產生影響(證
明略)。但在一般情況下,系統要判定並發執行的各
程式段是否滿足Bernstein
條件是相當困難的。從而,
如果並發執行的程式段不按照特定的規則和方法進行
資源共用和競爭,則其執行結果將不可避免地失去封
閉性和可再現性。下面的例子說明了這一點。
10
圖3.1
堆棧的取數和存數過程
11
• 例:設有堆棧S
,棧指標top
,棧中存放記憶體中相應
資料區塊地址(3.1(a)
)設有兩個程式段
getaddr(top
)
和reladdr(blk
erabkdl )
,其中getaddr(top
)
從給
定的top
所指棧中取出相應的記憶體資料區塊地址,而
reladdr(blk
erabkdl )
則將記憶體資料區塊地址blk
放入堆棧S
中。
getaddr(top
)
和reladdr(blk
erabkdl )
可分別描述為:
procedure
getaddr(top
)
begin
local r
r
←(top)
top
← top-1
1otpreturn(
r)
end
procedure
reladdr(blk
erabkdl )
12
begin
top
← top+1
1otp+
(top)
←
blk
end
• 顯然,如果上例中的getaddr
和
reladdr
程式段進行
順序執行,其執行結果具有封閉性和可再現性。但
如果對這兩個程式段採用並發執行,則在單CPU
系
統中,將有可能出現下述情況:
13
• 首先,程式段
reladdr
開始執行,準備釋放記憶體資料區塊
地址入棧。然而,當reladdr
執行到top
← top+1
語句時
(3.1(b)
),程式段getaddr
也開始執行且搶佔了
處理機,從而程式段reladdr
停在top
← top+1
處等待處
理機。getaddr
程式段的執行目的是要從對應的堆棧指
針top
所指的棧格中取出一個記憶體資料區塊地址,顯然,
由於reladdr
程式段的執行將指標top
升高了一格且未
放進適當的資料,getaddr
的執行結果是失敗的(
3.1(c)
)。另外,如果改變程式段getaddr
和
reladdr
的
執行順序或執行速度,又可得到不同的執行結果。這
說明了如下問題:在某些情況下,程式的並發執行使
得其執行結果不再具有封閉性和可再現性,且可能造
成程式出現錯誤。
14
• 上例中的程式段並發執行出現錯誤結果是由於兩程式
段共用資源堆棧S
,從而使得執行結果受執行速度影響。
一般情況下,並發執行的各程式段如果共用軟、硬體
資源,都會造成其執行結果受執行速度影響的局面。
顯然,這是程式設計人員不希望看到的。為了使得在
並發執行時不出現錯誤結果,必須採取某些措施來制
約、控制各並發程式段的執行速度。這在作業系統程
序設計中尤其重要,因為作業系統使用者隨機性與各道
程式邏輯獨立的特點將使得每個使用者程式所使用的軟、
硬體資源都受到其他並發程式的共用和競爭,從而得
到非預料的或不正確的結果。為了控制和協調各程式
段執行過程中的軟、硬體資源的共用和競爭,顯然,
必須應該有一個描述各程式段執行過程和共用資源的
基本單位。
15
• 從上述討論可以看出,由於程式的順序性、靜態性
以及孤立性,用程式段作為描述其執行過程和共用
資源的基本單位既增加作業系統設計和實現的複雜
性,也無法反映作業系統所應該具有的程式段執行
的並發性、使用者隨機性,以及資源共用等特徵。也
就是說,用程式作為描述其執行過程以及共用資源
的基本單位是不合適的。需要有一個能描述程式的
執行過程且能用來共用資源的基本單位。這個基本
單位被稱為進程(或任務)。
16
3.1.2
進程的定義
進程的概念是60
年代初期,首先在MIT
的
Multics
系統
和IBM
的
TSS/360
系統中引用的。從那以來,人們對進程下
過許多各式各樣的定義。
(1)
進程是可以並存執行的計算部分(S.E.Madnick
,
J.T.Donovan
);
(2)
進程是一個獨立的可以調度的活動(E.Cohen
,
D.Jofferson
);
(3)
進程是一抽象實體,當它執行某個任務時,將要分配和釋放
各種資源(P.Denning
);
(4)
行為的規則叫程式,程式在處理機上執行時的活動稱為進程
(E.W.Dijkstra
ijtsrakEDW.
);
(5)
一個進程是一系列逐一執行的操作,而操作的確切含義則有
賴於以何種詳盡程度來描述進程(Brinch
Hansen
),等等。
17
l以上進程的定義,儘管各有側重,但在本質上是
相同的。即主要注重進程是一個動態執行過程
這一概念。也可以這樣定義進程:一個具有獨立
功能的程式對某個資料集在處理機上的執行過程
和分配資源的基本單位。這裡,程式指一組操作
序列,而資料集則是接受程式規定操作的一組存
儲單元的內容。
l進程和程式是兩個既有聯絡又有區別的概念,它
們的區別和關係可簡述如下:
18
(1)
進程是一個動態概念,而程式則是一個靜態概念。程式是
指令的有序集合,沒有任何執行的含義。而進程則強調執
行過程,它動態地被建立,並被調度執行後消亡。
(2)
進程具有並行特徵,而程式沒有。由進程的定義可知,進
程具有並行特徵的兩個方面,即獨立性和非同步性。??也就是
說,在不考慮資源共用的情況下,各進程的執行是獨立
的,執行速度是非同步。顯然,由於程式不反映執行過
程,所以不具有並行特徵。
(3)
進程是競爭電腦系統資源的基本單位,從而其並行性受
到系統自己的制約。這裡,制約就是對進程獨立性和非同步
性的限制。
(4)
不同的進程可以包含同一程式,只要該程式所對應的資料
集不同。
19
3.1.3
作業和進程的關係
作業是使用者需要電腦完成某項任務時要求電腦所
作工作的集合。進程是已提交完畢程式的執行過程的描
述,是資源分派的基本單位。區別與關係:
(1)
作業是使用者向電腦提交任務的任務實體。在使用者向計算
機提交作業之後,系統將它放入外存中的作業等待隊列中
等待執行。而進程則是完成使用者任務的執行實體,是向系
統申請分配資源的基本單位。任一進程,只要它被建立,
總有相應的部分存在於記憶體中。
(2)
一個作業可由多個進程組成。且必須至少由一個進程組
成,但反過來不成立。
(3)
作業的概念主要用在批處理系統中。而進程的概念則用在
幾乎所有的多道系統中。
20
§3.2
進程的描述
從處理機的活動角度來看,又如何識別描述程式執行
活動的進程呢?顯然,系統中需要有描述進程存在和能夠
反映其變化的物理實體,即進程的靜態描述。進程的靜態
描述由三部分組成:進程式控制制塊PCB
,有關程式段和該程
序段對其進行操作的資料結構集。進程式控制制塊包含了有關
進程的描述資訊、控制資訊以及資源資訊,是進程動態特
征的集中反映。系統根據PCB
感知進程的存在和通過PCB
中所包含的各項變數的變化,掌握進程所處的狀態以達到
控制進程活動的目的。由於進程的PCB
是系統感知進程的
唯一實體,因此,在幾乎所有的多道作業系統中,一個進
程的PCB
結構都是全部或部分常駐記憶體的。
21
進程的程式部分描述進程所要完成的功能。
而資料結構集是程式在執行時必不可少的工作區
和操作對象。這兩部分是進程完成所需功能的物
質基礎。由於進程的這兩部分內容與控制進程的
執行及完成進程功能直接有關,因而,在大部分
多道作業系統中,這兩部分內容放在外存中,直
到該進程執行時再調入記憶體。下面分別介紹進程
的PCB結構、程式與資料結構集。
22
3.2.1
進程式控制制塊PCB
如上所述,PCB
包含一個進程的描述資訊、控
制資訊及資源資訊,有些系統中還有進程調度等待
所使用的現場保護區。PCB
集中反映一個進程的
動態特徵。在進程並發執行時,由於資源共用,帶
來各進程之間的相互制約。顯然,為了反映這些制
約關係和資源共用關係,在建立一個進程時,應首
先建立其
PCB
,然後才能根據PCB
中資訊對進程
實施有效管理和控制。當一個進程完成其功能之
後,系統則釋放PCB
,進程也隨之消亡。
一般來說,根據作業系統的要求不同,進程的
PCB
所包含的內容會多少有所不同。但是,下面所
示基本內容是必需的:
23
(1)
描述資訊
①
進程名或進程標識號
②
使用者名稱或使用者標識號
③
家族關係
(2)
控制資訊
①
進程目前狀態
進程在活動期間可分為就緒態、執行態和等待狀態。
②
進程優先順序
進程優先順序是選取進程佔有處理機的重要依據。與進
程優先順序有關的PCB
表項有:
a.
佔有CPU
時間;
b.
進程優先順序位移;
c.
佔據記憶體時間,等。
24
③
程式開始地址
④
各種計時資訊
給出進程佔有和利用資源的有關情況。
⑤
通訊資訊
通訊資訊用來說明該進程在執行過程中與別的進程所
發生的資訊交換情況。
(3)
資源管理資訊
PCB
中包含最多的是資源管理資訊,包括有關儲存空間
的資訊、使用輸入輸出裝置的資訊、有關檔案系統的資訊
等。這些資訊有:
①
佔用記憶體大小及其管理用資料結構指標,例如後述
記憶體管理中所用到的進程頁表指標等。
25
②
在某些複雜系統中,還有對換或覆蓋用的有關信
息,如對換程式段長度,對換外存地址等。這些信
息在進程申請、釋放記憶體中使用。
③
共用程式段大小及起始地址。
④
輸入輸出裝置的裝置號,所要傳送的資料長度、
緩衝區地址、緩衝區長度及所用裝置的有關資料結
構指標等。這些資訊在進程申請釋放裝置進行資料
傳輸中使用。
⑤
指向檔案系統的指標及有關標識等。進程可使用
這些資訊對檔案系統進行操作。
26
(4) CPU
現場保護結構
當前進程因等待某個事件而進入等待狀態或因某種事
件發生被中止在處理機上的執行時,為了以後該進程能在
被打斷處恢複執行,需要保護當前進程的
CPU
現場(或稱
進程上下文)。PCB
中設有專門的
CPU
現場保護結構,以
儲存退出執行時的進程現場資料。
總之,進程式控制制塊PCB
是系統感知進程存在的唯一實
體。通過對PCB
的操作,系統為有關進程分配資源從而使
得有關進程得以被調度執行;而完成進程所要求功能的程
序段的有關地址,以及程式段在進程過程中因某種原因被
停止執行後的現場資訊也都在PCB
中。最後,當進程執行
結束後,則通過釋放PCB
來釋放進程所佔有的各種資源。
27
由於PCB
中包含有較多的資訊,因此,一個
PCB
表往往要佔據較大的儲存空間(一般占幾百到
幾千個位元組)。在有的系統中,為了減少
PCB
對
記憶體的佔用量,只允許PCB
中最常用的部分,如
CPU
現場保護、進程描述資訊、控制資訊等常駐內
存。PCB
結構中的其他部分則存放於外存之中,
待該進程將要執行時與其他資料一起裝入記憶體。
近年來,物件導向技術已被用於作業系統設計。
在物件導向的作業系統中,進程的描述將採用其他
方式。
28
3.2.2
進程上下文
本節介紹包括程式段和資料集在內的內容相關的概念。
進程上下文實際上是進程執行活動全過程的靜態描述。
具體地說,進程上下文包括電腦系統中與執行該進程有
關的各種寄存器的值、程式段在經過編譯之後形成的機器
指令代碼集(或稱本文段)、資料集及各種堆棧值和PCB
結構(
圖3.2)
。這裡,有關寄存器和棧區的內容是重要的。例
如,沒有程式計數器PC
和程式狀態寄存器PS
,CPU
將無法
知道下條待執行指令的地址和控制有關操作。從而,從
CPU
是活動的觀點來靜態地看一個進程時,必須把有關寄
存器和棧區的內容也包括在其中。無論在何種系統中,進
程內容相關的各部分都必須按一定的規則有機地組合起來以
便於執行。
29
圖3.2
進程上下文結構
30
u進程上下文可按一定的執行層次組合,例如使用者級上
下文、系統級上下文等。顯然,一個進程的執行是在
該進程的上下文中執行,而當系統調度新進程佔有處
理機時,新老進程的上下文發生轉換。
u在UNIX System
Ⅴ中,進程上下文由使用者級上下文、
寄存器上下文以及系統級上下文組成。使用者級上下文
由進程的使用者程式段部分編譯而成的使用者本文段、用
戶資料、使用者棧等組成。而寄存器上下文則由程式寄
存器PC
、處理機狀態字寄存器PS
、棧指標和通用寄存
器的值組成。其中PC
給出CPU
將要執行的下條指令的
虛地址;PS
給出機器與該進程相關聯時的硬體狀態,
例如當前執行模式、能否執行特權指令等;棧指標指
向下一項的當前地址,而通用寄存器則用於不同執行
模式之間的參數傳遞等。
31
u進程的系統級上下文又分為靜態部分與動態部分。這裡的
動態部分不是指程式的執行,而是指在進入和退出不同的
上下文層次時,系統為各層上下文中相關聯的寄存器值所
儲存和恢複的記錄。
u系統級內容相關的靜態部分包括PCB
結構(UNIX
系統中的
PCB
結構被分為proc
結構和user
結構兩部分)、將進程虛地
址空間映射到物理空間用的有關表格和核心棧。這裡,核
心棧主要用來裝載進程中所使用系統調用的調用序列。
u系統級內容相關的動態部分是與寄存器上下文相關聯的。進
程內容相關的層次概念也主要體現在動態部分中,即系統級
內容相關的動態部分可看成是一些數量變化的層次組成。其
變化規則滿足先進後出的堆棧方式,每個上下文層次在棧
中各佔一項。
uUNIX System
Ⅴ的進程上下文組成3.3
。
32
圖3.3 UNIX System
Ⅴ進程上下文組成33
3.2.3
進程空間
任一進程,都有一個自己的地址空間,把該空間稱為進程空間或
虛空間。進程空間的大小隻與處理機的位元有關。例如,一個16
位長處
理機的進程空間大小為2
16
,而32
位長處理機的進程空間大小為2
32
。另
外,程式的執行都在進程空間內進行。使用者程式、進程的各種控製表格
等都按一定的結構排列在進程空間中。在UNIX
以及Linux
等作業系統
中,進程空間還被劃分為使用者空間和系統空間兩大部分。
圖3.4
進程空間
34
n 在進程空間被劃分為兩大部分後,使用者程式在使用者
空間內執行,而作業系統核心程式則在進程的系統
空間內執行。
n 另外,為了防止使用者程式訪問系統空間,造成訪問
出錯,電腦系統還通過程式狀態寄存器等設定不
同的執行模式,即使用者模式和系統模式來進行保護。
人們也把使用者執行模式和系統執行模式分別稱為用
戶態和系統態。
n 將在第5
章儲存管理部分中進一步描述進程空間。
35
§3.3
進程狀態及其轉換
3.3.1
進程狀態
u一個進程的生命期可以劃分為一組狀態,這些狀態
刻划了整個進程。系統根據PCB
結構中的狀態值
控制進程。在進程的生命期內,一個進程至少具有
三種基本狀態,它們是:執行狀態、等待狀態和就
緒狀態。
u處於就緒狀態的進程已經得到除
CPU
之外的其他
資源,只要由調度得到處理機,便可立即投入執行。
36
u在有些系統中,為了有效地利用記憶體,就緒狀態又
可進一步分為記憶體就緒狀態和外存就緒狀態。在這
樣的系統中,只有處於記憶體就緒狀態的進程在得到
處理機後才能立即投入執行。而處於外存就緒狀態
的進程只有先成為記憶體就緒狀態後,才可能被調度
執行。這種方式明顯地提高了記憶體的利用效率,但
反過來也增加了系統開銷和系統複雜性。
u在單CPU
系統中,任一時刻處於執行狀態的進程只
能有一個。只有處於就緒狀態的進程經調度選中之
後才可進入執行狀態。
37
u在某些作業系統中,一個進程在其生命期內的執行過程
中,總要涉及到使用者程式和作業系統核心程式兩部分。因
此,進程的執行狀態又可進一步劃分為使用者執行狀態和系
統執行狀態。劃分使用者態和系統態最主要的原因是要把用
戶程式和系統程式區分開來,以利於程式的共用和保護。
顯然,這也是以增加系統複雜度和系統開銷為代價的。
u進程因等待某個事件發生而放棄處理機進入等待狀態。顯
然,等待狀態可根據等待事件的種類而進一步劃分為不同
的子狀態,例如記憶體等待、裝置等待、檔案等待和資料等
待等。這樣做的好處是系統控制簡單,發現和喚醒相應的
進程較為容易。但系統中設定過多的狀態又會造成系統參
數和狀態轉換過程的增加。
38
3.3.2
進程狀態轉換
u進程的狀態反映進程執行過程的變化。這些狀態隨
著進程的執行和外界條件發生變化和轉換。那麼,
是什麼樣的條件使得進程各狀態發生轉換呢?圖
3.5
給出了三個基本狀態,即就緒狀態、執行狀態
與等待狀態之間的轉換關係。
u事實上,進程的狀態轉換是一個非常複雜的過程。
從一個狀態到另一個狀態的轉換除了要使用不同的
控制過程(將在下節中講述),有時還要藉助於硬
件觸發器才能完成。例如,在
UNIX
系統中,從系
統態到使用者態的轉換要藉助硬體觸發器完成。
39
圖3.5
進程狀態轉換
40
§3.4
進
程
控
制
進程和處理機管理的一個重要任務是進程式控制制。所
謂進程式控制制,就是系統使用一些具有特定功能的程式
段來建立、撤消進程以及完成進程各狀態間的轉換,
從而達到多進程高效率並發執行和協調、實現資源共
享的目的。一般地,把系統態下執行的某些具有特定
功能的程式段稱為原語。原語可分為兩類:一類是機
器指令級的,其特點是執行期間不允許中斷,正如在
物理學中的原子一樣,在作業系統中,它是一個不可
分割的基本單位。另一類是功能級的,其特點是作為
原語的程式段不允許並發執行。這兩類原語都在系統
態下執行,且都是為了完成某個系統管理所需要的功
能和被高層軟體所調用。
41
顯然,系統在建立、撤消一個進程以及要改變進
程的狀態時,都要調用相應的程式段來完成這些功能。
那麼,這些程式段是不是原語呢?如果它們不是原
語,則由上述原語的定義可知,這些程式段是允許並
發執行的。然而,如果不加控制和管理地讓這些控制
進程狀態轉換及建立和撤消進程的程式段並發執行,
則會使得其執行結果失去封閉性和可再現性,從而達
不到進程式控制制的目的。反過來,如果對這些程式段采
用下面章節中所述的控制方法使其在並發執行過程中
也能完成進程式控制制任務的話,將會大大增加系統的開
銷和複雜度。因此,在作業系統中,通常把進程式控制制
用程式段做成原語。用於進程式控制制的原語有:建立原
語、撤消原語、阻塞原語、喚醒原語等。
42
3.4.1
進程建立與撤消
1.
進程建立
(1)
由系統程式模組統一建立,例如在批處理系統中,由操作
系統的作業發送器為使用者作業建立相應的進程以完成用
戶作業所要求的功能。
(2)
由父進程建立,例如在階層的系統中,父進程建立子
進程以完成並行工作。
由系統統一建立的進程之間的關係是平等的,它們之間
一般不存在資源繼承關係。而在父進程建立的進程之間則
存在隸屬關係,且互相構成樹型結構的家族關係。屬於某
個家族的一個進程可以繼承其父進程所擁有的資源。另
外,無論是哪一種方式建立進程,在系統產生時,都必須
由作業系統建立一部分承擔系統資源分派和管理工作的系
統進程。
43
無論是系統建立方式還是父進程建立方式,都必須調
用建立原語來實現。建立原語掃描系統的PCB
鏈表,在找
到一定PCB
表之後,填入調用者提供的有關參數,最後形
成代表進程的PCB
結構。這些參數包括:進程名、進程優
先級P0
、進程本文段起始地址d0
、資源清單R0
等。其
實現過程3.6
。
2.
進程撤消
以下幾種情況導致進程被撤消:
(1)
該進程已完成所要求的功能而正常終止。
(2)
由於某種錯誤導致非正常終止。
(3)
祖先進程要求撤消某個子進程。
44
圖3.6
建立原語流圖45
u無論哪一種情況導致進程被撤消,進程都必須釋放它
所佔用的各種資源和PCB
結構本身,以利於資源的有
效利用。另外,當一個祖先進程撤消某個子進程時,
還需審查該子進程是否還有自己的子孫進程,若有的
話,還需撤消其子孫進程的
PCB
結構和釋放它們所佔
有的資源。
u撤消原語首先檢查
PCB
進程鏈或進程家族,尋找所要
撤消的進程是否存在。如果找到了所要撤消的進程的
PCB
結構,則撤消原語釋放該進程所佔有的資源之
後,把對應的
PCB
結構從進程鏈或進程家族中摘下並
返回給
PCB
空隊列。如果被撤消的進程有自己的子進
程,則撤消原語先撤消其子進程的
PCB
結構並釋放子
進程所佔用的資源之後,再撤消當前進程的
PCB
結構
和釋放其資源。3.7
。
46
圖3.7
撤消原語流圖47
3.4.2
進程的阻塞與喚醒
l進程的建立原語和撤消原語完成了進程從無到有,
從存在到消亡的變化。被建立後的進程最初處於就
緒狀態,然後經發送器選中後進入執行狀態。這
裡主要介紹實現進程的執行狀態到等待狀態,又由
等待狀態到就緒狀態轉換的兩種原語,即阻塞原語
與喚醒原語。
l阻塞原語在一個進程期待某一事件發生,但發生條
件尚不具備時,被該進程自己調用來阻塞自己。阻
塞原語在阻塞一個進程時,由於該進程正處於執行
狀態,故應先中斷處理機和儲存該進程的CPU
現場。
然後將被阻塞進程置“
阻塞”
狀態後插入等待隊列
中,再轉進程發送器選擇新的就緒進程投入運行。
阻塞原語的實現過程3.8
。48
• 這裡,轉進程發送器是很重要的,否則,處理機
將會出現空轉而浪費資源。
圖3.8
阻塞原語圖
49
• 當等待隊列中的進程所等待的事件發生時,等待該
事件的所有進程都將被喚醒。喚醒一個進程有兩種
方法:一種是由系統進程喚醒。另一種是由事件發
生進程喚醒。當由系統進程喚醒等待進程時,系統
進程統一控制事件的發生並將“
事件發生”
這一訊息
通知等待進程。從而使得該進程因等待事件已發生
而進入就緒隊列。由事件發生進程喚醒時,事件發
生進程和被喚醒進程之間是合作關係。因此,喚醒
原語既可被系統進程調用,也可被事件發生進程調
用。稱調用喚醒原語的進程為喚醒進程。喚醒原語
首先將被喚醒進程從相應的等待隊列中摘下,將被
喚醒進程置為就緒狀態之後,送入就緒隊列。在把
被喚醒進程送入就緒隊列之後,喚醒原語既可以返
回原調用程式,也可以轉向進程調度,以便讓調度
程式有機會選擇一個合適的進程執行