1
第二章进程的描述与控制
OS的基本任务是对“进程”的管理;
多个进程可以并发执行;
进程在系统中有多种状态,状态间
可转换;
进程与线程的区别。
操
作
系
统
|
进
程
的
描
述
与
控
制
2
CUIT 徐虹
2.1前趋图和程序执行
?前趋图的定义
?前趋图(Procedence Graph)是一个有向
无循环图DAG(Directed Acyclic Graph)。
?结点:语句、程序段或进程。
?初始节点
?终止节点
?边:执行顺序。
?重量:程序量或执行时间。
2
操
作
系
统
|
进
程
的
描
述
与
控
制
3
CUIT 徐虹
1
2
3
4
5
6
7
例:有7个结点的前趋图。
P = { P1,P2,P3,P4,P5,P6,P7 }
→= {(P1,P2),(P1,P3),(P1,P4),(P2,P5),
(P3,P5),(P4,P6),(P5,P7),(P6,P7)}
操
作
系
统
|
进
程
的
描
述
与
控
制
4
CUIT 徐虹
?程序的顺序执行
?一个复杂的程序通常可以分为若干程序
段,并且必须按照某种先后次序来执行。
?例1:输入——计算——打印
?例2:语句执行顺序
?S1:a := x + y
?S2:b := a – 5
?S3:c := b + 1
3
操
作
系
统
|
进
程
的
描
述
与
控
制
5
CUIT 徐虹
?顺序执行程序的特点:
?程序的顺序性。
?程序在运行时独占主机资源。
?程序的执行结果与其执行速度无关。
?程序执行时的初始条件相同,其结
果必相同。
操
作
系
统
|
进
程
的
描
述
与
控
制
6
CUIT 徐虹
?程序的并发执行
?程序执行环境
?独立性,逻辑上是独立的。
?随机性:输入和执行开始时间都是随机的。
?资源共享:资源共享导致对进程执行速度
的制约。
4
操
作
系
统
|
进
程
的
描
述
与
控
制
7
CUIT 徐虹
?程序的并发执行
并发执行是指两个程序执行时间上是重叠
的。凡是能由一组并发程序完成的任务,都
能由相应的单个程序完成。
例1:有一批程序,而每个程序需输入,计算,
打印三项操作。其程序段并发执行的前趋图:
I1 →I2 →I3 →I4 →
↘↘↘↘
C1 →C2 →C3 →C4 →
↘↘↘↘
P1 →P2 →P3 →P4 →
操
作
系
统
|
进
程
的
描
述
与
控
制
8
CUIT 徐虹
例2.Begin integer N:=0;
Cobegin
Program A : begin Program B : begin
L1 : N:=N+1; L2 : Print (N); N:=0;
Goto L1;Goto L2;
End End
Coend End
当N=5时,如果N=N+1 在print(N)和N:=0
前中间后
打印655
执行后N=001
5
操
作
系
统
|
进
程
的
描
述
与
控
制
9
CUIT 徐虹
例3.设有堆栈S,栈指针top ,栈中存放相应的数
据块地址,程序getaddr(top)从栈中取地址,
reladdr(blk)将地址放入栈S中。
Procedure getaddr (top) Procedure reladdr(blk)
Begin begin
Local r top+1——> top
(top)——> r blk ——> (top)
top-1——> top end
return (r)
end
先执行reladdr 的top=top+1,接着执行getaddr的(top)—> r
操
作
系
统
|
进
程
的
描
述
与
控
制
10
CUIT 徐虹
?程序并发执行过程及条件
(Bernstein条件)
S0;
Cobegin
S1;S2;S3;……;Sn;
Coend
Sn+1;
S1、S2、……、Sn可以由同一程序段
中的不同语句组成。
6
操
作
系
统
|
进
程
的
描
述
与
控
制
11
CUIT 徐虹
将任一语句划分为两个变量的集合R
(Si)和W(Si):
读集R(Si)= {a1,a2,……,am}
写集W(Si)= {b1,b2,……,bn}
如对语句S1和S2有:
R(S1)∩W(S2)= {Ф}
W(S1)∩R(S2)= {Φ}
W(S1)∩W(S2)= {Φ}
成立,则语句S1和S2可并发执行。
操
作
系
统
|
进
程
的
描
述
与
控
制
12
CUIT 徐虹
例1.语句c = a – b 和w = c + 1
R(c = a – b )= {a, b }
W(c = a – b )= { c }
R(w = c + 1 )= { c }
W(w = c + 1 )= { w }
R(w = c + 1 )∩W(c = a – b )= { c }
语句c = a – b 和w = c + 1 不能并发执行。
7
操
作
系
统
|
进
程
的
描
述
与
控
制
13
CUIT 徐虹
例2.S1 : a = x + y S2 : b = z + 1
S3 : c = a – b S4 : w = c + 1
R(S1)= { x , y } W(S1)= { a }
R(S2)= { z } W(S2)= { b }
R(S3)= { a ,b } W(S3)= { c }
R(S4)= { c } W(S4)={w }
语句S1 和S2 能并发执行。
语句S1 和S3,S2 和S3,S3 和S4 不能并发执行。
S1
S3 →S4
S2
操
作
系
统
|
进
程
的
描
述
与
控
制
14
CUIT 徐虹
?资源共享
?资源共享是指系统中的硬件资源和
软件资源不再由单个用户所独占,而
为n 个用户共同使用。
?由系统进行统一分配(硬件)和由
程序自行使用(数据基,变量、队列
等)
?程序共行执行与资源共享之间互为
存在条件。
8
操
作
系
统
|
进
程
的
描
述
与
控
制
15
CUIT 徐虹
?程序并发执行的特点
?失去程序的封闭性和可再现性
?程序与计算不再一一对应
?程序并发执行的相互制约
?执行——暂停——执行
操
作
系
统
|
进
程
的
描
述
与
控
制
16
CUIT 徐虹
2.2 进程的概念
?进程的定义
?进程的定义: 进程是程序在一个数据集
合上的运行过程,是系统进行资源分配
和调度的一个独立的基本单位。
?进程的特征
?动态性
?并发特征
?独立特征
?异步特征
?机构特征
9
操
作
系
统
|
进
程
的
描
述
与
控
制
17
CUIT 徐虹
?进程与程序的关系
进程程序
概念动态实体,静态实体,
强调执行过程是指令的有序集合
特征并发性、独立性、无并行特征,
异步性,是静止的
是竞争计算机系统
资源的基本单位
两者联系不同的进程可以共享同一个程序,
只要对应的数据集不同
操
作
系
统
|
进
程
的
描
述
与
控
制
18
CUIT 徐虹
2.3进程状态及其转换
?进程状态
一个进程的生命期可以划分为一组状
态,这些状态刻画了这个进程。系统根据
PCB结构中的状态值控制进程。
?就绪状态(Ready)
?执行状态
?等待状态(阻塞状态)
?新(New)状态
?终止状态(Terminated)
10
操
作
系
统
|
进
程
的
描
述
与
控
制
19
CUIT 徐虹
?挂起状态(Suspend)
把一个进程挂起使之处于静止状
态,以便研究它的执行情况获对它进
行修改。
?用户终端需要;
?父进程的需要:考查、修改获协调各子
进程时;
?OS的需要:改善系统运行性能,调节负
荷;
?对换的需要:缓和内存紧张的情况;
操
作
系
统
|
进
程
的
描
述
与
控
制
20
CUIT 徐虹
?进程状态转换
11
操
作
系
统
|
进
程
的
描
述
与
控
制
21
CUIT 徐虹
操
作
系
统
|
进
程
的
描
述
与
控
制
22
CUIT 徐虹
12
操
作
系
统
|
进
程
的
描
述
与
控
制
23
CUIT 徐虹
具有挂起状态的进程演变图
操
作
系
统
|
进
程
的
描
述
与
控
制
24
CUIT 徐虹
活动就绪(Readya)和活动阻塞(Blockeda)
静止就绪(Readys)和静止阻塞(Blockeds)
13
操
作
系
统
|
进
程
的
描
述
与
控
制
25
CUIT 徐虹
2.4进程的描述
?进程的组成(进程上下文)
?PCB
?程序
?数据
操
作
系
统
|
进
程
的
描
述
与
控
制
26
CUIT 徐虹
?进程控制块PCB
?描述信息
?控制信息
?资源管理信息
?CPU现场保护:对CPU的处理
?PCB的组织方式
?链接方式
?将具有相同状态的PCB,用其中的
链接字,链接成一个队列。
?索引方式
?根据进程的状态,建立索引表。
14
操
作
系
统
|
进
程
的
描
述
与
控
制
27
CUIT 徐虹
2.5进程控制
?进程间的关系
?非结构系统(Unstructured System)
?树形结构系统(Tree-Structured
System):一个进程能创建另一个进程,形成
进程家族。
操
作
系
统
|
进
程
的
描
述
与
控
制
28
CUIT 徐虹
?操作系统内核(Kernel)
?支撑功能
?中断处理
?时钟管理
?原语操作:完成特定功能的一段程
序。原语在执行期间是不可分割的。
?资源管理功能
?进程管理
?存储器管理
?设备管理
15
操
作
系
统
|
进
程
的
描
述
与
控
制
29
CUIT 徐虹
?进程的创建
?引起进程创建的事件
?创建原语(Create Primitive)
Void Create(n,S0,P0,M0,R0,acc)
{ i = getinternal name (n); id (i) = n;
priority (i) = P0; cpupstate (i) = S0;
main store (i) = M0; resources (i) = R0;
status (i) = “readys”; sdata (i) = RL;
parent (i) = *; progeny (i) = NULL;
insert (progeny (*), i);
set accounting data; insert (RL, i); }
操
作
系
统
|
进
程
的
描
述
与
控
制
30
CUIT 徐虹
?进程的终止
?进程终止事件
?撤消原语(Destroy Primitive)
Void destroy(n)
{ sched = false;
i = getinternal name (n);
Kill(i);
If sched then scheduler; }
16
操
作
系
统
|
进
程
的
描
述
与
控
制
31
CUIT 徐虹
void kill(i)
{ if status(i) = “executing” then
{ stop(i); sched = true; }
remove(sdata(I),I);
for all s ∈progeny(i) do kill(s);
for all r ∈(main store(i) ∪resoruces(i)) do
if owned(r) then insert(avail (semaphore(r)) data(r));
for all R ∈created resources(i) do
remove resource descriptor(R);
remove PCB(i); }
操
作
系
统
|
进
程
的
描
述
与
控
制
32
CUIT 徐虹
?进程阻塞
?阻塞事件
?阻塞原语(Block Primitive)
Void block (n)
{ i = getinternal name (n);
stop(i);
status(i) = “blockeda”;
insert (WL(r),i);
scheduler; }
17
操
作
系
统
|
进
程
的
描
述
与
控
制
33
CUIT 徐虹
?进程的唤醒
?进程唤醒的事件
?唤醒原语(Wakeup Primitive)
Void wakeup(n)
{ i = getinternal name (n);
remove (WL(r),i);
status = “ready”;
insert(RL,i);
scheduler; }
操
作
系
统
|
进
程
的
描
述
与
控
制
34
CUIT 徐虹
?进程的挂起
?挂起方式
?把发出本原语的进程自身挂起;
?挂起指定进程名的进程;
?把某进程及其全部或部分子孙一起挂起。
?方式(2)的挂起原语(Suspend
Primitive)
18
操
作
系
统
|
进
程
的
描
述
与
控
制
35
CUIT 徐虹
Void suspend (n,a)
{ i = getinternal name (n);
s = status(i);
if s = “executing” then stop(i);
a = copy PCB(i);
status(i) = if s = “blockeda” then “blockeds”;
else “readys”;
if s = “executing” then scheduler; }
操
作
系
统
|
进
程
的
描
述
与
控
制
36
CUIT 徐虹
?进程的激活
?进程激活过程
?激活原语(Activate Primitive)
?由创建原语创建的进程处于“静止就
绪“状态,后跟一个激活原语,使之
变为活跃就绪,就能引起CPU的重
新调度。
19
操
作
系
统
|
进
程
的
描
述
与
控
制
37
CUIT 徐虹
Void activate (n)
{ i = getinternal name (n);
status(i) = if status = “readys” then “readya”;
else “blockeda”;
if status(i) = “readya” then scheduler;
}
操
作
系
统
|
进
程
的
描
述
与
控
制
38
CUIT 徐虹
2.6线程
?线程的引入
?进程的缺陷
?线程的概念
?线程是进程中的一个实体,是被系
统独力调度和分派的基本单位。
?一个线程可以创建和撤消另一个线
程;同一进程中的多个线程之间可
以并发执行。
20
操
作
系
统
|
进
程
的
描
述
与
控
制
39
CUIT 徐虹
操
作
系
统
|
进
程
的
描
述
与
控
制
40
CUIT 徐虹
21
操
作
系
统
|
进
程
的
描
述
与
控
制
41
CUIT 徐虹
每个线程的内容每个进程的内容
程序计数器地址空间
堆栈全局变量
寄存器组打开文件
子线程子进程
状态定时器
信号
信号量
记帐信息
线程和进程的内容比较
操
作
系
统
|
进
程
的
描
述
与
控
制
42
CUIT 徐虹
22
操
作
系
统
|
进
程
的
描
述
与
控
制
43
CUIT 徐虹
?线程的状态
?产生
?运行
?阻塞
?解除阻塞
?结束
操
作
系
统
|
进
程
的
描
述
与
控
制
44
CUIT 徐虹
23
操
作
系
统
|
进
程
的
描
述
与
控
制
45
CUIT 徐虹
?线程与进程的比较
?调度
?并发性
?拥有资源
?系统开销
操
作
系
统
|
进
程
的
描
述
与
控
制
46
CUIT 徐虹
?用户级线程和内核支持线程
内核支持线程
用户级线程
?线程的调度与切换速度
?系统调用
?线程执行时间
24
操
作
系
统
|
进
程
的
描
述
与
控
制
47
CUIT 徐虹
操
作
系
统
|
进
程
的
描
述
与
控
制
48
CUIT 徐虹
?Solaris 中的线程
?用户线程:栈、程序计数器
?内核线程:子数据结构和栈
?LWP 轻进程:PCB(状态、寄存
器等)
?线程间的状态变化
内核线程发生阻塞,则相连的多个
LWP阻塞,进而相应的用户线程阻塞。
如进程只有一个LWP,则进程阻塞。
25
操
作
系
统
|
进
程
的
描
述
与
控
制
49
CUIT 徐虹
操
作
系
统
|
进
程
的
描
述
与
控
制
50
CUIT 徐虹
26
操
作
系
统
|
进
程
的
描
述
与
控
制
51
CUIT 徐虹
2.7 UNIX 的进程描述和控制
操
作
系
统
|
进
程
的
描
述
与
控
制
52
CUIT 徐虹
?UNIX 的进程状态转换图
27
操
作
系
统
|
进
程
的
描
述
与
控
制
53
CUIT 徐虹
?Linux 中的线程
操
作
系
统
|
进
程
的
描
述
与
控
制
54
CUIT 徐虹
?本章重点
?程序的并发执行;
?进程的概念和组成;
?进程的状态,状态转换的原因和
相应的原语操作;
?线程的概念,进程与线程的区别,
内核支持线程和用户级线程。