第四章 PV补充练习.docx
《第四章 PV补充练习.docx》由会员分享,可在线阅读,更多相关《第四章 PV补充练习.docx(12页珍藏版)》请在冰豆网上搜索。
第四章PV补充练习
1、在操作系统中,P、V操作是一种(D)。
A.机器指令B.系统调用命令C.作业控制命令D.低级进程通信原语
2、若信号量S的初值为2,当前值为-1,则表示有(B)个等待进程。
A.0B.1C.2D.3
3、当(B)时,进程从执行状态转变为就绪状态。
A.进程被调度程序选中B.时间片到
C.等待某一事件D.等待事件发生
4、临界区是(C)
A.一个缓冲区B.一段共享数据区C.一段程序D.一个互斥资源
5、如果系统中有n个进程,则就绪队列中进程的个数最多为(C)
A.n+1B.nC.n-1D.1
6、进程的基本状态有:
执行、就绪和阻塞(等待、挂起).
7、进程的基本特征有:
动态、并发、独立、异步、结构特征。
8、进程是一个程序对某个数据集的一次执行过程。
9、程序并发执行与顺序执行时相比产生了一些新特征,分别是间断性、失去封闭性和不可再现性
10、有m个进程共享同一临界资源,若使用信号量机制实现对临界资源的互斥访问,则信号量的取值范围是1~-(m-1)
1、什么是进程?
进程与程序的主要区别是什么?
答:
进程,即是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。
进程与程序的主要区别是:
(1)程序是指令的有序集合,是一个静态概念,其本身没有任何运行的含义,进程是程序在处理机上的一次执行过程,是一个动态概念。
(2)程序作为软件资料可长期保存,而进程是有生命期的,因创建而产生、因调度而执行、因得不到资源而暂停、因撤消而消亡。
(3)程序是记录在介质上指令的有序集合,而进程则由程序、数据和进程控制块3部分组成。
(4)进程与程序之间无一一对应关系。
不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。
(5)进程是一个独立的运行单位,也是系统进行资源分配和调度的独立单位,而程序无此概念。
2、什么是线程?
线程和进程有什么区别?
答:
线程有时也称为轻量级进程,它是比进程更小的活动单位,它是进程中的一个执行路径。
一个进程可以有多个执行路径即线程。
线程和进程的主要区别如下:
(1)线程是进程的一个组成部分。
一个进程可以有多个线程,而且至少有一个可执行的线程。
(2)进程是资源分配的基本单位,它拥有自己的地址空间和各种资源。
线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而本身并不具有任何资源。
(3)进程的多个线程都在进程的地址空间内活动。
这样,在以线程为单位进行处理机调度和切换时,由于不发生资源变化特别是地址空间的变化,因此切换时间较短。
而以进程为单位进行处理机调度和切换时,由于涉及到资源转移及现场保护等问题,将导致切换时间变长和资源利用率降低。
(4)线程和进程一样,都有自己的状态和相应的同步机制。
但是,由于线程没有自己单独的程序和数据空间,因而不能像进程的程序和数据那样交换到外存去。
(5)进程的调度和控制大多由操作系统的内核完成,而线程的控制既可以由操作系统内核完成,也可以由用户控制完成。
3、试说明进程互斥、同步和通信三者之间的关系。
答:
进程的同步与互斥是指进程在推进时的相互制约关系。
在多道程序系统中,由于资源共享与进程合作,这种进程间的制约成为可能。
为了保证进程的正确运行以及相互合作的进程之间交换信息,需要进程之间的通信。
进程之间的制约关系体现为:
进程的同步和互斥。
进程同步:
它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。
为进程之间的直接制约关系。
在多道环境下,这种进程间在执行次序上的协调是必不可少的。
进程互斥:
它主要源于资源共享,是进程之间的间接制约关系。
在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。
进程通信是指进程间的信息交换。
PV操作作为进程的同步与互斥工具因信息交换量少,效率太低,称为低级通信。
而高级通信则以较高的效率传送大批数据。
P1154-9n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥时的程序描述,给出信号灯值的取值范围,并说明每个取值的物理意义。
main()
{
intmutex=1
cobegin
p1();
p2();
…
pn();
coend
pn()
{
p(mutex);
csn;
v(mutex);
}
p2()
{
p(mutex);
cs2;
v(mutex);
}
p1()
{
p(mutex);
cs1;
v(mutex);
}
}
对于两个并发进程,互斥信号灯的取值仅取1、0、-1这三个值
若mutex=1,表示没有进程进入临界区;
若mutex=0,表示有一个进程进入临界区;
若mutex=-1,表示有一个进程进入临界区,另一个进程等待进入。
P1164-12如图4.34所示,get、copy、put三进程共用两个缓冲区s、t(其大小为每次存放一个记录)。
get进程负责不断地把输入记录送入缓冲区s中,copy进程负责从缓冲区s中取出记录复制到缓冲区t中,而put进程负责从缓冲区t中取出记录打印。
试用P、V操作实现这三个进程之间的同步,并写出程序描述。
缓冲区s
缓冲区t
getcopyput
解:
main(){
intsa=1,sb=0;//sa表示缓冲区s是否为空,sb表示是否有数据可被处理。
intta=1,tb=0;//ta表示缓冲区t是否为空,tb表示是否有数据可被处理。
cobegin
get;
copy;
put;
coend
Get(){
while
(1){
P(sa);
inputdatatobuffers;
V(sb);
}
}
}
Put(){
while
(1){
P(tb);
outputdatatobuffers;
V(ta);
}
}
Copy(){
while
(1){
P(sb);
copydatafrombuffers;
V(sa);
P(ta);
inputcopy-datatobuffert;
V(tb);
}
}
6、某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。
若把一个购票者看作一个进程,请回答下列问题:
(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。
(2)根据所定义的信号量,把应执行的PV操作填入下述方框中,以保证进程能够正确地并发执行。
COBEGINPROCESSPI(I=1,2,……)
begin;
;
进入售票厅;
购票;
退出;
;
end;
COEND
(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。
(1)定义一信号量S,初始值为20。
意义:
S>0S的值表示可继续进入售票厅的人数
S=0 表示售票厅中已有20名顾客(购票者)
S<0|S|的值为等待进入售票厅的人数
(2)上框为P(S)
下框为V(S)
(3)S的最大值为20
S的最小值为20-n
7、假设公共汽车上,司机和售票员的活动分别是:
司机:
启动车辆、正常行车、到站停车
售票员:
关车门、售票、开车门
在汽车不断的到站、停站、行驶过程中,这两个活动有什么同步关系?
用信号量P和V操作实现他们的同步。
解:
在汽车的行驶过程中,司机活动与售票员活动的同步关系为:
售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。
同步要求:
先关门,后开车;先停车,后开门
因此司机启动车辆的动作必须与售票员关车门的动作取得同步;
售票员开车门的动作必须与司机停车动作取得同步。
driver();
{
while(true)
{
P(S1);
启动车辆;
正常驾驶;
到站停车;
V(S2);
}
}
busman();
{
while(true)
关门;
V(S1);
售票;
P(S2);
开门;
上下乘客;
}
}
本题中设置两个信号量,S1、S2,其中S1表示是否允许司机启动汽车,初值为0,S2表示是否允许售票员开门,初值为0。
这两个活动的同步用P、V原语描述如下:
semaphores1=0;
semaphores2=0;
main()
{
cobegin
driver();
busman();
coend
}
经典IPC问题变形
1、用P、V操作实现下述问题的解。
桌子上有一个盘子,可以存放一个水果。
父亲总是放苹果到盘子中,母亲是放香蕉在盘子中;一个儿子专门等吃盘中的香蕉,一个女儿专门等吃盘中的苹果。
(生产者-消费者变形)
2、哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,每人进餐时都需要使用刀、叉各一把,餐桌上的布置如下。
请用信号量及P、V操作说明这四位哲学家的同步、互斥过程。
(哲学家进餐变形)
1、父亲、母亲、儿子、女儿四人共用1个盘子,盘中一次只能放一个水果。
当盘为空时,父亲及母亲均可试着将一个水果放入盘中,但一次只能有一个人成功放入。
若盘中是香蕉,则允许儿子吃,女儿必须等待;若盘中是苹果,则允许女儿吃,儿子必须等待。
设置3个信号量,dish表示盘子是否为空,初值为1,apple表示盘中是否有苹果,初值为0,banana表示盘中是否为香蕉,初值为0,进程同步描述如下:
semaphoredish=1;
semaphoreapple=0;
semaphorebanana=0;
main()
{
cobegin
father();
mother();
son();
daughter();
coend
daughter()
{
while
(1)
{
P(apple);
从盘中取出苹果;
V(dish);
吃苹果
}
}
son()
{
while
(1)
{
P(banana);
从盘中取出香蕉;
V(dish);
吃香蕉;
}
}
}
father()
{
while
(1)
{
P(dish);
将苹果放人盘中;
V(apple);
}
}
mother()
{
while
(1)
{
P(dish);
将香蕉放人盘中;
V(banana);
}
}
2、四位哲学家讨论问题期间的生活方式为交替的进行讨论和进餐。
由于刀和叉的资源均为2,而哲学家有四位,肯定会出现资源竞争,为此应对他们的进餐进行同步控制。
假设解决方案为:
所有哲学家先申请使用刀,申请到刀的再申请使用叉,刀和叉都拿到后才能进餐。
设置4个信号量fork1、fork2、knife1、knife2,初值均为1,分别表示叉1、叉2、刀1、刀2是否可用。
semaphorefork1=1;
semaphorefork2=1;
semaphoreknife1=1;
semaphoreknife2=1;
main()
{
cobegin
pa();//用进程pa、pb、pc、pd分别代表哲学家甲、乙、丙、丁的活动
pb();
pc();
pd();
coend
}
pd()
{
while
(1)
{
p(knife1);
p(fork2);
进餐;
v(knife1);
v(fork2);
讨论问题;
}
}
pc()
{
while
(1)
{
p(knife2);
p(fork2);
进餐;
v(knife2);
v(fork2);
讨论问题;
}
}
pb()
{
while
(1)
{
p(knife2);
p(fork1);
进餐;
v(knife2);
v(fork1);
讨论问题;
}
}
pa()
{
while
(1)
{
p(knife1);
p(fork1);
进餐;
v(knife1);
v(fork1);
讨论问题;
}
}