第二章 进程管理Word格式文档下载.docx

上传人:b****5 文档编号:19829743 上传时间:2023-01-10 格式:DOCX 页数:25 大小:29.25KB
下载 相关 举报
第二章 进程管理Word格式文档下载.docx_第1页
第1页 / 共25页
第二章 进程管理Word格式文档下载.docx_第2页
第2页 / 共25页
第二章 进程管理Word格式文档下载.docx_第3页
第3页 / 共25页
第二章 进程管理Word格式文档下载.docx_第4页
第4页 / 共25页
第二章 进程管理Word格式文档下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

第二章 进程管理Word格式文档下载.docx

《第二章 进程管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第二章 进程管理Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。

第二章 进程管理Word格式文档下载.docx

=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,进入下一级队列,等待进程被唤醒时,进入原来的就绪队列,当进程第一次就绪时,进入第一级队列

*首先系统中设置多个就绪队列

*每个就绪队列分配给不同时间片,优先级高的为第一级队列给他时间片小,随着队列级别的降低,时间片加大

*各个队列按照先进先出调度算法

*一个新进程就绪后进入第一级队列

*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1