今年的选择最合适的答案.docx
- 文档编号:2526663
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:17
- 大小:20.68KB
今年的选择最合适的答案.docx
《今年的选择最合适的答案.docx》由会员分享,可在线阅读,更多相关《今年的选择最合适的答案.docx(17页珍藏版)》请在冰点文库上搜索。
今年的选择最合适的答案
选择最合适的答案
1.用P、V操作管理临界区时,信号量的初值一般应定义为()。
A.–1B.0C.1D.任意值
2.有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则信号量的变化范围是()。
A.1至–(m-1)B.1至m-1C.1至–mD.1至m
3.在下面的叙述中,正确的是()。
A.临界资源是非共享资源B.临界资源是任意共享资源
C.临界资源是互斥共享资源D.临界资源是同时共享资源
4.对进程间互斥地使用临界资源,进程可以()
A.互斥地进入临界区B.互斥地进入各自的临界区
C.互斥地进入同一临界区D.互斥地进入各自的同类资源的临界区
5.设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示()。
A.一个进程进入了临界区,另一个进程等待
B.没有一个进程进入临界区
C.两个进程都进入了临界区
D.两个进程都在等待
6.设两个进程共用一个临界资源的互斥信号量mutex,当mutex=-1时表示()。
A.一个进程进入了临界区,另一个进程等待
B.没有一个进程进入临界区
C.两个进程都进入了临界区
D.两个进程都在等待
7.当一进程因在记录型信号量S上执行P(S)操作而被阻塞后,S的值为()。
A.>0B.<0C.≥0D.≤0
8.当一进程因在记录型信号量S上执行V(S)操作而导致唤醒另一进程后,S的值为()。
A.>0B.<0C.≥0D.≤0
9.如果信号量的当前值为-4,则表示系统中在该信号量上有()个进程等待。
A.4B.3C.5D.0
10.若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是()。
A.3,2,1,0B.3,2,1,0,-1
C.4,3,2,1,0D.2,1,0,-1,-2
11.若信号S的初值为2,当前值为-1,则表示有()个等待进程?
A.0B.1C.2D.3
12.如果有三个进程共享同一互斥段,而且每次最多允许两个进程进入该互斥段,则信号量的初值应设置为()。
A.3B.1C.2D.0
13.并发进程之间()
A.彼此无关B.必须同步
C.必须互斥D.可能需要同步或互斥
14.在操作系统中,有一组进程,进程之间具有直接相互制约性。
这组并发进程之间()。
A.必定无关B.必定相关
C.可能相关D.相关程度相同
15.()操作不是P操作可完成的。
A.为进程分配处理机B.使信号量的值变小
C.可用于进程的同步D.使进程进入阻塞状态
选择所有正确的答案
1.有关进程的描述中,()是正确的。
A.进程执行的相对速度不能由进程自己来控制
B.利用信号量的P.V操作可以交换大量信息
C.同步是指并发进程之间存在的一种制约关系
D.并发进程在访问共享资源时,不可能出现与时间有关的错误
2.下列资源中,()是临界资源。
A.打印机B.非共享的资源
C.共享变量D.共享缓冲区
3.进程从执行状态转换到阻塞状态的可能原因是().
A.时间片完B.需要等待其它进程的执行结果
C.执行了V操作D.执行了P操作
4.进程从阻塞状态转换到就绪状态的可能原因是().
A.时间片完B.其它进程执行了唤醒原语
C.执行了V操作D.执行了P操作
5.在单处理机系统中,设系统中有n个进程(n>2),且当前处理机没有执行进程调度程序,下述情况哪些可能发生()。
A.没有运行的进程,有2个进程处于就绪状态,n个进程处于等待状态。
B.一个进程处于运行状态,n-1个进程处于等待状态。
C.一个进程处于运行状态,1个进程处于就绪状态,n-2个进程处于等待状态。
D.一个进程处于运行状态,n-1个进程处于就绪状态,没有进程处于等待状态
判断正误
1.一个临界资源可以对应多个临界区。
2.互斥地使用临界资源是通过互斥地进入临界区实现的。
错误
表达不确切,应该是互斥的进入同类临界区。
3.同步信号量的初值一般为1。
错误
互斥信号量的初值一般为1;而同步信号量的初值应视具体情况而定。
4.生产者-消费者问题是一个既有同步又有互斥的问题。
5进程A、B共享变量x,需要互斥执行;进程B、C共享变量y,B、C也需要互斥执行,因此,进程A、C必须互斥执行。
错误
不具有传递性。
6单道程序系统中程序的执行也需要同步和互斥。
.错误
单道程序系统不具有并发性,因此不需要同步和互斥。
多个进程对信号量S进行了5次P操作,2次V操作后,现在信号量的值是-3,与信号量S相关的处于阻塞状态的进程有几个?
信号量的初值是多少?
解
(1)因为S的当前值是-3,因此因为S处于阻塞状态的进程有3个;
因为每进行一次P(S)操作,S的值都减1,每执行1次V操作S的值加1,故信号量的初值为-3+5-2=0;
生产者—消费者问题演变。
情况1一个buffer,一个生产者,一个消费者,生产者只生产一个东西,消费者只进行一次消费,即:
生产者只进行一次putdata操作,消费者只进行一次getdata操作。
解这是一个同步问题,生产者和消费者分别是2个并发的进程。
(1)操作规则
如果buffer为空,则消费者只能等待。
(2)操作流程
<生产者>
{
putdata;
设置Buffer有数据标志V(S)
}
<消费者>
{
判断buffer是否有产品,没有则等待;
getdata;
}
(3)信号量
设置1个信号量full,full表示buffer是否有数据,初值为0。
(4)P、V操作实现
varfull:
semaphore:
=0;
buffer:
array[1]ofitem;
begin
parbegin
producer:
begin
putdata;
V(full);
end
consumer:
begin
P(full);
getdata;
end
parend
end
情况2一个buffer,一个生产者,一个消费者,生产者不断地进行putdata操作,消费者不断地进行getdata操作,即:
生产者不断地生产,消费者不断地消费
(1)操作规则
只有buffer为空时才能进行putdata操作;只有buffer有数据时才能进行putdata操作。
(2)操作流程
<生产者>
{
repeat
判断buffer是否为空,不空则等待;
putdata;
设置buffer有数据的标志;
untilfalse
}
<消费者>
{
repeat
判断buffer是否有数据,没有数据则等待;
getdata;
设置buffer为空标志;
untilfalse
}
(3)信号量
设置2个信号量full和empty。
full表示buffer是否有数据。
因为进程在初始状态时,buffer中没有数据,故初值为0,变化范围-1~1。
empty表示buffer是否为空。
因为进程在初始状态时,buffer为空,故初值为0初值为1,变化范围-1~1。
(4)P、V操作实现
varfull:
semaphore:
=0;
emptyl:
semaphore:
=1;
buffer:
array[1]ofitem;
begin
parbegin
producer:
begin
repeat
P(empty);
putdata;
V(full);
untilfalse
end
consumer:
begin
repeatP(full);
getdata;
V(empty);
untilfalse.
end
parend
end
情况3一个buffer,多个生产者,多个消费者,多个生产者和消费者都在不断地存取buffer,即生产者不断地进行putdata操作,消费者不断地进行getdata操作。
(1)操作规则
只有buffer为空时才能进行putdata操作;只有buffer有数据时才能进行putdata操作。
这时buffer变成了临界资源,不允许多个进程同时操作buffer,即不允许多个消费者同时进行gedata,不允许多个生产者同时进行putdata操作。
(2)操作流程
<生产者>
{
repeat
判断buffer是否为空,不则等待;
是否可操作buffer;
putdata;
设置buffer可操作标志;
设置buffer有数据的标志;
untilfalse
}
<消费者>
{
repeat
判断buffer是否有数据,没有则等待;
是否可操作buffer;
getdata;
设置buffer可操作标志;
设置buffer为空标志;
untilfalse
}
(3)信号量
设置3个信号量full、empty和B-M。
full表示buffer是否有数据,初值为0;
empty表示buffer是否为空,初值为1;
B-M表示buffer是否可操作,初值为1。
由于buffer只有一个,full和empty可以保证对buffer的正确操作,故B-M是多余的,可以省略。
(4)P、V操作实现
<生产者><消费者>
{{
repeatrepeat
P(empty);P(full);
P(B-M); P(B-M);
putdata;getdata;
V(B-M); V(B-M);
V(full);V(empty);
untilfalse.untilfalse
}}
情况4多个生产者,多个消费者,N个buffer,多次循环存取buffer,即,即多个生产者不断地进行putdata操作,多个消费者不断地进行getdata操作。
(1)操作规则
只有buffer有空间才能进行putdata操作;
只有buffer有数据才能进行putdata操作;
这时buffer变成了临界资源,不允许多个消费者和生产者同时对同一个buffer进行gedata和putdata操作。
(2)操作流程
<生产者>
{
repeat
判断buffer是否有空间,没有则等待;
是否可操作buffer;
putdata;
设置buffer可操作标志;
设置buffer有数据的标志;
untilfalse
}
<消费者>
{
repeat
判断buffer是否有数据,没有则等待;
是否可操作buffer;
getdata;
设置buffer可操作标志;
设置buffer有空间标志;
untilfalse
}
(3)信号量
full表示buffer是否有数据,初值为0;
empty表示buffer是否为空,初值为N;
B-M表示buffer是否可操作,初值为1。
(4)P、V操作实现
<生产者><消费者>
{{
repeatrepeat
P(empty);P(full);
P(B-M); P(B-M);
putdata;getdata;
V(B-M); V(B-M);
V(full);V(empty);
untilfalseuntilfalse
}}
(5)改进的P、V操作实现
在上述的实现中,putdata和getdata操作都在临界区中,因此多个进程对多个buffer的操作是不能并发进行的,进程间并行操作的程度很低。
实际上只要保证多个进程同时操作不同buffer就可以实现对整个buffer的并行操作。
因此,只要保证为不同的进程分配不同buffer,putdata和getdata操作是可以同时进行。
这样互斥不是发生在对buffer的存取操作上,而是发生在对buffer的分配上,这个时间与存取buffer的时间相比是较短的,因此减少了进程处于临界区的时间。
这里引入2个函数:
getE_buffer(),返回值是空的buffer号;
getD_buffer(),返回值是有数据的buffer号。
getE_buffer()和getD_buffer()通过将buffer转换成循环队列的方法来实现对buffer的分配。
buffer设有Pbuff,Pdata两个指针,分别指向空闲buffer和有数据buffer 的头,每进行一次getE_buffer()和getD_buffer(),Pbuff和Pdata两个指针分别向后移动一个位置。
GetE_buffer()
{c=Pbuff
Pbuff=(Pbuff+1)MODN;
Return(c)
}
getD_data()
{c=Pdata;
Pdata=(pdata+1)MODN;
Return(c)
}
改进的程序描述如下:
varmutex.empty,full:
semaphore:
=1,n,0;
buffer:
array[0,…,n-1]ofitem;
Pbuff,Pdata:
integer:
=0,0;
begin
parbegin
producer:
begin
repeat
┇P(empty);
P(B_M);
in:
=getE_buffer();
V(B_M)
putdata(in);V(full);
untilfalse;
end
consumer:
begin
repeat
P(full);
P(B_M);out:
=getD_buffer();
V(B_M);
Getdata(out);
V(empty);
untilfalse
end
parend
end
使用多个进程计算Y=F1(X)+F2(X).
解
(1)确定并发和顺序操作
在这个问题中,F1(X)和F2(X)的计算是可以并行处理的,因此F1(X)和F2(X)可以分别出现在两个进程中。
(2)确定互斥或同步的规则
在F1(X)+F2(X)中,必须在F1(X)和F2(X)计算完毕,才能进行加法运算,因此本问题是同步问题。
(3)同步的操作流程
〈进程main〉
创立进程p1来计算F1(X);
创立进程p2来计算F2(X);
F1(X)计算是否完成?
没有,等待;
F2(X)计算是否完成?
没有,等待;②
进行加法运算。
〈进程p1〉
y1=F1(X);
设置F1(X)计算完成标志;③
〈进程p2〉
y1=F2(X);
设置F2(X)计算完成标志。
④
(4)确定信号量的个数和含义
根据同步规则以及操作流程确定信号量的个数是2个,S1和S2:
S1含义是F1(X)计算是否完成;
S2含义是F2(X)计算是否完成。
(5)确定信号量的初值
S1=0;
S2=0。
(6)确定P、V操作的位置
上面①处是一个P操作,P(S1);
上面②处是一个P操作,P(S2);
上面③处是一个V操作,V(S1);
上面④处是一个V操作,V(S2)。
解法1
Main()
Publicy,y1,y2,.P1,P2
SemaphoreS1,S2
{
S1=0;
S2=0;
P1=Creat(N-F1,F1,x,……);
P2=Creat(N-F2,F2,x,……);
P(S1);
P(S2);
y=y1+y2;
}
ProcedureF1(x)
{
y1=计算1;
V(S1);
}
ProcedureF2(x)
{
y2=计算2;
V(S2)
}
解法2
Main()
Publicy,y1,y2,.P1,x
SemaphoreS1
{input(x);
S1=0;
P1=Creat(N-F1,F1,x,……);
Y2=F2(x);
P(S1);
y=y1+y2;
}
ProcedureF1(x)
{
y1=计算1;
V(S1)
}
采用2个进程和1个信号量来实现Y=F1(X)+F2(X)的时候,采用的方法是父进程创立子进程,F1(X)在子进程中计算,F2(X)在父进程中计算,因此F1(X)和F2(X)计算仍然是并发进行的。
S1信号量的含义为F1(X)是否完成。
改进的方法比原来的方法节约一个进程和一个信号量,但并发操作的程度并没有降低。
本资料来自互联网共享文档
好资料来自互联网,一起创造,共同分享。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 今年 选择 合适 答案