第二章进程和线程.docx

上传人:b****7 文档编号:23778234 上传时间:2023-05-20 格式:DOCX 页数:22 大小:67.17KB
下载 相关 举报
第二章进程和线程.docx_第1页
第1页 / 共22页
第二章进程和线程.docx_第2页
第2页 / 共22页
第二章进程和线程.docx_第3页
第3页 / 共22页
第二章进程和线程.docx_第4页
第4页 / 共22页
第二章进程和线程.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第二章进程和线程.docx

《第二章进程和线程.docx》由会员分享,可在线阅读,更多相关《第二章进程和线程.docx(22页珍藏版)》请在冰豆网上搜索。

第二章进程和线程.docx

第二章进程和线程

1顺序性

是指顺序程序所规定的每个动作都在上个动作结束后才开始的特性。

2封闭性

是指只有程序本身的动作才能改变程序的运行环境。

3可再现性

是指程序的执行结果与程序运行的速度无关。

4进程

程序在并发环境中的执行过程。

5互斥

在逻辑上本来完全独立的进程,由于竞争同一个资源而产生的相互制约的关系。

6同步

是指进程间共同完成一项任务时直接发生相互作用的关系。

也就是说,这些具有伙伴关系的进程在执行次序上必须遵循确定的规律。

7临界资源

一次仅允许一个进程使用的资源。

8临界区

在每个进程中访问临界资源的那段程序。

9线程

线程是进程中实施调度和分派的基本单位。

10管程

管程是一种高级同步机制,一个管程定义一个数据结构和能为并发进程在其上执行的一组操作,这组操作能使进程同步和改变管程中的数据。

11进程控制块

进程控制块是进程存在的唯一标识,它保存了系统管理和控制进程所必须的信息,是进程动态特性的集中表现。

12原语

指操作系统中实现一些具有特定功能的程序段,这些程序段的执行过程是不可分割的,即其执行过程不允许被中断。

13就绪态

进程已经获得了除cpu之外的全部资源,等待系统分配cpu,一旦获得cpu,进程就可以变为运行态。

14运行态

正在cpu上执行的进程所处的状态。

在单cpu系统中,任何时候最多只能有一个进程处于运行状态。

15阻塞态

又称等待态,指正在运行的进程因等待某个条件发生而不能运行时所处的状态。

处于阻塞态的进程在逻辑上是不能运行的,即使cpu空闲,它也不能占用cpu。

16进程通信

是指进程间的信息交换。

17同步机制

同步机构是负责处理进程之间制约关系的机制,即操作系统中负责解决进程之间协调工作的同步关系(直接制约关系),以及共享临界资源的互斥关系(间接制约关系)的执行机构。

简答题

1在操作系统中为什么要引入进程概念?

答:

由于多道程序并发执行时共享系统资源,共同决定这些资源的状态,因此系统中各程序在执行过程中就出现了相互制约的新关系,程序的执行出现“走走停停”的新状态。

用程序这个静态的概念已不能如实反映程序并发执行过程中的这些特征。

为此,人们引入了“进程(Process)”这一概念来描述程序动态执行过程的性质。

进程和程序是两个完全不同的概念。

然而,进程与程序之间存在密切关系,进程的功能是通过程序的运行得以实现的,进程活动的主体是程序。

进程不能脱离开具体程序而独立存在。

2有人说,一个进程是由伪处理机执行的一个程序,这话对吗?

为什么?

答:

对。

因为伪处理机的概念只有在执行时才存在,它表示多个进程在单处理机上并发执行的一个调度单位。

因此,尽管进程是动态概念,是程序的执行过程,但是,在多个进程并行执行时,仍然只有一个进程占据处理机执行,而其他并发进程则处于就绪或等待状态。

这些并发进程就相当于由伪处理机执行的程序。

3试比较进程和程序的区别

答:

(1)进程是一个动态的概念,而程序是一个静态的概念,程序是指令的有序集合,无执行含义,进程则强调执行的过程。

(2)进程具有并行特征(独立性、异步性),程序则没有。

(3)不同的进程可以包含同一个程序,同一程序在执行中也可以产生多个进程。

4进程的基本状态有哪些?

试描绘进程状态转换图。

答:

进程至少有三种基本状态:

运行状态、就绪状态和阻塞状态(或等待状态)。

进程状态转换如下图:

5并发进程间的制约有哪两种?

引起制约的原因是什么?

答:

并发进程所受的制约有两种:

直接制约和间接制约。

直接制约是由并发进程相互共享对方的私有资源所引起的;间接制约是由竞争共有资源而引起的。

6什么是进程间的互斥?

什么是进程间同步?

答:

进程间的互斥是指:

一组并发进程中的一个或多个程序段,因共享某一共有资源而导致它们必须以一个不许交叉执行的单位执行,即不允许两个以上的共享该资源的并发进程同时进入临界区。

进程间的同步是指:

异步环境下的一组并发进程因直接制约相互发送消息而进行相互合作、相互等待,是各进程按一定的速度执行的过程。

7什么是临界区和临界资源?

进程进入临界区的调度原则是什么?

答:

临界资源——一次仅允许一个进程使用的资源

临界区——在每个进程中访问临界资源的那段程序

一个进程进入临界区的调度原则是:

如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入

任何时候,处于临界区内的进程不可多于一个。

如已有进程进入自己的临界区,则其他所有试图进入临界区的进程必须等待

进入临界区的进程要在有限的时间内退出,以便让其他进程能及时进入自己的临界区

如果进程不能进入自己的临界区,则应让出cpu,避免进程出现“忙等”现象.

8简述信号量的定义和作用。

P,V操作原语是如何定义的?

答:

信号量一般是由两个成员组成的数据结构,其中一个成员是整型变量,表示该信号量的值,它与相应资源的使用情况有关;另一个是指向PCB的指针。

当多个进程都等待同一信号量时,它们就排成一个队列,由信号量的指针项指出该队列的队首。

(2分)

信号量通常可以简单反映出相应资源的使用情况,它与P、V操作原语一起使用可实现进程的同步和互斥。

(1分)

P,V操作原语有如下定义。

P(S)顺序执行下述两个动作(1分):

⑴信号量的值减1,即S=S-1;

⑵如果S>=0,则该进程继续执行。

如果S<0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直到其他进程在S上执行V操作,把它释放出来为止)。

V(S)顺序执行下述两个动作(1分):

S值加1,即S=S+1;

如果S>0,则该进程继续运行;

如果S<=0,则释放信号量队列上的第一个PCB所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。

9什么是线程?

它与进程有什么关系?

答:

线程是进程中实施调度和分派的基本单位。

线程和进程之间有如下关系:

一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。

资源分配给进程,同一进程的所有线程共享该进程的所有资源。

处理机分给线程,即真正在处理机上运行的是线程。

线程在执行过程中,需要协作同步。

不同进程的线程间要利用消息通信的办法实现同步。

10什么是管程?

它由哪几部分组成?

有什么基本特性?

答:

一个管程定义了一个数据结构和能为并发进程在其上执行的一组操作,这组操作能同步进程和改变管程中的数据。

一个管程由四个部分组成,它们是管程名称、局部与管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句。

管程具有以下特性:

管程内部的局部数据变量只能被管程内定义的过程所访问,不能被管程外面声明的过程直接访问

进程要想进入管程,必须调用管程内的某个过程

一次只能有一个进程在管程内执行,而其余调用该管程的进程都被挂起,等待该管程成为可用的。

就是说,管程自身能有效地实现互斥。

综合题

1如下图所示的工作模型中,有三个进程p0,p1,p2和三个缓冲区B0,B1,B2.进程之间借助于相邻缓冲区进行消息传递:

每个进程每次从缓冲区中取一条消息,经加工处理后送入另一个缓冲区中,三个缓冲区分别可存放3,2,2个消息。

初始时,仅缓冲区0有一个消息。

试用P、V操作写出三个进程之间的同步及互斥流程。

答:

这是一个生产者/消费者问题,而且每个进程既是生产者,也是消费者。

(2’)

为此,应设置6个信号量:

B0S1,B0S2,B1S1,B1S2,B2S1,B2S2,分别代表B0,B1,B2中是否有空缓冲和有数据。

B0S1,B0S2,B1S1,B1S2,B2S2:

semaphore;

B0S1=2;B0S2=1;B1S1=2;B1S2=0;B2S1=2;B2S2=0;(2’)

Cobegin(`6’=2’*3)

P0P1P2

beginbeginbegin

P(B0S2)P(B1S2)P(B2S2)

从B0取一个数据从B1取一个数据从B2取一个数据

V(B0S2)V(B1S1)V(B2S1)

加工加工加工

P(B1S1)P(B2S1)P(B0S1)

将加工结果送B1将加工结果送B2将加工结果送B0

V(B1S2)V(B2S2)V(B0S2)

endendend

coend

这道题也可以增加互斥信号量,以便P0与P1之间互斥使用B0缓冲区,P1与P2之间互斥使用B1缓冲区,P2与P0之间互斥使用B0缓冲区。

这里主要描述它们之间的同步关系。

若考虑互斥共享缓冲区,请自己加上。

2设用三个队列管理缓冲区池的使用情况,分别为空白缓冲队列em,输入缓冲队列in,以及输出缓冲队列out。

过程add_buf(type,numb)和take_buf(type,numb)分别用来把缓冲区numb插入type队列和从type队列中取出缓冲区numb。

试描述进程从任一缓冲队列中得到一个缓冲区的过程get_buf(type,numb)和释放一个缓冲区numb进入缓冲队列的过程put_buf(type,numb)。

答:

假定用信号量s代表任一队列的可用缓冲区个数。

假定三个队列的初值分别为n1,n2,n3。

对任一队列的操作必须互斥。

因此再引入一个互斥使用任一队列的信号量mutex,其初值为1。

这里type代表队列的类型,它的取值为输入、输出和空白。

(4’)

当有进程希望从任一队列取一个缓冲区时,过程get_buf(type,numb)的动作如下:

get_buf(type,numb)(`3’)

begin

p(s)

p(mutex)

numb=take_buf(type,numb)

v(mutex)

end

当有进程希望向任一队列送一个缓冲区时,过程put_buf(type,numb)的动作如下:

put_buf(type,numb)(`3’)

begin

p(mutex)

add_buf(type,numb)

v(mutex)

v(s)

end.

3设有一个售票厅,可容纳100人购票。

如果厅内不足100人则允许进入,进入后购票,购票后退出。

如果厅内已有100人,则在厅外等候。

试问:

1)购票者之间是同步还是互斥?

用P、V操作表达购票者的工作过程。

解:

1)购票者之间是互斥关系。

(2’)

2)一个售票厅可容纳100人购票,说明最多允许100个购票者共享售票厅;可引入一个信号量empty,其初值为100。

由于购票者必须互斥地进行购票,故应再设一个mutex,其初值为1。

(4’)

用P、V操作表达购票者的工作过程如下:

(`4’)

empty,mutex:

semaphore;

empty:

=100;mutex:

=1;

begin

p(empty)

p(mutex)

进入厅内购票,购票后退出

v(empty)

v(mutex)

end.

4某招待所有100个床位,住宿者入住要先登记(在登记表上填写姓名和床位号).离去时要注销登记(在登记表上删去姓名和床位号).请给出住宿登记及注销过程的算法描述.

答:

某招待所有100个床位,为了正确管理,引入一个信号量empty代表空床位数,初值为100;住宿者入住要先登记(在登记表上填写姓名和床位号),显然,登记表是一个临界资源,必须互斥访问,引入一个mutex,其初值为1。

(4’)

住宿登记及注销过程的算法描述如下:

住宿登记:

(`3’)

begin

p(empty)//检查有无床位

p(mutex)//申请登记

找出一个空床位将名字登入表中

v(mutex)

end

注销过程:

(`3’)

begin

p(mutex)//申请退房

找出自己的登记项,并删除该项的登记

v(mutex)

v(empty)

end.

5有一个阅览室,共有100个座位。

为了很好地利用它,读者进入时必须先在登记表上进行登记。

该表表目设有座位号和读者姓名;离开时再将其登记项擦除。

试问:

为描述读者的动作,应编写几个程序,应设几个进程、它们之间的关系怎样?

并请用P、V操作描述进程之间的同步算法。

解:

为了描述阅览室,用一个登记表来记录其使用情况。

表中共有100项。

每当有读者进入阅览室时,为了正确地登记,各读者应互斥使用(1’)。

为此设两个信号量:

mutex为互斥信号量,用来制约各读者互斥地进行登记,其初值为1;empty为同步信号量,用来制约各读者能同时进入阅览室的数量,其初值为100(2’)。

下面用两个过程描述对表格应执行的动作:

登记过程:

(`2’)擦除过程:

(`2’)

beginbegin

P(empty)P(mutex)

P(mutex)找到自己的登记项擦除

找到一个登记项登记V(mutex)

V(mutex)V(empty)

endend

为了正确地描述读者的动作,可以将读者看成进程。

若干读者希望进入阅览室时,调用登记过程,退出阅览室时,调用擦除过程(1’)。

可见,一个程序可对应多个读者。

可设的进程数由读者数决定,其动作如下:

(`2’)

begin

调用登记过程

进入阅览室阅读

准备退出

调用擦除过程

end.

6一条河上架设了由若干个桥墩组成的一座桥。

若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。

过河时,只要对岸无人过,就可以过;但不允许河对岸的两个人同时过,以防止出现死锁。

请给出两个方向的人顺利过河的同步算法。

解:

假设一座桥由N个桥墩,也即最多允许有N个人同向过河,用一个计数器R记录同时过河的人数(2’)。

用S1信号量保护计数器,其初值为1,R的初值为0;互斥使用桥的信号量用S表示,其初值为1。

(2’)

同步算法描述如下:

proceduregoriver()

begin

L:

P(S1);//为同时过河,申请对计数器计数

IfR>NbeginV(S1);gotoL;end//同方向过河的人站满桥墩时,重新申请计数

R=R+1;

IfR==1P(S);//申请过河

V(S1);//释放计数器的使用权(3’)

占有一个桥墩,并顺序过河到对岸;

P(S1);

R=R-1;

IfR==0V(S);//如果已经无同向的人过河,释放占用权

V(S1);(3’)

end.

7在一个飞机订票系统中,多个用户共享一个数据库。

各用户可以同时查询信息,若有一个用户要订票,须更新数据库时,其余所有用户都不可以访问数据库。

请用P,V操作设计一个同步算法,实现用户查询与订票功能。

要求:

当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。

利用信号量机制保证其正常执行。

解:

这是典型的读者——写者问题,查询信息的用户是读者,订票用户是写者,并且要求写者优先。

(2’)

变量说明:

(`2’)

计数变量

rc——正在运行的查询者进程数目,初值为0.

信号量

Sw——控制订票者进程的活动,初值为1.

Src——互斥使用rc变量,初值为1.

S——当订票者到达时封锁后续的读进程,初值为1.

读者进程

P(S)

P(Src)

rc=rc+1

if(rc==1)P(Sw)

V(Src)

V(S)(2’)

查询库当中的信息

P(Src)

rc=rc-1;

if(rc==0)V(Sw)

V(Src)(2’)

写者进程(`2’)

P(S)

P(Sw)

更新数据库内容

V(Sw)

V(S)

8某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。

若把一个购票者看作一个进程,请回答下列问题:

  

(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。

  

(2)根据所定义的信号量,把应执行的PV操作填入下述空格中,以保证进程能够正确地并发执行。

  COBEGIN PROCESS PI(I=1,2,……)

       begin        

进入售票厅;

购票;

           退出;

       end

   COEND

(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。

答:

(1)定义一信号量S,初始值为20。

 (1’)

  意义:

(`3’=1’*3)

  S>0 S的值表示可继续进入售票厅的人数 

  S=0 表示售票厅中已有20名顾客(购票者) 

  S<0 |S|的值为等待进入售票厅的人数 

 

(2)上空格为P(S)(2’);下空格为V(S) (2’)

 (3)S的最大值为20(1’);S的最小值为20-n (1’)

9在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开门关门,当售票员关好车门后,驾驶员才能开车行使。

试用P/V操作实现司机与售票员间的同步。

解答:

semaphoremutex1=0,mutex2=0;(2’)

main(){

cobegin

driver()

busman()

coend

}(2’)

driver(){

while(true){

p(mutex1)

启动公共汽车

正常开车

到站停车

v(mutex2)

}

}(3’)

busman(){

while(true){

关车门

v(mutex1)

售票

p(mutex2)

开车门

上下乘客

}

}(3’)

10并发问题:

设有两个优先级相同的进程p1,p2如下。

令信号s1,s2的初值为0,已知z=2,试问p1,p2并发运行结束后x=?

y=?

z=?

进程p1进程p2

y:

=1x:

=1

y:

=y+2x:

=x+1

v(s1)p(s1)

z:

=y+1x:

=x+y

p(s2)v(s2)

y:

=z+yz:

=x+z

解答:

(分析过程略2’)从结果来看,两个进程无论谁先谁后,结果都是一样的。

(2’)

x=5;y=12;z=9(6’)

11

试用信号量机制来描述下述前趋图

解答:

首先定义信号量S12,S13,S14,S26,S36,S47,S57,S38,S78的初值都为0,分别表示相对应的进程是否完成:

(2’)

COBEGIN(`8’=1’*8)

ProcessM1:

begin

V(S12)

V(S13)

V(S14)

end

ProcessM2:

begin

P(S12)

V(26)

end

ProcessM3:

begin

P(S13)

V(S36)

V(S38)

end

ProcessM4:

begin

P(S14)

V(S47)

end

ProcessM5:

begin

V(S57)

end

ProcessM6:

begin

P(S26)

P(S36)

end

ProcessM7:

begin

P(S47)

P(S57)

P(S78)

end

ProcessM8:

begin

P(S38)

P(S78)

end

COEND

12

试用信号量机制来描述下述前趋图

 

解答:

首先定义信号量S12,S13,S24,S25,S56,S46,S36的初值都为0,分别表示相对应的进程是否完成(2’):

COBEGIN(`6’=1’*6)

ProcessM1:

begin

V(S12)

V(S13)

end

ProcessM2:

begin

P(S12)

V(24)

V(25)

end

ProcessM3:

begin

P(S13)

V(S36)

end

ProcessM4:

begin

P(S24)

V(S46)

end

ProcessM5:

begin

P(S25)

V(S56)

end

ProcessM6:

begin

P(S36)

P(S46)

P(S56)

end

COEND

13设系统有三个并发进程R,C,P,共享一个能存放n个数据的环形缓冲区buf。

进程R负责从输入设备上读数据,每读一个后把它存放在缓冲区buf的一个单元中;进程C负责从缓冲区读数据并进行处理,之后将处理结果再送入缓冲区的一个单元中;进程P负责从缓冲区读进程C处理的结果并打印。

请用P、V操作为三进程的正确执行写出同步算法。

解答:

解决同步问题需设一个互斥信号量mux,用于控制三个进程互斥使用缓冲区,初值为1;再设三个同步信号量,用于控制对缓冲区的空闲数量和不同数据个数的记录。

S0表示缓冲区空闲个数,初值为n;S1表示缓冲区中输入数据的个数,初值为0;S2表示缓冲区中输出数据的个数,初值为0。

(4’)

算法描述如下:

(`6’=2’*3)

进程R进程C进程P

L1:

L2:

L3:

P(S0)P(S1)P(S2)

P(mux)P(mux)P(mux)

读一个数据从缓冲区中取一个从缓冲区中读

送缓冲区数据处理后放回去输出数据

V(mux)V(mux)V(mux)

V(S1)V(S2)V(S0)打印

gotoL1:

gotoL2:

gotoL3:

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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