第二章进程管理作业管理

Download Report

Transcript 第二章进程管理作业管理

第二章 进程管理、作业管理
1、进程概念:理解进程的引入及进程的基本特征;
2、进程的同步与互斥:了解进程表示PCB、进程的状态;
理解并掌握进程调度的基本算法、并发进程间的互相制
约关系、临界区的概念;理解并掌握利用锁操作法实现
互斥,利用信号量及P、V操作实现同步与互斥的方法。
经典示例:生产者与消费者问题、读者与写者问题等
3、进程通信:了解进程通信的不同方式(信号、管道、消
息缓冲等);
4、死锁:掌握产生死锁的必要条件;对付死锁的策略:死
锁的预防、死锁的避免(银行家算法);死锁的检测与
解除(进程资源图及其化简)。
5、了解作业的概念、作业管理的基本功能、作业状态及其
转换;
6、理解并掌握作业调度的基本算法、作业控制的方式。
第二章 进程管理、作业管理
2.1 基本概念



作业(job):任务(task)
作业步:作业的工作步骤
程序:静态概念,指令的集合
前趋图的定义
 前趋图(Precedence Graph)是一个有向无循环
图。
结点
语句、程序段或进程 图2.2
边
偏序或前趋关系 
(Pi,Pj) Pi  Pj
2
前趋关系
程序的执行方式:顺序执行和并发执行
一、程序顺序执行
图2.1
输入I->计算C->打印P
顺序执行的特征
 顺序性:按照程序结构所指定的次序(可能有分
支或循环)
 封闭性:独占全部资源,计算机的状态只由于该
程序的控制逻辑所决定
 可再现性:初始条件相同则结果相同。
4
二、多程序并发执行
I1
I2
I3
I4
C1
C2
C3
C4
P1
P2
P3
P4
图2.4
Ii -> Ci,Ci -> Pi,Ii -> Ii+1,Ci-> Ci+1,Pi->Pi+1
5
并发执行的特征:
间断(异步)性:"走走停停",一个程序可能走到
中途停下来,失去原有的时序关系;
 失去封闭性:共享资源,受其他程序的控制逻
辑的影响。如:一个程序写到存储器中的数据
可能被另一个程序修改,失去原有的不变特征。
 不可再现性:失去封闭性 ->失去可再现性;
外界环境在程序的两次执行期间发生变化,失
去原有的可重复特征。

6
程序并发执行的条件
并发执行失去封闭性的原因是共享资源的影响,去掉这种影
响就行了。1966年,由Bernstein给出并发执行的条件。(这
里没有考虑执行速度的影响。)


程序 P(Si) 针对共享变量的读集和写集 R(Si)和
W(Si)
条件:任意两个程序P(Si)和P(Sj),有:
 R(Si)W(Sj)=;
 W(Si)R(Sj)=;
 W(Si)W(Sj)=;
前两条保证一个程序的两次读之间数据不变化;最后一条
保证写的结果不丢掉。
7
四条语句:
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(S1) = {c}, W(S1) = {w}
S1和S2
S1和S3、S2和S3
8
进程的概念
各种定义
一个具有一定独立功能的程序在一个数据集合上
的一次动态执行过程。
进程的特征
• 动态性:进程具有动态的地址空间(数量和内
容),系统控制信息(进程控制块的生成和删除)
• 独立性:各进程的地址空间相互独立,除非采用
进程间通信手段;
• 并发性、异步性:
9
进程与程序的区别
进程是动态的,程序是静态的:程序是有序代码
的集合;进程是程序的执行。通常进程不可在计
算机之间迁移;而程序通常对应着文件、静态和
可以复制。
 进程是暂时的,程序的永久的:进程是一个状态
变化的过程,程序可长久保存。
 进程与程序的组成不同:进程的组成包括程序、
数据和进程控制块(即进程状态信息)。
 进程与程序的对应关系:通过多次执行,一个程
序可对应多个进程;通过调用关系,一个进程可
包括多个程序。

10
2.2 进程管理
2.2.1 进程的基本状态
进程的三种基本状态
 就绪状态(Ready):进程已获得除处理机外
的所需资源,等待分配处理机资源;只要
分配CPU就可执行。
一个或多个就绪队列
可以按多个优先级来划分队列,如:时间
片用完->低优,I/O完成->中优,页面调
入完成->高优
11

运行状态(Running):占用处理机资源;处于
此状态的进程的数目小于等于CPU的数目。


在没有其他进程可以执行时(如所有进程都在
阻塞状态),通常会自动执行系统的idle进程
(相当于空操作)。
阻塞状态(Blocked):由于进程等待某种条
件(如I/O操作或进程同步),在条件满足
之前无法继续执行。该事件发生前即使把
处理机分配给该进程,也无法运行。如:
等待I/O操作的完成。等待或睡眠状态
原因不同,多个队列
12
进程的挂起状态
挂起状态的引入
1. 终端用户的需要
用于调试:在调试时,挂起被调试进程
(从而对其地址空间进行读写)
2. 父进程的需求
3. 操作系统的需要
4. 对换的需要
5. 负荷调节的需要
实时任务执行,内存紧张
14
具有挂起状态的进程状态图
15
线程
进程:两个基本属性 资源分配单位(存储
器、文件)和CPU调度(分派)单位。又
称为"任务(task)“
并发执行 创建、撤销进程,进程切换 时
空开销大
 线程:进程两个属性分开,只作为CPU调
度单位,而共享进程所拥有的全部资源。

只拥有必不可少的资源,如:线程状态、寄存
器上下文和栈
 同样具有就绪、阻塞和执行三种基本状态

16
线程与进程
one process
one thread
multiple processes
one thread per process
one process
multiple threads
multiple processes
multiple threads per process
17
进程和线程的比较
调度--两个属性分开 同一进程中线程上下文切换
比不同进程上下文切换要快得多;
 并发性--进程之间、线程之间,文件服务-设多个
服务线程
 拥有资源--地址空间和其他资源(如打开文件):
进程间相互独立,同一进程的各线程间共享,进
程内的线程对其他进程不可见

18

系统开销:减小并发执行的时间和空间开销(线
程的创建、退出和调度),因此容许在系统中建
立更多的线程来提高并发程度。




线程的创建时间比进程短;
线程的终止时间比进程短;
同进程内的线程切换时间比进程短;
由于同进程内线程间共享内存和文件资源,可直接进行
不通过内核的通信;线程间可以直接读写进程数据段
(如全局变量)来进行通信;进程间通信IPC,需要进
程同步和互斥手段的辅助,以保证数据的一致性
19
2.2.2 进程控制块
(PCB, process control block)
进程控制块是由OS维护的用来记录进程相关信
息的一块内存。PCB是进程存在的唯一标志,常
驻内存。
每个进程在OS中的登记表项(可能有总数目限
制),OS据此对进程进行控制和管理(PCB中
的内容会动态改变)
 处于核心段,通常不能由应用程序自身的代码来
直接访问,而要通过系统调用,或通过如UNIX
中的进程文件系统(/proc)直接访问进程映象
(image)。文件名为进程标识(如:00316),权
限为创建者可读写。

20
PCB的组织方式
线性表、链表、索引表
22
进程控制
原语 -- 若干条机器指令组成的不可中断
的完成特定功能的一段程序。
 创建、挂起、激活、阻塞、唤醒、撤销、
通讯
 进程树

25
UNIX
 Windows (Process Explorer)

2.3 进程调度
2.3.1 调度的层次和状态
1 作业状态及其转换
提交 - 收容 - 执行 - 完成
27
2 调度的层次
 高级调度 :又称为“长程调度”、“作
业调度”。从用户工作流程的角度,一次
提交的若干个流程,其中每个程序按照进
程调度。时间上通常是分钟、小时或天。
接纳多少作业
接纳哪些作业 调度算法
29
低级调度:又称为“短程调度”、“进程或线
程”。从CPU资源的角度,执行的单位。时间上
通常是毫秒。因为执行频繁,要求在实现时达到
高效率。
两种调度方式:
非抢占方式
抢占方式 时间片 优先权 短作业(进程)优先
 中级调度:又称为“中程调度”,内外存交换。
从存储器资源的角度。将进程的部分或全部换出
到外存上,将当前所需部分换入到内存。指令和
数据必须在内存里才能被CPU直接访问。

30
2.3.2 选择调度方式和算法的若干准则
我们可从不同的角度来判断处理机调度算法的性
能,如用户的角度、处理机的角度和算法实现的
角度。实际的处理机调度算法选择是一个综合的
判断结果。
1. 面向用户的调度性能准则
 周转时间:作业从提交到完成(得到结果)所经
历的时间。包括:在收容队列中等待,CPU上执
行,就绪队列和阻塞队列中等待,结果输出等待


平均周转时间T
平均带权周转时间(带权周转时间W是 T(周转)/T(CPU
执行)〕
31
响应时间:用户输入一个请求(如击键)到系统
给出首次响应(如屏幕显示)的时间--分时系
统
 截止时间:开始截止时间和完成截止时间--实
时系统,与周转时间有些相似。
 优先权:可以使关键任务达到更好的指标。
不因作业或进程本身的特性而使上述指标过分恶
化。如长作业等待很长时间。

32
2. 面向系统的调度性能准则
 吞吐量:单位时间内所完成的作业数,跟作业本
身特性和调度算法都有关系--批处理系统

平均周转时间不是吞吐量的倒数,因为并发执行的作
业在时间上可以重叠。如:在2小时内完成4个作业,
而每个周转时间是1小时,则吞吐量是2个作业/小时
处理机利用率:--大中型主机
 各种设备的均衡利用:如CPU繁忙的作业和I/O
繁忙(指次数多,每次时间短)的作业搭配--
大中型主机

33
2.3.3 调度算法
通常将作业或进程归入各种就绪或阻塞队列。有的算法适
用于作业调度,有的算法适用于进程调度,有的两者都适
用。
1 先来先服务
2 短作业(进程)CPU运行期优先
3 时间片轮转算法
4 优先级算法
5 高响应比优先算法
6 多级队列算法
7 多级反馈队列算法
34
1 先来先服务
(FCFS, First Come First Served)
这是最简单的调度算法,按先后顺序进行调度。
非抢占式方式
 按照作业提交或进程变为就绪状态的先后次序,
分派CPU;
 当前作业或进程占用CPU,直到执行完或阻塞,
才出让CPU(非抢占方式)。
 在作业或进程唤醒后(如I/O完成),并不立即
恢复执行,通常等到当前作业或进程出让CPU。
最简单的算法。
35
平均周转时间 (a)27 (b)13
FCFS的特点
 比较有利于长作业,而不利于短作
业。
 有利于CPU繁忙的作业,而不利
于I/O繁忙的作业。
37
2 短CPU运行期优先
Shortest CPU Burst First(SCBF)
又称为短作业(进程)优先(SJF, Shortest Job
First),“短进程优先”SPN(Shortest Process
Next);这是对FCFS算法的改进,其目标是
减少平均周转时间。
对预计执行时间短的作业(进程)优先分
派处理机。通常后来的短作业不抢先正在
执行的作业。
38
平均周转时间 (a)15.75 (b)13
SCBF(SJF)的特点

优点:
比FCFS改善平均周转时间和平均带权周转时间,
缩短作业的等待时间;
 提高系统的吞吐量;


缺点:
对长作业非常不利,可能长时间得不到执行;
 未能依据作业的紧迫程度来划分执行的优先级;
 难以准确估计作业(进程)的执行时间,从而
影响调度性能。

40
3 时间片轮转(Round Robin)算法
前两种算法主要用于宏观调度,说明怎样选择
一个进程或作业开始运行,开始运行后的作法
都相同,即运行到结束或阻塞,阻塞结束时等
待当前进程放弃CPU 。本算法主要用于微观调
度,说明怎样并发运行,即切换的方式;设计
目标是提高资源利用率。
其基本思路是通过时间片轮转,提高进程并发
性和响应时间特性,从而提高资源利用率;
41
A. 时间片轮转算法





将系统中所有的就绪进程按照FCFS原则,排成
一个队列。
每次调度时将CPU分派给队首进程,让其执行
一个时间片。时间片的长度从几个ms到几百ms。
在一个时间片结束时,发生时钟中断。
调度程序据此暂停当前进程的执行,将其送到
就绪队列的末尾,并通过上下文切换执行当前
的队首进程。
进程可以未使用完一个时间片,就出让CPU
(如阻塞)。
42
B. 时间片长度的确定

时间片长度变化的影响



对响应时间的要求:


过长->退化为FCFS算法,进程在一个时间片内都执行
完,响应时间长。
过短->用户的一次请求需要多个时间片才能处理完,
上下文切换次数增加,响应时间长。
T(响应时间)=N(进程数目)*q(时间片)
时间片长度的影响因素:


就绪进程的数目:数目越多,时间片越小(当响应时间
一定时)
系统的处理能力:应当使用户输入通常在一个时间片内
能处理完,否则使响应时间,平均周转时间和平均带权
周转时间延长。
43
4 优先权算法
适用于作业调度和进程调度,
可分成抢先式和非抢先式;
A 静态优先权
创建进程时就确定,直到进程终止前都不改变。通常是
一个整数。

依据:




进程类型(系统进程优先级较高)
对资源的需求(对CPU和内存需求较少的进程,优
先级较高)
提交的时间次序
用户要求(紧迫程度和付费多少)
44
B 动态优先权
在创建进程时赋予的优先级,在进程运行过程中
可以自动改变,以便获得更好的调度性能。如:
 在就绪队列中,等待时间延长则优先级提高,从
而使优先级较低的进程在等待足够的时间后,其
优先级提高到可被调度执行;
 进程每执行一个时间片,就降低其优先级,从而
一个进程持续执行时,其优先级降低到出让CPU。
45
5 高响应比优先算法

"最高响应比优先"HRRN(Highest
Response Ratio Next)
响应比R = (等待时间 + 要求执行时间) / 要求
执行时间
 是FCFS和SJF的折衷

46
6 多级队列算法
本算法引入多个就绪队列,通过各队列的区
别对待,达到一个综合的调度目标;
根据作业或进程的性质或类型的不同,将就绪
队列再分为若干个子队列。
 每个作业固定归入一个队列。
 各队列的不同处理:不同队列可有不同的优先
级、时间片长度、调度策略等。如:系统进程、
用户交互进程、批处理进程等。
前台-时间片轮转、后台-FCFS

47
7 多级反馈队列算法

多级反馈队列算法是时间片轮转算法和优
先级算法的综合和发展。优点:
为提高系统吞吐量和缩短平均周转时间而照
顾短进程
 为获得较好的I/O设备利用率和缩短响应时间
而照顾I/O型进程
 不必估计进程的执行时间,动态调节

48
多级反馈队列算法



设置多个就绪队列,分别赋予不同的优先级,如逐级降
低,队列1的优先级最高。每个队列执行时间片的长度
也不同,规定优先级越低则时间片越长,如逐级加倍
新进程进入内存后,先投入队列1的末尾,按FCFS算法
调度;若按队列1一个时间片未能执行完,则降低投入
到队列2的末尾,同样按FCFS算法调度;如此下去,降
低到最后的队列,则按"时间片轮转"算法调度直到完成。
仅当较高优先级的队列为空,才调度较低优先级的队列
中的进程执行。如果进程执行时有新进程进入较高优先
级的队列,则抢先执行新进程,并把被抢先的进程投入
原队列的末尾。
49
性能
终端型作业用户
短批处理作业用户
长批处理作业用户
50
2.4 进程的同步与互斥
多道程序环境->进程之间存在资源共享,运行时间受影响
多个进程在对硬件或软件(如外设、共享代码段、共享数据
结构)进行访问时(如写入或修改),必须互斥地进行
有些共享资源可以同时访问,如只读数据
 进程间资源共享关系-访问冲突
 共享变量的修改冲突
 操作顺序冲突
 进程间相互合作关系-制约
 间接制约:进行竞争--独占分配到的部分或全部共享
资源,“互斥”
 直接制约:进行协作--等待来自其他进程的信息,
“同步” 通讯
51
2.4.1 临界资源和临界区
1 临界资源
• 临界资源:一次仅允许一个进程使用的资
源。
• 互斥:指多个进程不能同时使用同一个资
源;
• 死锁:指多个进程互不相让,都得不到足
够的资源而互相等待;
• 饥饿:指一个进程一直得不到资源(其他
进程可能轮流占用资源)
52
一个飞机订票系统,两个终端,运行T1、T2进
程
T1 :
T2:
...
...
Read( x) ;
Read( x) ;
i f x>=1 t hen
i f x>=1 t hen
x: =x- 1;
x: =x- 1;
wr i t e( x) ;
...
wr i t e( x) ;
...
共享变量的修改冲突
2 临界区
临界区(critical section):进程中访问临界资源的
一段代码。
 进入区(entry section):在进入临界区之前,检
查可否进入临界区的一段代码。如果可以进入临
界区,通常设置相应"正在访问临界区"标志
 退出区(exit section):用于将"正在访问临界区"
标志清除。
 剩余区(remainder section):代码中的其余部分。

54
entry section
critical section
exit section
remainder section
临界区的进入
临界区设计原则:
空闲则入:所有进程均不处于临界区,选
择一个;
 忙则等待:已有进程处于其临界区,互斥;
 有限等待:等待进入临界区的进程不能"
死等";
 让权等待:不能进入临界区的进程,应释
放CPU(如转换到阻塞状态),不能“忙
等”

56
3 访问临界区的软件方法 Dekker

有两个进程P0, P1
• 设立一个公用整型变量 turn:描述允许进入临界
区的进程标识
– 在进入区循环检查是否允许本进程进入:turn为i时,
进程Pi可进入;
– 在退出区修改允许进入进程标识:进程Pi退出时,改
turn为进程Pj的标识j;
• 设立一个标志数组flag[2]:描述进程是否在临界
区,初值均为FALSE,0。
– 先修改,后检查:在进入区修改本进程在临界区的标
志,检查另一个进程是否在临界区;
– 在退出区修改本进程在临界区的标志;
57
int flag[2] = {0,0}; int turn;
/*进程Pi的程序结构,i=0,1 */
turn = i; flag[i]=1;
while (flag[j])
if (turn == j){
flag[i]=0; /*使进程Pj进入临界区*/
while (turn == j) ; /*循环等待*/
flag[i] = 1;
}
critical section;
turn = j; flag[i]=0;
remainder section;
/*当Pi为P0时,i=0,j=1;当Pi为P1时,i=1, j=0*/
2.4.2 实现临界区互斥的锁操作法
加锁 - 临界区 - 开锁
1 开、关中断
独占CPU
i)单CPU
ii)同类临界区
iii)临界区长度 iv)互斥范围
2 锁操作原语
加锁原语 开锁原语
其读写操作由一条指令完成,因而保证读操作与写操作不
被打断;
Test-and-Set指令
Swap指令(或Exchange指令)
59
互斥算法(TS指令)
while TS(&lock);
critical section
lock = FALSE;
remainder section
利用TS实现进程互斥:每个临界资源设置一
个公共布尔变量lock,初值为FALSE
 在进入区利用TS进行检查:有进程在临界区
时,重复检查;直到其它进程退出时,检查通
过;

互斥算法(Swap指令)

利用Swap实现进程互斥:每个临界资源设置一个
公共布尔变量lock,初值为FALSE。每个进程设置
一个私有布尔变量key
key = TRUE;
do
{
SWAP(&lock, &key);
} while (key);
critical section
lock = FALSE;
remainder section
2.4.3信号量(semaphore)机制
1 信号量和P、V操作

1965年,由荷兰学者Dijkstra提出,是一种卓有
成效的进程同步机制,P、V分别是荷兰语的
test(proberen)和increment(verhogen)。
 信号量只能通过初始化和两个标准的原语来访问
--作为OS核心代码执行,不受进程调度的打
断

初始化指定一个非负整数值,表示空闲资源总数(又
称为“资源信号量”)--若为非负值表示当前的空
闲资源数,若为负值其绝对值表示当前等待进入临界
区的进程数
62
一、整形信号量
 P原语 wait(s)
while (s<=0)
;
/*忙等待*/
s = s – 1;
V原语 signal(s)
s = s + 1;
63
二、 记录型信号量机制

每个信号量*s除一个整数值s->value(计数)外,
还有一个进程等待队列s->ptr_of_semque,其中
是阻塞在该信号量的各个进程的标识
typedef struct {
int value;
PCB *ptr_of_semque;
} Semaphore;
阻塞等待P、V操作
64
P原语 wait(s)
s->value --;
//表示申请一个资源;
if (s->value <0)
//表示没有空闲资源;
{
调用进程进入等待队列s->ptr_of_semque;
阻塞调用进程;
}
V原语 signal(s)
V原语通常唤醒进程等待队列中的头一个进程
++s->value;
//表示释放一个资源
if (s->value <= 0) //表示有进程处于阻塞状态
{
从等待队列s->ptr_of_semque中取出一个进程P;
进程P进入就绪队列;
}
2 利用信号量实现互斥(P84)
P(mutex);
critical section
V(mutex);
remainder section
为临界资源设置一个互斥信号量mutex(MUTual
Exclusion),其初值为{1,NULL};在每个进程中将临界
区代码置于P(mutex)和V(mutex)原语之间
 必须成对使用P和V原语:遗漏P原语则不能保证互斥访
问,遗漏V原语则不能在使用临界资源之后将其释放
(给其他等待的进程);P、V原语不能次序错误、重
复或遗漏
例:并发的多个售票进程

67
3. 利用信号量来描述同步关系
例1
P1
C1
V(S12);
P2
P(S12);
C2
前趋关系:并发执行的进程P1和P2中,分别有代
码C1和C2,要求C1在C2开始前完成;
 为每个前趋关系设置一个信号量S12,其初值为
{0, NULL}
 非对称同步关系

68
例2 司机和售票员
 问题描述:设公共汽车上,司机和售票员的
活动分别是:
司机:
售票员:
启动车辆
上下乘客
正常行车
关车门
到站停车
售票
开车门
上下乘客
双信号量
对称制约
Semaphore driver_sem = { 0, NULL};
//司机
Semaphore conductor_sem = { 0, NULL}; //售票员
program driver
{
while (1) {
driving;
stopping;
V(&conductor_sem};
//唤醒售票员开门
P(&driver_sem);
//等待售票员关门
start a car;
}
}
program conductor
{
while (1) {
sell tickets;
P(&conductor_sem);
//等待司机停车
open the door;
close the door;
V(&driver_sem);
//唤醒司机开车
}
}
例3 读者-写者问题 (the readers-writers problem)
P88

问题描述:对共享资源的读写操作,任一时刻“写
者”最多只允许一个,而“读者”则允许多个
(Bernstein条件)



“读-写”互斥,
“写-写”互斥,
"读-读"允许
双信号量
解法一 写者饥饿
解法二 写者优先,最多10个读者

采用记录型信号量机制:



Semaphore rwmutex={1,NULL}; //写者与其他进程互斥
公共变量 readcount 表示“正在读”的进程数,初值是0;
Semaphore rmutex ={1,NULL}; //对readcount互斥访问
Reader
Writer
P(&rwmutex);
write or update data;
V(&rwmutex);
P(&rmutex);
readcount++;
if ( readcount = = 1)
P(&rwmutex);
V(&rmutex);
read data;
P(&rmutex);
readcount--;
if (readcount = = 0)
V(&rwmutex);
V(&rmutex);
}
Semaphore rwmutex={1,NULL},rsem={10,NULL};
Readeri(11个)
{
P(&rwmutex);
P(&rsem);
V(&rwmutex);
read data;
V(&rsem);
}
rwmutex和rsem值
范围
Writerj(2个)
{ int i;
P(&rwmutex);
for (i=1;i<=10;i++)
P(&rsem);
write or update data;
for (i=1;i<=10;i++)
V(&rsem);
V(&rwmutex);
}
例4 生产者-消费者问题
三信号量:空、满、互斥,初值如下
Semaphore empty = {N, NULL};
Semaphore full = { 0, NULL};
Semaphore mutex = {1, NULL};
Producer
P(&empty);
P(&mutex); //进入区
one unit --> buffer;
V(&mutex);
V(&full);
//退出区
Consumer
P(&full);
P(&mutex); //进入区
one unit <-- buffer;
V(&mutex);
V(&empty); //退出区
2.5 进程通讯
P-V操作 低级通讯 交换信息量少
交换信息量多 高级通讯
2.5.1 消息缓冲区通讯
Hansen
Windows GetMessage,PeekMessage
TranslateMessage, DispatchMessage
UNIX
例 p96~98
server.c client.c
75
2.5.2 管道通讯 (pipe)
无名(父子) 有名(FIFO,进程间)
UNIX fork( )函数, 产生子进程
调用后, 父子进程均从下一条语句继续执行
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
fork(); printf(“Hello\n”);
fork(); printf(“world\n”);
}
例 无名 父子进程通讯 wait, exit 同步
文件描述符: fdp[0]-读, fdp[1]-写
pipe函数调用 产生
pipe.c
2.5.3 共享存储段
2.5.4 网络通讯
2.6 死锁
若干进程竞争使用资源,每个进程都得不到继
续执行的资源,结果都处于阻塞状态。
产生死锁的原因:
i) 系统资源不足
ii) 进程运行顺序不合适
78
P1
R1
R2
P2
I/O设备共享时的死锁情况
P2Rel(R1)
②
P2Rel(R2)
P2Req(R1)
①
D
P2Req(R2)
③
④
P1Req(R1)
P1Req(R2) P1Rel(R1) P1Rel(R2)
进程推进顺序对死锁的影响
2.6.1 死锁必要条件
1)
2)
3)
4)
资源非共享,互斥控制
非剥夺控制
逐次请求,不释放已分配资源
进程资源循环链
例 P、V操作不当
图2.43
例 内存分配
图2.44
81
S1 S2 初值为0
2.6.2 预防
死锁4条件之一不成立
1) 假脱机 共享
2) 抢占 (级别)
3) 资源静态分配,一次性分配
4) 资源分配次序
83
2.6.3 避免(预测)
1) 银行家算法
最坏可能,过于保守
2) Hebemann算法
进程有向图
84
2.6.4 检测
进程资源循环链
进程资源有向图 检测
化简后,是否有环存在
2.6.5 解除 (恢复)
1)
2)
删除进程,撤销
剥夺资源
85
作业管理
功能:控制和调度
 作业的状态:提交、后备、执行、完成,
作业调度程序
 作业控制

联机
 脱机


作业调度
功能:作业情况JCB,算法,分配资源,回收
资源
 算法

86
1、现代操作系统的最基本特征是(
)。
A.多道程序设计 B.中断处理 C.并发和共享
D.实现分时与实时处理
2、允许多个用户以交互方式使用计算机的操作系统,称
为(
)。
A. 批处理操作系统 B. 分时操作系统 C. 实时操作系统
D. 多处理机操作系统
3、正在执行的进程由于其时间片用完,此时其进程应从
执行态变为( )态。
A. 就绪
B. 等待
C. 运行
D. 阻塞
4、进程与程序之间有密切联系,但又是不同的概念。二
者的一个本质区别是(
)。
A.程序是静态概念,进程是动态概念
B.程序是动
态概念,进程是静态概念
C.程序保存在文件中,进程存放在内存中
D.程序
顺序执行,进程并发执行
5、若进程没有挂起状态,下列进程状态的转换中,哪一个
是不正确的(
)。
A.就绪一执行
D.阻塞一就绪
B.执行一就绪
C.就绪一阻塞
6、在引入线程概念的操作系统中,系统进行资源分配的基
本单位是(
)。
A.线程
B.程序
C.作业
D.进程
7、一作业进入内存后,则所属该作业的进程初始时处于(
)状态。
A、运行
B、等待
C、就绪
D、收容
8、若P、V操作的信号量S初值为2,当前值为-1,则表示有
(
)等待进程。
A、0个
B、1个
C、2个
D、3个