操作系统同步机制题库

网络课课后题

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);
	......
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页