版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章進(jìn)程管理
進(jìn)程的基本概念
進(jìn)程控制
進(jìn)程同步
經(jīng)典進(jìn)程的同步問題
進(jìn)程通信
線程
2.1進(jìn)程的基本概念
?程序的順序執(zhí)行及其特征
?前趨圖
?程序的并發(fā)執(zhí)行及其特征
?進(jìn)程的特征與狀態(tài)
?進(jìn)程控制塊
2
?、程序的順序執(zhí)行及其特征
3
程序的順序執(zhí)行
順序環(huán)境:
在系統(tǒng)中只有一個(gè)程序在運(yùn)行,該程序獨(dú)占
系統(tǒng)所有資源,其執(zhí)行不受外界影響。
4
特征:
?程序執(zhí)行的順序性
?程序執(zhí)行的封閉性
?程序執(zhí)行結(jié)果的可再現(xiàn)性
------
------
5
二、前趨圖
?有向無循環(huán)圖
?描述進(jìn)程之間執(zhí)行的前后關(guān)系
?圖中結(jié)點(diǎn)描述程序段、進(jìn)程或一條語句._______________
?結(jié)點(diǎn)間的有向邊表示結(jié)點(diǎn)間存在的關(guān)系
?如果節(jié)點(diǎn)之間是前趨關(guān)系,則表示為Pi-Pj,即Pi是Pj的直接
前趨,Pj是Pi的直接后繼。
6
P2
?5
PlP3?8
P6
p4
?7
?前趨關(guān)系:PI-PDP1-P3,Pl-P*P2一「5,P3一「5,P4一「6,
P4fp7,P5fp8,P6fp8,P7fp9,P8fp9
?前趨圖中必須不存在循環(huán)7
三、程序的并發(fā)執(zhí)行及其特征
并發(fā)環(huán)境:
在一定時(shí)間內(nèi)有兩個(gè)或兩個(gè)以上的程序
同處于開始運(yùn)行但尚未結(jié)束的狀態(tài),并
且次序不是事先確定的
AB
AB
B11A
BA
8
四、進(jìn)程的特征與狀態(tài)
10
1、進(jìn)程的定義
進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)
數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。
11
2、進(jìn)程的特征
?結(jié)構(gòu)特征
?動(dòng)態(tài)性
?并發(fā)性
?獨(dú)立性
?異步性
12
3、進(jìn)程和程序的關(guān)系
?進(jìn)程是一個(gè)動(dòng)態(tài)概念,程序是靜態(tài)概念。
?程序可作為資料長(zhǎng)期保存,進(jìn)程有生命期
?進(jìn)程的組成是程序,數(shù)據(jù),進(jìn)程控制塊
?同一程序運(yùn)行于不同數(shù)據(jù)集合,將屬于不同
進(jìn)程。
?一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程,一個(gè)進(jìn)程可包含
多個(gè)程序。
13
4、進(jìn)程狀態(tài)
進(jìn)程基本狀態(tài)
進(jìn)程掛起
14
?最簡(jiǎn)單的進(jìn)程狀態(tài)劃分:運(yùn)行狀態(tài)
非運(yùn)行狀態(tài)
分派
暫停
15
排隊(duì)圖
隊(duì)列
進(jìn)入分派
654321
暫停
16
⑴進(jìn)程基本狀態(tài)
17
?執(zhí)行態(tài)(Running):
進(jìn)程占有CPU,并在CPU上運(yùn)行
?就緒態(tài)(Ready):
一個(gè)進(jìn)程已經(jīng)具備運(yùn)行條件,但由于無CPU暫時(shí)不能
運(yùn)行的狀態(tài)
?阻塞(等待)態(tài)(Blocked):
指進(jìn)程因等待某種事件的發(fā)生而暫時(shí)不能運(yùn)行的狀態(tài)
18
阻塞隊(duì)列
排隊(duì)圖
19
進(jìn)程的狀態(tài)及其轉(zhuǎn)換
20
進(jìn)程狀態(tài)轉(zhuǎn)換:
在進(jìn)程運(yùn)行過程中,由于進(jìn)程自身進(jìn)展情況及
外界環(huán)境的變化,這三種基本狀態(tài)可以依據(jù)一定
的條件相互轉(zhuǎn)換
①就緒一運(yùn)行----------------------------
②運(yùn)行一就緒
③運(yùn)行一阻塞
④阻塞一就緒
21
進(jìn)程轉(zhuǎn)換
?就緒--〉運(yùn)行
-調(diào)度程序選擇一個(gè)新的進(jìn)程運(yùn)行.
?運(yùn)行一>就緒
I-運(yùn)行進(jìn)程用完了時(shí)間片
-運(yùn)行進(jìn)程被中斷,因?yàn)橐桓邇?yōu)先級(jí)進(jìn)程處于
就緒狀態(tài)
22
進(jìn)程轉(zhuǎn)換
?運(yùn)行--〉阻塞
-當(dāng)一進(jìn)程必須等待時(shí)
?os尚未完成服務(wù)
?對(duì)一資源的訪問尚不能進(jìn)行
?初始化I/O且必須等待結(jié)果
-等待某一進(jìn)程提供輸入
?阻塞--〉就緒
-當(dāng)所等待的事件發(fā)生時(shí)
23
進(jìn)程的狀態(tài)轉(zhuǎn)換
分派程序■□□
運(yùn)行就緒阻塞
24
(2)進(jìn)程掛起
?進(jìn)程掛起功能
?進(jìn)程掛起的原因
?進(jìn)程狀態(tài)轉(zhuǎn)換?
?掛起進(jìn)程的特征
25
進(jìn)程掛起功能
將主存中某個(gè)進(jìn)程移到外存中,并釋放它
所占的主存空間
26
進(jìn)程掛起的原因
?終端用戶的請(qǐng)求
-父進(jìn)程請(qǐng)求
?負(fù)荷調(diào)節(jié)的需要
?操作系統(tǒng)的需要
27
事件發(fā)生
進(jìn)程狀態(tài)轉(zhuǎn)換
28
具有掛起進(jìn)程功能的系統(tǒng)中的進(jìn)程狀態(tài)
?靜止就緒態(tài):進(jìn)程具備運(yùn)行條件但目前
在輔存中,只有當(dāng)它被對(duì)換到主存后才
能被調(diào)度執(zhí)行
?靜止阻塞態(tài):進(jìn)程正在等待某一個(gè)事件
且在輔存中
29
掛起進(jìn)程的特征
?不能立即執(zhí)行
?與是否阻塞無關(guān)
?由代理執(zhí)行
?只能由代理顯式激活
30
(3)創(chuàng)建狀態(tài)與終止?fàn)顟B(tài)
?創(chuàng)建狀態(tài)
-OS已完成為創(chuàng)建一進(jìn)程所必要的工作
-但還沒有允許執(zhí)行該進(jìn)程
?終止?fàn)顟B(tài)
-中止后進(jìn)程移入該狀態(tài)
-它不再有執(zhí)行資格
-表格和其它信息暫時(shí)由輔助程序保留
31
五、進(jìn)程控制塊
?進(jìn)程控制塊的作用
?進(jìn)程控制塊中的信息
?進(jìn)程控制塊的組織方式
32
1、進(jìn)程控制塊的作用
?操作系統(tǒng)根據(jù)進(jìn)程控制塊來對(duì)并發(fā)執(zhí)行
的進(jìn)程進(jìn)行控制和管理
33
進(jìn)程映像
用戶程序
用戶數(shù)據(jù)程序數(shù)據(jù),用戶棧
系統(tǒng)棧參數(shù)/過程調(diào)用地址/系統(tǒng)調(diào)用地址
PCBOS控制進(jìn)程所需數(shù)據(jù)
PCB-processcontrolblock進(jìn)程控制塊
34
2、進(jìn)程控制塊中的信息
?進(jìn)程標(biāo)識(shí)符
?處理器狀態(tài)
?進(jìn)程調(diào)度信息
?進(jìn)程控制信息
35
進(jìn)程標(biāo)識(shí)信息:
-本進(jìn)程的標(biāo)識(shí)ID
?-建立本進(jìn)程的父進(jìn)程的標(biāo)識(shí)ID
-用戶標(biāo)識(shí)
36
處理器狀態(tài)信息:
-用戶使用的寄存器
--控制和狀態(tài)寄存器
-堆棧指針
37
進(jìn)程調(diào)度信息
?進(jìn)程狀態(tài)
?進(jìn)程優(yōu)先級(jí)
?進(jìn)程調(diào)度所需的其它信息
?事件
38
進(jìn)程控制信息:
-進(jìn)程在有關(guān)隊(duì)列中的鏈結(jié)指針
一-進(jìn)程間的通信信息
■-主存使用信息_
-進(jìn)程使用的其他資源信息
-進(jìn)程得到有關(guān)服務(wù)的優(yōu)先級(jí)
39
3、PCB的組織方法
?鏈接方式
?索引方式
40
鏈接方式
PCB14
PCB23
PCB30
PCB48
PCB5
PCB67
PCB79
PCB80一—
PCB91*
*—1
?
*n
41
索引方式
42
2.2進(jìn)程控制
?概念
?主要進(jìn)程控制原語
43
1、進(jìn)程控制的概念
職責(zé):對(duì)系統(tǒng)中所有進(jìn)程實(shí)施有效的
管理,它是處理機(jī)管理的一部分
任務(wù):創(chuàng)建進(jìn)程,撤消進(jìn)程,實(shí)現(xiàn)進(jìn)程間
狀態(tài)轉(zhuǎn)換
?進(jìn)程控制由內(nèi)核完成。內(nèi)核由原語實(shí)現(xiàn)
?原語:由若干條機(jī)器指令構(gòu)成,用以完成
特定功能的一段程序。
?原語操作具有不可分割性。44
2、主要進(jìn)程控制原語
創(chuàng)建進(jìn)程、終止進(jìn)程
掛起進(jìn)程、激活進(jìn)程
阻塞進(jìn)程、喚醒進(jìn)程
調(diào)度進(jìn)程
45
?進(jìn)程創(chuàng)建與終止
?當(dāng)子進(jìn)程創(chuàng)建時(shí)子進(jìn)程繼承父進(jìn)程所擁有的資源;當(dāng)子進(jìn)程終
止時(shí)將從父進(jìn)程那里繼承的資源歸還給父進(jìn)程。
46
為進(jìn)程的程序代碼、(1)將系統(tǒng)
數(shù)據(jù)用戶棧分配內(nèi)存分配的進(jìn)程
進(jìn)程創(chuàng)建過程ID、父進(jìn)程
空間。ID寫入PCB。
(2)將程序
計(jì)數(shù)器指向
創(chuàng)建進(jìn)程請(qǐng)求為進(jìn)程分配資源程序的入口
地址、棧指
針指向棧頂。
OS(3)設(shè)置進(jìn)
程狀態(tài)、優(yōu)
先級(jí)等。
調(diào)用創(chuàng)建進(jìn)程原語
Create)
將進(jìn)程放進(jìn)就緒隊(duì)列
申請(qǐng)PCB、
分配進(jìn)程ID
為新進(jìn)程分配一個(gè)唯一
的進(jìn)程ID,并申請(qǐng)一個(gè)
47
空白的PCB。
進(jìn)程的終止過程
引發(fā)進(jìn)程的二大類:‘冬止執(zhí)
終止事件
1、正常結(jié)束;
2、異常結(jié)束;
3、系統(tǒng)干預(yù);『所有的子
調(diào)用進(jìn)程終止原語
Destroy。
將進(jìn)程擁有的資源歸還給
父講程
從PCB集中檢索出
該進(jìn)程的PCB
把對(duì)應(yīng)的PCB設(shè)成空
讀出進(jìn)程的狀態(tài)
48
導(dǎo)致進(jìn)程終止的原因
?正常結(jié)束?系統(tǒng)干預(yù)
?異常結(jié)束-父進(jìn)程請(qǐng)求
?無內(nèi)存
?外界干預(yù)?父進(jìn)程終止
?越界
?正常結(jié)束?保護(hù)錯(cuò)誤
?超時(shí)?算術(shù)錯(cuò)誤
?系統(tǒng)干涉?I/O失敗
?無效指令
?特權(quán)指令
?數(shù)據(jù)誤用
49
。進(jìn)程的喚醒過程
明一.±如完成、期望
所等待的事件出現(xiàn)LI/O
------------------------的數(shù)據(jù)到達(dá)、有新
一I的任務(wù)要執(zhí)行等等。
調(diào)用喚醒原語
WakeupO
從等待隊(duì)列移出
I
在PCB中把把進(jìn)程插入到
等待—就緒就緒隊(duì)列
51
Q進(jìn)程的掛起過程
。進(jìn)程的激活過程
入到內(nèi)存
置成等待
Q進(jìn)程的調(diào)度過程
2.3進(jìn)程同步
?進(jìn)程同步的基本概念
?信號(hào)量機(jī)制
?信號(hào)量的應(yīng)用
?管程機(jī)制
55
?、進(jìn)程同步的基本概念
?進(jìn)程異步性導(dǎo)致的問題
?進(jìn)程間的相互作用
?臨界資源與臨界區(qū)
?同步機(jī)制應(yīng)遵循的規(guī)則
56
1、進(jìn)程異步性導(dǎo)致的問題
進(jìn)程的相對(duì)執(zhí)行速度不可預(yù)測(cè)
?難以定位程序錯(cuò)誤
57
舉例:回顯字符的Echo過程
Voidecho()
(
chin=getchar();
Chout=chin;
Putchar(chout);
58
Processp2
Processpl
chin=getchar();chin=getchar();
Chout=chin;
Putchar(chout);
Chout=chin;
Putchar(chout);
59
2、兩種形式的制約關(guān)系
?間接相互制約關(guān)系(互斥)
-進(jìn)程之間并不協(xié)同工作,彼此因相互爭(zhēng)奪
資源而產(chǎn)生的競(jìng)爭(zhēng)制約關(guān)系
?直接相互制約關(guān)系(同步)
-進(jìn)程之間協(xié)同工作。各進(jìn)程按一定的速度
執(zhí)行
60
3、臨界資源與臨界區(qū)
?臨界資源:一次僅能為一個(gè)進(jìn)程使用的
資源。
硬件資源:輸入機(jī),打印機(jī)。--------
軟件資源:變量,隊(duì)列,表格。
?臨界區(qū):進(jìn)程中訪問臨界資源的代碼段。
61
Pl
p2
—a:=a+1
互斥互斥
print(a)print(a)
P3Ifa<0
then
互斥a:=a+1
else
a:=a-1
4、同步機(jī)制應(yīng)遵循的原則
?空閑讓進(jìn)
?忙則等待
?有限等待
?讓權(quán)等待
63
二、信號(hào)量機(jī)制
信號(hào)量概念
信號(hào)量的實(shí)現(xiàn)
64
1、信號(hào)量的概念
?整型信號(hào)量:表示資源的物理實(shí)體,是一
個(gè)與隊(duì)列有關(guān)的整型變量,除對(duì)其初始化
外,其值僅能由wait和signal兩種不可中斷
的操作來改變。
?對(duì)信號(hào)量S的操作:wait與signal。通常表
示為wait⑸,signa](s).
65
?記錄型信號(hào)量
types=record
value:integer;
■L:pointertoPCB;指向等待隊(duì)列的指針
end
66
2、信號(hào)量的實(shí)現(xiàn)
?阻塞等待方式
?忙等待方式
67
?對(duì)信號(hào)量的wait操作和signa臊作由原語
實(shí)現(xiàn),保證一旦對(duì)信號(hào)量的操作開始,
其它進(jìn)程不允許訪問該信號(hào)量。
68
阻塞等待方式
采用記錄型信號(hào)量
WAIT(S)SIGNAL(S)
S=S4S=S+1
判斷s
s<=o
阻塞該進(jìn)程
進(jìn)程繼續(xù)喚醒等待隊(duì)列
進(jìn)程
將進(jìn)程插入S的等待中的一個(gè)進(jìn)程,
隊(duì)列L中,重新調(diào)度繼續(xù)重新調(diào)度
69
忙等待方式
采用整型信號(hào)量
WAIT(S)
Y
S<0
N
S—S-l
SIGNAL(S)
s<-s+i
70
忙等待方式和阻塞等待方式的差別
?忙等待方式不會(huì)出現(xiàn)負(fù)值。
?阻塞等待方式適用于單處理機(jī)方式。
?忙等待方式適用于多處理機(jī)方式。
71
關(guān)于信號(hào)量的討論
?信號(hào)量的物理含義:
S>0表示有S個(gè)資源可用
s=o表示無資源可用
S<0則ISI表示S等待隊(duì)列中的進(jìn)程個(gè)數(shù)
wait(S):表示申請(qǐng)一個(gè)資源
signal(S)表示釋放一個(gè)資源。
信號(hào)量的初值應(yīng)該大于等于0
?對(duì)信號(hào)量的wait操作和signa臊作的要求
wait和signal操作必須成對(duì)出現(xiàn)
72
三、信號(hào)量應(yīng)用
1、用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥
2、用信號(hào)量實(shí)現(xiàn)進(jìn)程同步
73
信號(hào)量機(jī)制的使用
設(shè)信號(hào)量S初值=1
A、B、C、D分別為四個(gè)進(jìn)程
ABC進(jìn)程中包含:wait(s)
D進(jìn)程中包含:signal(s)
就緒隊(duì)列CDBA
74
S=1
執(zhí)行A
75
執(zhí)行c
C
S=-1BA
執(zhí)行AB
BAC->s=-3-
76
1、用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥
?設(shè)置信號(hào)量,賦初值1,表示臨界資源未
被使用。
?進(jìn)程描述
77
例1設(shè)進(jìn)程P,Q共享一臺(tái)打印機(jī),打印機(jī)任何時(shí)
刻只能被一個(gè)進(jìn)程使用,而不能同時(shí)使用。試用
信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程互斥使用打印機(jī)。
定義信號(hào)量S:表示打印機(jī)數(shù)目,初值為1;
進(jìn)程P:
wait(s);
使用打印機(jī)
signal(s);
78
n個(gè)進(jìn)程Pl,P2,…,Pn共享m臺(tái)打印機(jī)
79
定義信號(hào)量S:表示打印機(jī)數(shù)目,初值為m;
進(jìn)程描述
wait(s);
使用打印機(jī)
signal(s);
80
信號(hào)量S取值范圍:
最大值:m
最小值:m-n
81
Pl
p2
—a:=a+1
互斥互斥
print(a)print(a)
P3Ifa<0
then
互斥a:=a+1
else
a:=a-1
2、用信號(hào)量實(shí)現(xiàn)進(jìn)程同步
例1:進(jìn)程Pl、P2
P1
P2
83
定義信號(hào)量
S,表示Pl是否已執(zhí)行,初值為0
84
進(jìn)程描述
PlP2
Doworkwait(S)
Signal(S)Dowork
85
例2:進(jìn)程Pl、P2共享單緩沖區(qū)
Pl:計(jì)算數(shù)據(jù),將結(jié)果寫入緩沖區(qū)
P2:從緩沖區(qū)讀出數(shù)據(jù),并打印
同步關(guān)系:P1-P2-P1-P2
定義信號(hào)量
進(jìn)程描述
86
定義信號(hào)量
SL表示Pl是否將計(jì)算結(jié)果寫入緩沖區(qū),初值為0
S2,表示緩沖區(qū)中是否為空,初值為1
87
進(jìn)程描述
PlP2
Wait(S2)Wait(SI)
DoworkDowork
Signal(SI)Signal(S2)
88
有父母子女四人圍坐一起吃水果,父親不
斷削蘋果往盆中放,母親不斷削梨往盆中
放,女兒則從盆中取蘋果吃,兒子則從盆
中取梨吃,假如盆中最多只能放N只水果,
試用信號(hào)量機(jī)制協(xié)調(diào)他們的關(guān)系。
89
父親母親女兒兒子
削蘋果削梨吃蘋果吃梨
90
S:盆中的空位數(shù);
S1:盆中的蘋果數(shù);
S2:盆中的梨數(shù);
91
父親母親女兒兒子
wait(s)wait(s)wait(sl)wait(s2)
削蘋果削梨吃蘋果吃梨
signal(sl)signal(s2)signal(s)signal(s)
92
四、管程機(jī)制
-管程的提出
-管程的定義
?用管程實(shí)現(xiàn)同步
93
1、管程的提出
?信號(hào)量機(jī)制的缺點(diǎn)
-易讀性差
-不利于修改和維護(hù)
-正確性難以保證
94
2、管程的定義
指關(guān)于共享資源的數(shù)據(jù)及在其上操作的一組
過程(或共享數(shù)據(jù)結(jié)構(gòu)及其規(guī)定的所有操作)
管程是管理進(jìn)程間同步的機(jī)制,它保證進(jìn)
程互斥地訪問共享變量,并且提供了一個(gè)
方便的阻塞和喚醒進(jìn)程的機(jī)構(gòu)。
進(jìn)程在需要的時(shí)候可以調(diào)用管程中的過程
95
管程的特點(diǎn)
管程是由若干過程、局部數(shù)據(jù)、初始化序
列組成的軟件模塊
?局部數(shù)據(jù)變量只能被管程的過程訪問
?一個(gè)進(jìn)程通過調(diào)用某過程進(jìn)入管程
?只有一個(gè)進(jìn)程能夠進(jìn)入,其他進(jìn)程被掛起一
互斥一
96
3、用管程實(shí)現(xiàn)同步
管程中支持同步的組成部分:
?局限于管程并僅能從管程內(nèi)進(jìn)行訪問的
若干條件變量(Condition)
?在條件變量上進(jìn)行操作的兩個(gè)函數(shù)過程
Cwait(C)和Csignal(C)
97
利用條件變量實(shí)現(xiàn)同步
?Cwait(c)
-掛起當(dāng)前進(jìn)程
-管程變成可用狀態(tài)
?Csignal(c)
-執(zhí)行等待隊(duì)列中的頭個(gè)進(jìn)程
-隊(duì)列空則什么都不做
98
管程的結(jié)構(gòu)進(jìn)入進(jìn)程隊(duì)列
XZ
局部數(shù)據(jù)
條件變量
過程1
■
過程k
初始化代碼
管程等待區(qū)管程出99
Monitorboundedbuffer;
Charbufferfn];
Intnextin,nextout;
Intcount;
Intnotfull,notempty;Nextin=0;nextout=0;count=0;
Voidappend(charx)Voidtake(charx)
{ifcount==ncwait(notfull);{ifcount==0cwait(notempty);
Buffer[nextin]=x;x=Bufferfnextout];
Nextin=(nextin+1)%n;Nextout=(nextout+1)%n;
Count++;Count-;
Csignal(notempty);Csignal(notfull);
1UU
2.4經(jīng)典進(jìn)程的同步問題
?生產(chǎn)者一消費(fèi)者問題
?讀者一寫者問題
?哲學(xué)家進(jìn)餐問題
101
(1)生產(chǎn)者一消費(fèi)者問題
由多個(gè)緩沖區(qū)構(gòu)成的一個(gè)緩沖存儲(chǔ)器,
每個(gè)緩沖區(qū)可存放一個(gè)數(shù)據(jù)項(xiàng)。
?生產(chǎn)者:生產(chǎn)數(shù)據(jù)并將其放入緩沖區(qū)中的進(jìn)程。
?消費(fèi)者:消耗并處理緩沖區(qū)中數(shù)據(jù)的進(jìn)程。
要求進(jìn)程互斥地使用緩沖區(qū)
102
生產(chǎn)者進(jìn)程消費(fèi)者進(jìn)程
produceQ;take();
appendQ;consumeQ;
103
定義信號(hào)量
n=0;表示滿緩沖區(qū)的個(gè)數(shù)e=sob;表示空緩沖區(qū)的個(gè)數(shù)
生產(chǎn)者進(jìn)程消費(fèi)者進(jìn)程
produceQ;wait(n);
wait(e);
take();
append();
Signal(e);
signal(n);consumeQ;
104
定義信號(hào)量
n=0;表示滿緩沖區(qū)的個(gè)數(shù)e=sob;表示空緩沖區(qū)的個(gè)數(shù)
s=1;表示緩沖區(qū)是否可用
生產(chǎn)者進(jìn)程消費(fèi)者進(jìn)程
produceQ;wait(n);
wait(e);wait(s);
wait(s);takeQ;
append();signal(s);
signal(s);Signal(e);
consumeQ;
signal(n);105
{{XU)_EU6_S
{xoEnsuoQosnpcud)g_EU6-s
u&SEd)
()U_EEpo>①
x)puddE
gEEM
{3①Ensuoo
-(0)_PU6-Sg七EM
XS)_EU6-S(OQOnpcud)
①
0M--LIM)
通
一()①(Konpcudpo>
g七EM
gEEM)(qosHe①」olldEEQS
(Hs9-0lldBE8
S
9ml9--LIM)OHU①
ooEnsuoopo>9-0lldBES
二
g但半HqoswSus
Voidappend(charx)Voidtake(charx)
{ifcount==ncwait(notfull);{ifcount==0cwait(notempty);
Buffer[nextin]=x;x=Bufferfnextout];
Nextin=(nextin+1)%n;Nextout=(nextout+1)%n;
Count++;Count-;
Csignal(notempty);Csignal(notfull);
1U/
108
(2)讀者一寫者問題
一個(gè)數(shù)據(jù)集為若干并發(fā)進(jìn)程共享。
讀者:要求讀取數(shù)據(jù)
寫者:要求修改數(shù)據(jù)
?概念:保證一個(gè)寫者必須與其它進(jìn)程互
斥地訪問數(shù)據(jù)。
讀者寫者
110
定義信號(hào)量
Wsem=l:表示數(shù)據(jù)集是否可用
S=l:互斥使用全局變量readcoimt
in
(3)哲學(xué)家進(jìn)餐問題
有五個(gè)哲學(xué)家,他們的生活方式是交替地
進(jìn)行思考和進(jìn)餐,哲學(xué)家們共用一張圓桌,
周圍放有五張椅子,每人坐一張,在圓桌
上有五碗面和五個(gè)叉子。當(dāng)哲學(xué)家思考時(shí),
他不與同事交談。饑餓時(shí),便試圖取用左
邊和右邊的叉子,他可能一個(gè)也
拿不到,只有在他拿到兩個(gè)叉子^^^^
時(shí),方能就餐,吃完后,放下叉
又繼續(xù)思考。
進(jìn)程描述(第i個(gè)哲學(xué)家的活動(dòng))
think()
eat()
114
信號(hào)量設(shè)置
為每個(gè)叉子設(shè)置信號(hào)量:
Semaphorefork[5]={1};
信號(hào)量的初值均為1。
115
解法1
Semaphorefork[5]={1};Voidmain()
IntI;{parbegin
Voidphilosopher(inti)(philosopher(O),
(philosopher(l),
{whiletrue
(philosopher(2),
{thinkQ;(philosopher(3),
Wait(fork[i]);(philosopher(4))
Wait(fork[(i+1)mod5]);
Eat();
signal(fork[(i+1)mod
5]);
signal(fork[i]);
116
改進(jìn)
Semaphorefork[5]={1};Voidmain()
Sem叩horeroom={4};{parbegin
Inti;(philosopher(O),
Voidphilosopher(inti)(philosopher(l),
{whiletrue(philosopher(2),
{thinkQ;(philosopher(3),
Wait(room);(philosopher(4))
Wait(fork[i]);
Wait(fork[(i+1)mod5]);
Eat();
signal(fork[(i+1)mod5]);
signal(fork[i]);
signal(room);
})
117
2.5進(jìn)程通信
?進(jìn)程通信的類型
?消息傳遞通信的實(shí)現(xiàn)方法
?消息緩沖隊(duì)列通信機(jī)制
118
一、進(jìn)程通信的類型
?:?共享存儲(chǔ)器系統(tǒng)
>基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式
>基于共享存儲(chǔ)區(qū)的通信方式
。消息傳遞系統(tǒng)
>直接通信
>間接通信
管道通信
基于共享存儲(chǔ)區(qū)的通信方式
在內(nèi)存劃出一塊公共的存儲(chǔ)區(qū)域,諸進(jìn)程可通過
對(duì)共享存儲(chǔ)區(qū)的讀或?qū)懖僮鱽韺?shí)現(xiàn)通信
120
消息傳遞系統(tǒng)
進(jìn)程之間的數(shù)據(jù)交換以消息為單位,操作系統(tǒng)提
供一組高級(jí)通信原語實(shí)現(xiàn)進(jìn)程間通信
管道通信
管道是連接讀寫進(jìn)程的一個(gè)特殊的共享文件。寫
進(jìn)程將數(shù)據(jù)從管道的一端送入管道,讀進(jìn)程則從
管道的另一端讀取數(shù)據(jù)。
寫進(jìn)程I\共享文件\讀進(jìn)程
122
二、消息傳遞通信的實(shí)現(xiàn)方法
1.直接通信方式
發(fā)送進(jìn)程發(fā)消息時(shí)要指定接收進(jìn)程的名字
Send(接收者,消息)
?-4旨定接收進(jìn)程
receive(發(fā)送者,消息)
I-指定發(fā)送進(jìn)程
一?不指定發(fā)送進(jìn)程,返回參數(shù)123
2.間接通信方式
?發(fā)送進(jìn)程發(fā)消息時(shí)指定一個(gè)中間媒介,即信箱。
進(jìn)程間通過信箱實(shí)現(xiàn)通信
發(fā)送原語:send(MB,Message)
接收原語:receive(MB,Message)
124
三、消息緩沖隊(duì)列通信機(jī)制
1.消息緩沖隊(duì)列通信機(jī)制中的數(shù)據(jù)結(jié)構(gòu)
消息緩沖區(qū)PCB中有關(guān)通信的數(shù)據(jù)項(xiàng)
typetype
messageprocesscontrolblock=
buffer=recordrecord
sender;發(fā)送進(jìn)程標(biāo)識(shí)符
size;消息長(zhǎng)度mq;消息隊(duì)列隊(duì)首指針
text;消息正文mutex;消息隊(duì)列互斥信號(hào)量
next;下一個(gè)消息緩沖區(qū)指針sm;消息隊(duì)列資源信號(hào)量
end
end
消息的格式
。消息類型
目標(biāo)ID
消息頭,源ID
消息長(zhǎng)度
〔控制信息
消息內(nèi)容
消息體
126
2.發(fā)送原語
proceduresend(receiver,a)
begin
getbuf(a.size,i);根據(jù)a.size申請(qǐng)緩沖區(qū);
i.sender::=a.sender;將發(fā)送區(qū)a中的信息復(fù)制到消息緩沖區(qū)
i.size:=a.size;
i.text:=a.text;
i.next:=0;
getid(PCBset,receiver.]);獲得接收進(jìn)程內(nèi)部標(biāo)識(shí)符;
wait(j.mutex);
inserta.mq,i);將消息緩沖區(qū)插入消息隊(duì)列;
signal(j.mutex);
signal(j.sm);
end
127
進(jìn)程A進(jìn)程B
send(B,a)?receive(b)-
第一消息緩沖區(qū)
sendenAsender:A
size:5size:5
text:Hellotext:Hello
消息緩沖通信
3.接收原語
procedurereceive(b)
begin
j:=internalname;j為接收進(jìn)程內(nèi)部的標(biāo)識(shí)符;
wait(j.sm);
wait(j.mutex);
remove(j.mq,i);將消息隊(duì)列中第一個(gè)消息移出;
signal(j.mutex);
b.sender:=i.sender;將消息緩沖區(qū)i的信息復(fù)制到接收區(qū)b
b.size:=i.size;
b.text:=i.text;
end
129
使用消息傳遞機(jī)制實(shí)現(xiàn)互斥
Constintn二進(jìn)程數(shù);Voidmain()
Voidp(inti){create_mailbox(mutex);
{messagemsg;Send(mutex,null);
Parbegin(p(1)...p(n));}
Whiletrue5
{receivefmutex^sg);
臨界區(qū);
Send(mutex,msg);}}
130
使用消息解決生產(chǎn)者/消費(fèi)者問題
Constintcapadty=buf容量[voidconsumerQ
Constintnull二空消息;
Im,f{messagecmsg;
'Whiletrue
_________________________{receive(mayconsume,cmsg);
Voidproducer。Consume(cmsg);
{messagepmsg;Send(mayproduce,null);}}
Whiletrue_____
{receive(mayproduce,pmsg);
Pmsg=produce();
Send(mayconsume,pmsg);}}
131
VoidmainQ
{create_mailbox(mayproduce);
Create_mailbox(mayconsume);
For(inti=1;i<=capacity;i++)
Send(mayproduce,null);
Parbegin(producer,consumer);}
132
133
2.6線程
線程的基本概念
線程間的同步和通信
線程的實(shí)現(xiàn)方式
134
?、線程的基本概念
-線程的引入
-線程的定義及特征
?線程的狀態(tài)和管理
135
1、線程的引入
進(jìn)程的兩個(gè)基本屬性
?資源的擁有者
?調(diào)度單元
以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)
136
系統(tǒng)必須完成的操作
?創(chuàng)建進(jìn)程缺點(diǎn):
時(shí)高空間開銷大,
?撤消進(jìn)程
限制并發(fā)度的提高
?進(jìn)程切換
線程的引入正是為了簡(jiǎn)化進(jìn)程間的通信,
以小的開銷來提高進(jìn)程內(nèi)的并發(fā)程度
137
2、線程的定義及特征
線程:進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的、可調(diào)度的執(zhí)行單元
線程具有以下性質(zhì):
-線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的可執(zhí)行單元。
-線程是操作系統(tǒng)中的基本調(diào)度單元。
?一個(gè)進(jìn)程中至少應(yīng)有一個(gè)線程。
-線程并不擁有資源,而是共享和使用包含它的進(jìn)
程所擁有的所有資源。
?線程在需要時(shí)也可創(chuàng)建其他線程。
138
引入線程的好處:
?創(chuàng)建一個(gè)新線程花費(fèi)時(shí)間少
?兩個(gè)線程的切換花費(fèi)時(shí)間少
?因?yàn)橥贿M(jìn)程內(nèi)的線程共享內(nèi)存和文件,
因此它們之間相互通信無須調(diào)用內(nèi)核
?適合多處理機(jī)系統(tǒng)
139
3、線程的狀態(tài)和管理
?線程的狀態(tài)
?線程的描述
?線程的管理
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商業(yè)保理業(yè)務(wù)分期還款合同范本
- 二手房產(chǎn)交易協(xié)議2024版細(xì)則
- 2025年度車牌轉(zhuǎn)讓中介服務(wù)收費(fèi)標(biāo)準(zhǔn)合同4篇
- 2025年度季節(jié)性貨物儲(chǔ)藏室租賃及物流配送合同4篇
- 二零二四年度信息技術(shù)設(shè)備維修服務(wù)合作協(xié)議2篇
- 二零二五年度茶館酒水特色搭配與品鑒會(huì)組織合同3篇
- 二零二五年度杭州廢舊電梯回收及拆解服務(wù)合作協(xié)議3篇
- 2025年消防應(yīng)急疏散通道施工合同2篇
- 2025至2031年中國(guó)毛套行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)手動(dòng)拉網(wǎng)機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 腦梗死合并癲癇病人的護(hù)理查房
- 蘇教版四年級(jí)上冊(cè)脫式計(jì)算300題及答案
- 犯罪現(xiàn)場(chǎng)保護(hù)培訓(xùn)課件
- 扣款通知單 采購(gòu)部
- 電除顫操作流程圖
- 湖北教育出版社三年級(jí)下冊(cè)信息技術(shù)教案
- 設(shè)計(jì)基礎(chǔ)全套教學(xué)課件
- IATF16949包裝方案評(píng)審表
- 人教版八年級(jí)美術(shù)下冊(cè)全冊(cè)完整課件
- 1 運(yùn)行方案說明
- 北京房地產(chǎn)典當(dāng)合同
評(píng)論
0/150
提交評(píng)論