1、多个进程并发执行时,各个进程应互斥进入其临界区,所谓临界区是指
A、一段程序
B、一段数据区
C、一个缓冲区
D、一种同步机制
解析:
2、下列哪一种场景问题只包含进程互斥问题?
A、田径场的四百米接力比赛
B、一个进程读文件,一个进程写文件
C、两个进程通过一个缓冲区传递数据
D、公共汽车上司机和售票员的工作配合
3、以下是解决进程互斥进入临界区的一种解法。
P:
… …
pturn = true;
while (qturn) ;
临界区操作
pturn = false;
… …
Q:
… …
qturn = true;
while (pturn) ;
临界区操作
qturn = false;
… …
其中,pturn、qturn的初值为false
如果P、Q两个进程同时想进入临界区,那么会发生下面哪一种情形?
A、P和Q都进入了临界区
B、P先进入临界区,Q再进入临界区
C、Q先进入临界区,P再进入临界区
D、P和Q都进入不了临界区
4、若干进程之间相互合作,共同完成一项任务。进程的这种关系称为
A、并发
B、同步
C、互斥
D、异步
5、下列描述的四个现象中,哪一项既具有同步关系又具有互斥关系?
A、多个不同的用户进程一起玩踢足球电子游戏
B、多个不同的用户订票进程访问票额数据库
C、多个不同的用户进程一起玩麻将电子游戏
D、多个不同的用户进程编译自己的程序
6、在使用信号量及P、V操作机制解决问题时,进程执行一次P操作,意味着该进程
A、正在使用一个资源
B、准备释放一个资源
C、申请分配一个资源
D、需要共享一个资源
7、在使用信号量及P、V操作机制解决问题时,一个进程执行V操作意味着
A、可能有另一个进程从等待队列进入就绪队列
B、该进程从等待队列进入就绪队列
C、该进程从磁盘调入内存
D、可能有另一个进程从磁盘被调入内存
8、假设信号量S的当前值为 -3,这就表示
A、系统中还有3个资源可以使用
B、系统中有3个等待该信号量的进程
C、在信号量S上不能再执行P操作了
D、在信号量S上只能执行V操作
9、用信号量及PV操作管理临界区时,若信号量mutex的初值为1,当mutex的等待队列中有k(k > 1)个进程时,信号量的值为A、-k
B、k
C、k-1
D、1-k
10、第一类读者写者问题的解决方案会导致写者进程产生“饥饿”现象。(T)
11、用“测试并加锁”(TSL)指令解决进程互斥进入临界区的解决方案不适用于多处理器。(F)
解析:“测试并加锁”(TSL):给总线上锁
12、自旋锁采用了忙等待方式,它适用于多处理器。(T)
解析:
13、若系统采用基于优先级的抢占式调度策略,临界区的使用可能导致优先级反转问题。(T)
14、下列关于管程的描述中,哪一个是不正确的?
A、管程中需要提供互斥量以保证管程的互斥性(管程的互斥性由编译器负责)
B、管程有自己的名字
C、管程的主要作用是管理共享资源(数据结构)
D、进程只能调用管程提供的过程对管程中的数据结构进行处理
解析:
15、下列哪一个操作不会唤醒或通知等在条件变量上的进程?
A、broadcast()
B、notify()
C、signal()
D、wait()
16、应用消息缓冲机制完成进程间通信的过程中,下列哪一项不是所必需的?
A、同步互斥信号量
B、消息缓冲区
C、send/receive原语
D、消息队列(指针)
解析:
17、采用共享内存进行进程间通信的方法需要程序员解决的问题是
A、设计共享内存空间的访问原语
B、处理进程在使用共享内存过程中的互斥关系
C、分配共享内存空间的大小
D、保证共享内存空间不被破坏
18、MESA管程应用时需要至少2次对条件的检测。(假设线程都有一个进入队列、等待notify的过程,不存在直接通过的情况。)(T)
19、若管程中同时出现2个进程,需要采取措施使其中一个进程等待。HOARE管程的解决办法是让先进入管程的进程等待。(F)
解析:先进入的先执行
1
解析:
2
解析:
3
解析:
信号量分为互斥量和资源量
互斥量=1,表示临界区只允许一个进程进入
互斥量=0,表示临界区已经有一个进程进入
互斥量<0,表示临界区有一个进程,互斥量的绝对值表示在临界区外等待进入的进程数
资源信号量初值可以是任意整数,表示可用的资源数
资源量<0,表示所有资源已经全部用完,而且还有进程正在等待使用资源,等待的进程数就是资源量的绝对值
4(2010计算机联考真题)
解析:
5
6
7
8
解析:
9
10
解析:
11
解析:
12
解析:
13
解析:
管程monitor
14
15
解析:
16
解析:
17
解析:程序段最多允许两个进程进入,则表示资源的数目为2,因此,信号量初值为2,每进入一个进程,信号量的值减1,当信号量的值减为0时,表示两个个进程均进入程序段,此时若再有一个进程请求进入执行P操作,则信号量的值减为-1,进程阻塞。
18
解析:1 1-1=0
19
解析:1 1-1=0 0-1=-1
20
解析:
21
解析:
22
23
解析:
24(2016年计算机联考真题)
25
26
27
28
29
解析:S - 28 + 18 = 0 S = 10
S - 15 + 2 = 10 - 15 + 2 = -3,表示有3个进程在队列中等待。
30
31(2010年计算机联考真题)
解析:
进程互斥的软件解决方案——Peterson算法(皮特森算法)
#define FALSE 0 #define TRUE 1 #define N 2 //进程的个数 int turn; //轮到谁 int interested[N]; //兴趣数组,初始值均为FALSE void enter_region(int process){//proecss = 0或1 int other; //另一个进程的进程号 other = 1 - process; interested[process] = TRUE; //表明本进程感兴趣 turn = process; // 将当前进程号赋值给turn,该进程在运行 //当有另一个进程想要运行时,覆盖原来的turn值,将其进程号赋值给turn //导致下面条件中turn == process不成立 while(turn == process && interested[other]==TRUE); }
32(2016年计算机联考真题)
33(2011年计算机联考真题)
解析:
34(2016年计算机联考真题)
解析:
进程互斥的硬件解决方案——测试并加锁
35
解析:
36
37
解析:
0
解析:
1.(2009年计算机联考真题)
解析:
进程同步:多个进程中发生的事件存在某种时序关系,需要相互合作。生产者/消费者问题,读者/写者问题
P1:生成正整数
P2:取出奇数(odd number)
P3:取出偶数(even number)
互斥资源:缓冲区只能互斥访问,因此设置互斥信号量mutex,初始值为1
同步问题:
P1,P2设置同步信号量add;
P1,P3设置同步信号量even;
P1,P2,P3因为共享缓冲区,设置同步信号量empty,初值为N
semaphore mutex = 1; //缓冲区操作互斥信号量 semaphore odd = 0,even = 0; //奇数,偶数进程的同步信号量 semaphore empty = N; Process P1(){ while(True){ x = produce(); //生成一个数 P(empty); //看缓冲区是否有空闲单元 P(mutex); //有就提出占用 Put(); //把数送入缓冲区空单元 if(x%2==0) V(even); //如果是偶数,向P3发出信号 else V(odd); //如果是奇数,向P2发出信号 } } Process P2(){ while(True){ P(odd); //收到P1发来的信号,然后去取奇数 P(mutex); //占用一下缓冲区 getodd(); V(mutex); //释放缓冲区 V(empty); //向P1发出信号,多出了一个空单元 countodd(); } } Process P3(){ while(True){ P(even); P(mutex); geteven(); V(mutex); V(empty); counteven(); } }
2.(2013年计算机联考真题)
解析:
互斥资源:出入口,设置互斥信号量mutex,初始值为1
博物馆最多可同时容纳500人,设置信号量empty,初始值为500
Semaphore empty = 500; //博物馆可以容纳的最多人数
Semaphore mutex = 1; //用于出入口资源的控制
cobegin
参观者进程i:
{
...
P(empty); //申请进入博物馆,看看满人了没
P(mutex); //申请使用门进入博物馆
进门;
V(mutex); //释放门
参观;
P(mutex); //申请使用门出博物馆
出门;
V(mutex); //释放门
V(empty); //博物馆可容纳人数增1
}
3(2011年计算机联考真题)
解析:
互斥资源:取号机,设置互斥量mutex=1
同步问题(时序关系):
顾客需要获得空座位,取号,等待叫号,当营业员空闲时,选取一位客户并为其服务
空座位的有无影响等待顾客的数量,设置同步信号量empty=10
顾客的有无(是否有被占的座位)决定营业员是否能开始服务,设置同步信号量full=0
顾客等待叫号和被服务,设置同步信号量service
cobegin
{
process 顾客i{
P(empty); //申请座位
P(mutex); //申请使用取号机
从取号机获取一个号码;
V(mutex); //取号完毕
V(full); //通知营业员有新顾客
P(service); //申请营业员的服务
接收服务}
process 营业员
{
while(TRUE)
{
P(full); //申请一个顾客,没有则休息V(service); //叫号;
V(empty); //顾客离开座位为客户服务;
}
}
}coend
4(2014年计算机联考真题)
解析:
互斥资源:
用于消费者进程一个周期10次内对缓冲区的控制,mutex1 = 1;
用户消费者进程单次互斥访问缓冲区,mutex2 = 1;
同步资源:
缓冲区空位数,empty = 1000
缓冲区产品数,full = 0
semaphore mutex1 = 1; semaphore mutex2 = 1; semaphore empty = 1000; semaphore full = 0; producer(){ while(1){ 生产一个产品; P(empty); //看缓冲区有无空位,有就申请一个 P(mutex2); //互斥访问缓冲区 把产品放入缓冲区; V(mutex2); //释放缓冲区 V(full); //产品的数目+1 } } consumer(){ while(1){ P(mutex1) //占用缓冲区,连续取10次 for(int i = 0; i < 10; i++){ P(full); //看缓冲区有无产品,有就取 P(mutex2); //每次互斥占用缓冲区 从缓冲区取出一件产品 V(mutex2); //取完就释放缓冲区 V(empty); //缓冲区空位+1 消费这件产品; } V(mutex1) } }
5(2015年计算机联考真题)
解析:
mutex_A = 1 mutex_B = 1 empty_A = M-x empty_B = N-y full_A = x full_B = y A{ while(TRUE){ P(full_A); V(mutex_A); 从A的信箱中取出一个邮件 V(mutex_A); V(empty_A); 回答问题并提出一个新问题 P(empty_B); P(mutex_B); 将邮件放入B的信箱 V(mutex_B); V(full_B); } } B{ while(TRUE){ P(full_B); V(mutex_B); 从B的信箱中取出一个邮件 V(mutex_B); V(empty_B); 回答问题并提出一个新问题 P(empty_A); P(mutex_A); 将邮件放入A的信箱 V(mutex_A); V(full_A); } }
6(2017年计算机联考真题)
解析:
找出线程对各个变量上的互斥,并发关系。
一读一写或两个都是写,则为互斥关系。
每一个互斥关系都需要一个信号量进行调节。
semaphore mutex_y13 = 1; //用于thread1与thread2对变量y的互斥访问
semaphore mutex_y23 = 1; //用于thread2与thread3对变量y的互斥访问
semaphore mutex_z = 1; //用于对变量z的互斥访问
//复数的结构类型定义 typedef struct{ float a; float b; }cnum; cnum x,y,z;//全局变量 //计算两个复数之和 cnum add(cnum p, cnum q) { cnum s; s.a = p.a + q.a; s.b = p.b + q.b; return s; } thread1 { cnum w; P(mutex_y13); w = add(x,y); V(mutex_y13); ...... } thread2 { cnum w; P(mutex_y23); P(mutex_z); w = add(y,z); V(mutex_y23); V(mutex_z); ...... } thread3 { cnum w; w.a = 1; w.b = 1; P(mutex_z); z = add(z,w); V(mutex_z); P(mutex_y13); P(mutex_y23); y = add(y,w); V(mutex_y13); V(mutex_y23); ...... }