今年的选择最合适的答案.docx

上传人:b****4 文档编号:11969359 上传时间:2023-04-16 格式:DOCX 页数:17 大小:20.68KB
下载 相关 举报
今年的选择最合适的答案.docx_第1页
第1页 / 共17页
今年的选择最合适的答案.docx_第2页
第2页 / 共17页
今年的选择最合适的答案.docx_第3页
第3页 / 共17页
今年的选择最合适的答案.docx_第4页
第4页 / 共17页
今年的选择最合适的答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

今年的选择最合适的答案.docx

《今年的选择最合适的答案.docx》由会员分享,可在线阅读,更多相关《今年的选择最合适的答案.docx(17页珍藏版)》请在冰豆网上搜索。

今年的选择最合适的答案.docx

今年的选择最合适的答案

选择最合适的答案

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)是否完成。

改进的方法比原来的方法节约一个进程和一个信号量,但并发操作的程度并没有降低。

本资料来自互联网共享文档

好资料来自互联网,一起创造,共同分享。

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

当前位置:首页 > 经管营销 > 经济市场

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

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