第二章 进程管理Word格式文档下载.docx
- 文档编号:19829743
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:25
- 大小:29.25KB
第二章 进程管理Word格式文档下载.docx
《第二章 进程管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第二章 进程管理Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
=x-1;
write(x);
write(x);
Cobegin
get;
copy;
put;
Coend
fstg
初始状态3,4,...,m22(1,2)
g,c,p4,5,...,m33(1,2,3)
g,p,c4,5,...,m33(1,2,2)
c,g,p4,5,...,m32(1,2,2)
c,p,g4,5,...,m32(1,2,2)
p,c,g4,5,...,m32(1,2,2)
p,g,c4,5,...,m33(1,2,2)
设信息长度为m,有多少种可能性?
2.2.1进程的概念
Process
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
程序与进程之间的区别:
进程更能真实地描述并发,而程序不能。
进程是由程序和数据两部分组成的。
程序是动态的,进程是动态的。
进程有生命周期,有诞生有消亡,短暂的。
而程序是相对长久的。
一个程序可对应多个进程,反之亦然。
进程具有创建其它进程的功能,而程序没有。
进程的分类:
系统进程:
用户进程:
(系统进程优先于用户进程)
2.2.2进程的基本状态及其转换
进程的三种基本状态:
进程在生命消亡前处于且仅处于三种基本状态之一。
不同系统设置的进程状态数目不同。
运行态(Running):
进程占有CPU,并在CPU上运行。
就绪态(Ready):
一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态。
(当调度给其CPU时,立即可以运行)
等待态(Blocked):
阻塞态、挂起态、封锁态.冻结态、睡眠态
指进程因等待某种事件的发生而暂时不能运行的状态。
(即使CPU空闲,该进程也不可运行)
状态转换:
在进程运行过程中,由于自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换。
就绪—运行:
被调度程序选中;
运行—就绪:
时间片到时,或有更高优先级的进程出现;
运行—等待:
等待某事件发生;
等待—就绪:
等待的事件发生了。
2.2.3进程控制块
(ProcessControlBlock)
概念:
系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。
系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。
进程与PCB是一一对应的。
PCB的内容:
调度信息:
进程名;
进程的内部标识;
用户名;
进程状态;
进程优先级;
进程的存储信息(起始地址,长度);
进程资源清单;
进程家族关系;
进程的队列指针;
进程的消息队列指针;
进程当前打开的文件。
现场信息:
记录了重要的寄存器;
(虚)时钟等内容。
PCB表:
系统把所有PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表。
PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度。
(注:
多道程序中的多道与系统并发度不同)
进程控制块(ProcessControlBlock)
PCB表组织方式:
常用索引方式,对具有相同状态进程,分别设置各自的PCB索引表,表明PCB在PCB表中的地址。
(其他方式:
线性表或链表)
进程队列:
不同状态进程分别组成队列
运行队列、就绪队列、等待队列
2.2.4进程的特征
并发性:
任何进程都可以同其它进程一起向前推进。
动态性:
进程对应程序的执行:
进程是动态产生,动态消亡的。
进程在生命周期内,在三种基本状态之间转换。
独立性:
进程是CPU调度的一个独立单位。
交互性:
指进程在执行过程中可能与其它进程产生直接或间接的关系。
异步性:
每个进程都与其相对独立的不可预知的速度向前推进。
结构性:
进程的组成:
程序+数据+PCB
可再入程序:
可被多个进程同时调用的程序,具有下列性质:
它是纯代码的,即在执行过程中自身不改变,调用它的进程应该提供数据区。
【思考题】:
1.如果系统中有几个进程,运行的进程最多几个,最少几个;
就绪进程最多几个最少几个;
等待进程最多几个,最少几个。
2.有没有这样的状态转换,为什么:
等待—运行;
就绪—等待
3.一个转换发生,是否另一个转换一定发生,找出所有的可能。
4.举几个日常生活中类似进程的例子。
2.3进程间的相互作用
进程间的联系
进程的同步机制──信号量及P.V操作(解决进程同步互斥问题)
2.3.1进程间的联系
相交进程与无关进程
相交进程:
指多个并发进程在逻辑上有某种联系。
无关进程(不相交进程):
在逻辑上无任何联系的进程。
直接作用和间接作用
直接作用:
进程间的相互联系是有意识的安排的,直接作用只发生在相交进程间。
间接作用:
进程间要通过某种中介发生联系,是无意识安排的,可发生在相交进程之间,也可发生在无关进程之间。
进程的同步(直接作用)
进程的同步:
synchronism
指系统中一些进程需要相互合作,共同完成一项任务。
具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。
例:
司机P1售票员P2
REPEATREPEAT
启动关门
正常运行售票
到站停开门
UNTILFALSEUNTILFALSE
进程的互斥(间接作用)mutualexclusion
由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。
临界资源:
criticalresource
系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。
临界区(互斥区):
criticalsection
一个程序片段的集合,这些程序片段分散在不同的进程中,对某个共享的数据结构(共享资源)进行操作。
在进程中涉及到临界资源的程序段叫临界区。
进程的互斥(间接作用)
使用互斥区的原则:
有空让进:
当无进程在互斥区时,任何有权使用互斥区的进程可进入。
无空等待:
不允许两个以上的进程同时进入互斥区。
有限等待:
任何进入互斥区的要求应在有限的时间内得到满足。
前提:
任何进程无权停止其它进程的运行,进程之间相对运行速度无硬性规定
解决方法:
硬件(当一个进程进入临界区,就屏蔽所有中断,但成本高。
软件(用编程解决,但常常忙等待。
)
软件解法
(1)
free:
表示临界状态
true:
无进程在临界区(初值)
false:
有进程在临界区
....
L:
iffreethen
begin
=false;
‘进入临界区’
end
elsegotoL;
=true
软件解法
(2)
turn:
trueP进入临界区
falseQ进入临界区
P:
repeatuntilturn;
‘进入临界区’
turn:
=flase;
Q:
repeatuntilnotturn;
=true;
软件解法:
(3)
pturn,qturn:
初值为false
P进入临界区的条件:
pturn∧notqturn
Q进入临界区的条件:
notpturn∧qturn
P....Q.....
pturn:
pturn:
=ture;
repeatuntilnotqturn;
repeatuntilnotpturn
‘进入临界区’‘进入临界区’
qturn:
=false
......
软件解法(4)Dekker算法:
在解法(3)基础上引入turn枚举类型初值任意
P:
Repeat
whileqturndo
ifturn=2thenbegin
whileturn=2do
=true
end;
'
进入临界区'
=2;
ptum:
.....
Untilfalse
Q:
whilepturndo
ifturn=1thenbegin
whileturn=1do
=1;
qtum:
软件解法的缺点:
1.忙等待
2.实现过于复杂,需要高的编程技巧
硬件解法
(1)
“测试并建立”指令
FunctionTest_and_Set
(vartarget:
boolean):
boolean
begin
Test_and_Set:
=target;
target:
end
Varlock:
boolean;
进入临界区前执行:
WhileTest_and_Set(lock)do
skip;
离开临界区后执行:
lock:
硬件解法
(2)
“交换”指令
FunctionSwap(vara,b:
boolean)
Vartemp:
temp:
=a;
a:
=b;
b:
=temp
每一组共享变量定义一个全局变量
每个进程定义一个局部变量
Varkey:
key:
repeat
swap(lock,key);
untilkey=false;
硬件解法(3)
“开关中断”指令
执行“关中断”指令
执行“开中断”指令
2.3.2进程的同步机制──
信号量及P.V操作(解决进程同步)
同步机制:
信号量及P、V操作;
管程;
条件临界域;
路径表达式等(用于集中式系统中)
会合;
通信顺序进程;
分布进程;
远程过程调用等(适用于分布式系统中)
同步机制应满足的基本要求:
*描述能力*可以实现
*效率高*使用方便
信号量:
semaphore
是一个数据结构。
定义如下:
TYPEsemaphore=RECORD
Value:
integer
Queue:
Pointer_PCB
END
信号量说明:
VAR:
S:
P.V操作
P操作
P(s):
s.Value:
=s.Value-1;
IFs.Value<
0then
将该进程状态置为等待状态,然后将该进程的PCB插入相应的等待队列末尾。
V操作
V(s):
s.Value:
=s.Value+1;
=0then
唤醒相应等待队列中等待的一个进程,改变其状态为就绪态,并将其插入就绪队列。
P、V操作为原语操作
原语:
primitiveoratomicaction
是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性。
即原语的执行必须是连续的,在执行过程中不允许被中断。
实现:
开关中断
信号量的使用:
必须置一次且只能置一次初值,初值不能为负数
只能执行P、V操作
用P.V操作解决进程间互斥问题
经典的生产者─消费者问题
同步问题:
P进程不能往“满”的缓冲区中放产品,设置信号量为S1
Q进程不能从“空”的缓冲区中取产品,设置信号量S2
P:
Q:
RepeatRepeat
生产一个产品;
P(s2);
送产品到缓冲区;
从缓冲区取产品;
V(s2);
V(s1);
P(s1)消费产品
Untilfalse;
Untilfalse;
Repeat
P(s1);
V(s2)
【思考题】要不要对缓冲区(临界资源)进行互斥操作?
I:
=0
REPEAT
生产产品;
P(S1)
往Buffer[I]中放产品;
V(S2)
=(I+1)modn
UNTILfalse
Q:
J:
REPEAT
P(S2)
从Buffer[J]取产品;
V(S1)
消费产品
=(J+1)modn
UNTILfalse
P.V操作讨论
1)信号量的物理含义:
S>
0表示有S个资源可用;
S=0表示无资源可用;
S<
0则|S|表示S等待队列中的进程个数。
P(S):
表示申请一个资源;
V(S)表示释放一个资源。
信号量的初值应该大于等于0
2)P.V操作必须成对出现,有一个P操作就一定有一个V操作。
当为互斥操作时,它们同处于同一进程。
当为同步操作时,则不在同一进程中出现。
如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要,一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作前。
而两个V操作无关紧要。
3)P.V操作的优缺点
优点:
简单,而且表达能力强(用P.V操作可解决任何同步互斥问题。
缺点:
不够安全;
P.V操作使用不当会出现死锁;
遇到复杂同步互斥问题时实现复杂。
读者与写者问题
第一类:
读者优先
如果读者来:
1)无读者写者,新读者可以读。
有写者等,但有其它读者正在读,则新读者可以读。
有其它读者,且有写者等候,新读者也可以读。
如果写者来:
2)无读者,新写者可以写。
有读者,新写者等待。
有其它写者,新写者等待。
2.哲学家就餐问题
Repeat
思考;
取fork[i];
取fork[(i+1)mod5];
进食;
放fork[i];
放fork[(i+1)mod5];
state:
array[0..4]of
(思考,饥饿,进食);
ph:
array[0..4]ofsemaphore;
mutex:
semaphore;
i:
0..4;
2.4进程通信
概念
消息缓冲通信方式
2.4.1概念
P.V操作实现的是进程之间的低级通讯,所以P.V为低级通讯原语。
它只能传递简单的信号,不能传递交换大量信息。
如果要在进程间传递大量信息则要用Send/Receive原语(高级通讯原语)。
进程通信的方式
共享内存:
相互通讯进程间设有公共内存,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。
这种通信模式需要解决两个问题?
消息传递:
系统为进程提供了两个高级通讯原语send和receive。
send:
当要进行消息传递时执行send
receive:
当接收者要接收消息时执行receive
消息传递模式
消息缓冲:
在内存中开设缓冲区,接收进程接收传递。
信箱通信:
管道通信:
直接方式:
发送进程发消息时要指定接收进程的名字,
反过来,接收时要指明发送进程的名字。
*对称形式:
一对一
*非对称形式:
多对一(顾客/服务员)
有缓冲(有界,无界),无缓冲
间接方式:
发送进程发消息时不指定接收进程的名字,而是指定一个中间媒介,即信箱。
进程间通过信箱实现通信。
发送原语:
send(MB,Message)
接受原语:
receive(MB,Message)
2.4.2消息缓冲
(有界缓冲区原理):
在操作系统空间设置一组缓冲区,当发送进程需要发送消息时,执行send系统调用,产生自愿性中断,进入操作系统,操作系统为发送进程分配一个空缓冲区,并将所发送的消息从发送进程copy到缓冲区中,然后将该载有消息的缓冲区连接到接收进程的消息链链尾,如此就完成了发送过程。
发送进程返回到用户态继续执行;
在以后某个时刻,当接收进程执行到receive接收原语时,也产生自愿性中断进入操作系统,由操作系统将载有消息的缓冲区从消息链中取出,并把消息内容copy到接收进程空间,之后收回缓冲区,如此就完成了消息的接收,接收进程返回到用户态继续进行。
消息缓冲区结构:
消息长度消息正文
发送者消息队列指针
用P.V操作来实现Send原语:
Send(R,M)P(m-mutex);
Begin把缓冲区挂到接收进程
根据R找接收进程,的消息链链尾;
如果没找到出错返回;
V(m-mutex);
申请空缓冲区P(s-b);
V(s-m);
P(b-mutex);
END
摘空缓冲区;
V(b-mutex);
把消息从M处copy到空缓冲区;
其中s-b初值:
n;
s-m初值:
管道通信方式Pipe
也称共享文件方式,基于文件系统,利用一个打开的共享文件连接两个相互通信的进程,文件作为缓冲传输介质。
2.5进程控制
创建、撤消进程以及完成进程各状态之间的转换。
由具有特定功能的原语完成。
进程创建原语进程撤消原语
阻塞原语唤醒原语
挂起原语激活(解挂)原语
2.5.1进程创建原语
进程创建主要完成以下工作:
创建一个PCB(找一个空PCB);
为进程分配内存等必要资源;
填写PCB中各项目;
把其挂到进程就绪队列。
2.5.2进程撤消原语
收回进程所占有的资源;
撤消该进程的PCB。
2.5.3进程阻塞原语
处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入;
等待磁盘数据传输完成;
等待其它进程发送消息,当被等待的事件未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态。
2.5.4进程唤醒原语
2.6进程调度(CPU调用)
要解决的问题
WHAT:
按什么原则分配CPU—进程调度算法
WHEN:
何时分配CPU—进程调度的时机
HOW:
如何分配CPU—CPU调度过程
(进程的上下文切换)
2.6.1进程调度算法
1.进程调度
进程调度的任务是控制协调进程对CPU的竞争即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。
2.算法确定的原则
具有公平性
资源利用率,特别是CPU利用率
在交互式系统情况下要追求响应时间,其越短越好。
在批处理系统情况下要追求系统吞吐量
3.各种算法
先进先出进程调度算法(FIFO)
按照进程就绪的先后次序来调度进程。
优点:
实现简单
缺点:
是没考虑进程的优先级
基于优先数的调度
(HPF—HighestPriorityFirst)
优先选择就绪队列中优先级最高的进程投入运行
优先级根据优先数来决定
确定优先数的方法
静态优先数法:
在进程创建时指定优先数,在进程运行时优先数不变。
动态优先数法:
在进程创建时创立一个优先数,但在其生命周期内优先数可以动态变化。
如等待时间长优先数可改变。
两种占用CPU的方式
可剥夺式(可抢占式Preemptive):
当有比正在运行的进程优先级更高的进程就绪时,系统可强行剥夺正在运行进程的CPU,以供具有更高优先级的进程使用。
不可剥夺式(不可抢占式Nonpreemptive):
某一进程被调度运行后除非由于它自身原因不能运行,否则一直运行下去。
时间片轮转程序调度算法
(RR—RoundRobin)
把CPU划分成若干时间片,并且按顺序赋给旧序列队中每一个进程,进程轮流占有CPU,当时间片用完时,进程未执行完毕,则系统剥夺该进程的CPU,该进程排列旧序列队末尾。
同时选择另一个进程运行。
分时系统中常用时间片轮转法
时间片选择问题:
固定时间片
可变时间片
与时间片大小有关的因素:
系统响应时间
就绪进程个数
CPU能力
多队列反馈调度算法:
将就绪队列分为N级,每个就绪队列分配给不同的时间片,队列级别越高,时间越长,级别越小,时间片越小,最后级采用时间片轮转,其它队列用先进先出;
系统从第一级调用,当第一级为空时,系统转向第二个了队列,.....当运行进程用完一个时间片,放弃CPU,进入下一级队列,等待进程被唤醒时,进入原来的就绪队列,当进程第一次就绪时,进入第一级队列
*首先系统中设置多个就绪队列
*每个就绪队列分配给不同时间片,优先级高的为第一级队列给他时间片小,随着队列级别的降低,时间片加大
*各个队列按照先进先出调度算法
*一个新进程就绪后进入第一级队列
*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 进程管理 第二 进程 管理