操作系统题目收录(七)

1、有三个进程共享同一程序段,而每次只允许两个进程进入该程序段,若用PV操作同步机制,则信号量S的取值范围是()。

  • A:2,1,0,-1
  • B:3,2,1,0
  • C:2,1,0,-1,-2
  • D:1,0,-1,-2
解析

因为每次允许两个进程进入该程序段,信号量最大值取2。至多有三个进程申请,则信号量最小为-1,所以信号量可以取2,1,0,-1。

答案:A

2、对于两个并发程序,设互斥信号量为mutex(初值为1),若mutex=0,则表示()。

  • A:没有进程进入临界区
  • B:有一个进程进入临界区
  • C:有一个进程进入临界区,另一个进程等待进入
  • D:有一个进程在等待进入
解析

mutex的初值为1,表示允许一个进程进入临界区,当有一个进程进入临界区且没有进程等待进入时,mutex减1,变为0。|mutex|为等待进入的进程数。因此选择B。

答案:B

3、 一个进程因在互斥信号量mutex上执行V(mutex)操作而导致唤醒另一个进程时,执行V操作后,mutex的值为()。

  • A:大于0
  • B:小于0
  • C:大于等于0
  • D:小于等于0
解析

由题意可知,系统原来存在等待进入临界区的进程,mutex小于等于-1,因此在执行V(mutex)操作后,mutex的值小于等于0。

答案:D

4、以下关于管程的叙述中,错误的是()。

  • A:管程是进程同步工具,解决信号量机制大量同步操作分散的问题
  • B:管程每次只允许一个进程进入管程
  • C:管程中signal操作的作用和信号量机制中的V操作相同
  • D:管程是被进程调用的,管程是语法范围,无法创建和撤销
解析

管程的signal操作与信号量机制中的V操作不同,信号量机制中的V操作一定会改变信号量的值S=S+1。而管程中的signal操作是针对某个条件变量的,若不存在因该条件而阻塞的进程,则signal不会产生任何影响。

答案:C

5、若系统有n个进程,则就绪队列中进程的个数最多有()个;阻塞队列中进程的个数最多有()个。

  • A:n+1
  • B:n
  • C:n-1
  • D:1
解析

第一个括号:系统中有n个进程,其中至少有一个进程正在执行(处理器至少有一个),因此就绪队列中的进程个数最多有n-1个。B选项容易被错选,以为出现了处理器为空、就绪队列全满的情况,实际调度无此状态。

第二个括号:C选项容易被错选,阻塞队列有n-1个进程这种情况是可能发生的,但不是最多的情况。可能不少读者会忽视死锁的情况,死锁就是n个进程都被阻塞,所以最多可以有n个进程在阻塞队列。

答案:C、B

6、在9个生产者、6个消费者共享容量为8的缓冲器的生产者-消费者问题中,互斥使用缓冲器的信号量初始值为()。

  • A:1
  • B:6
  • C:8
  • D:9
解析

所谓互斥使用某临界资源,是指在同一时间按只允许一个进程使用此资源,所以互斥信号量的初值都为1。

答案:A

7、进程 P 0 P_0 P0和进程 P 1 P_1 P1的共享变量定义及其初值为:

boolean  flag[2];
int  turn = 0;
flag[0] = false;  flag[1] = false;

若进程 P 0 P_0 P0和进程 P 1 P_1 P1访问临界资源的类C代码实现如下:

void P0()  // 进程 P0
{
	while(true)
	{
		flag[0] = true;
		turn = 1;
		while(flag[1] && (trun == 1));
		
		临界区;
		flag[0] = false;
	}
}
void P1()  //进程P1
{
	while(true)
	{
		flag[1] = true;
		trun = 0;
		while(flag[0] && (trun == 0));

		临界区;
		flag[1] = false;
	}
}

则并发执行进程 P 0 P_0 P0和进程 P 1 P_1 P1时产生的情况是()。

  • A:不能保证进程互斥进入临界区,会出现”饥饿“现象
  • B:不能保证进程互斥进入临界区,不会出现”饥饿“现象
  • C:能保证进程互斥进入临界区,会出现”饥饿“现象
  • D:能保证进程互斥进入临界区,不会出现”饥饿“现象
解析
答案:D

8、有两个并发执行的进程 P 1 P_1 P1和进程 P 2 P_2 P2,共享初值为1的变量x。 P 1 P_1 P1对x加1, P 2 P_2 P2对x减1。加1和减1操作的指令序列分别如下:

// 加1操作
load R1,x  //取x到寄存器R1
inc R1
store x,R1 //将R1的内容存入x
// 减1操作
load R2,x  // 取x到寄存器R2
dec R2
store x,R2  // 将R2的内容存入x

两个操作完成后,x的值()。

  • A:可能为-1或3
  • B:只能为1
  • C:可能为0,1或2
  • D:可能为-1,0,1或2
解析

P 1 P_1 P1中的3条语句依次编号为1,2,3,将 P 2 P_2 P2中的3条语句依次编号为4,5,6,则依次执行1,2,3,4,5,6得结果1,依次执行1,2,4,5,6,3得结果2,依次执行4,5,1,2,3,6得结果0.结果-1不可能得出。

答案:C

9、使用TSL(Test and Set Lock)指令实现进程互斥的伪代码如下所示。

do{
	...
	while(TSL(&lock));
	critical section;
	lock = FALSE;
	...
}while(TRUE);

下列与该实现机制相关的叙述中,正确的是()。

  • A:退出临界区的进程负责唤醒阻塞态进程
  • B:等待进入临界区的进程不会主动放弃CPU
  • C:上述伪代码满足”让权等待“的同步准则
  • D:while(TSL(&lock))语句应在关中断状态下执行
解析

当进程退出临界区时置lock为FALSE,会负责唤醒处于就绪态得进程,A错误。

等待进入临界区得进程会一直停留在执行while(TSL(&lock))的循环中,不会主动放弃CPU,B正确。

让权等待,即进程不能进入临界区时,应立即释放处理器,防止进程忙等待。通过B的分析发现,上述伪代码并不满足“让权等待”的同步准则,C错误。

while(TSL(&lock))在关中断状态下执行时,若TSL(&lock)一直为true,不再开中断,则系统可能会因此终止,D错误。

答案:B

10、属于同一进程的两个线程thread1和thread2并发执行,共享初值为0的全局变量x。thread1和thread2实现对全局变量x加1的机器级代码描述如下。

// thread1
mov R1,x   //(x)->R1
inc R1     //(R1)+1->R1
mov x,R1   //(R1)->x
// thread2
mov R2,x   //(x)->R2
inc R2     //(R2)+1->R2
mov x,R2  //(R2)->x

在所有可能的指令执行序列中,使x的值为2的序列个数是()。

  • A:1
  • B:2
  • C:3
  • D:4
解析

通过阅读两个线程代码可知,thread1和thread2均是对x进行加1操作,x的初始值为0,若要使得最终x=2,只能先执行完thread1再执行thread2,或先执行完thread2再执行thread1,因此仅有两种可能,选B。

答案:B
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值