1、全国自考操作系统(进程通信)模拟试卷 2 及答案与解析一、单项选择题1 一段不能由多个进程同时执行的代码称为_。(A)临界区(B)临界资源(C)锁操作(D)信号量操作2 进程间的互斥与同步表示了各进程间的_。(A)竞争与协作(B)相互独立与相互制约(C)临界区调度原则(D)动态性与并发性3 类似于电子邮件系统的进程问的通信方法是_通信。(A)管道(B)共享存储 N(C)信号量(D)消息4 在 UNIX 卢,创建一个共享内存段的系统调用是_。(A)seumget(B) creatsem(C) msgget(D)shmget5 在 UNIX 类操作系统中,_可用于通知进程发生了异常的事件。(A)信
2、号机构(B)管道机构(C)消息机构(D)信号量6 系统出现死锁的根本原因是_。(A)系统资源太少(B)系统中进程太多(C)资源的独占性(D)资源管理和进程推进顺序都不得当7 防止死锁采取的措施是_。(A)配置足够的系统资源(B)使进程的推进顺序合理(C)破坏产生死锁的 4 个必要条件之一(D)避免系统进入不安全状态8 在下列死锁解决方案中,属于死锁预防的是_。(A)银行家算法(B)资源有序分配法(C)状态图或状态表(D)撤销死锁进程二、填空题9 进程访问临界资源的那段代码称为_。10 每执行一次 semWait 操作,信号量的数值 S 减 1。若_,则该进程继续执行,否则进入_状态。11 互斥
3、信号量 S 的当前值为 -2,表示_。12 操作系统中的一种同步与互斥机制,由共享资源的数据及其在该数据上的一组操作组成,该机制称为_。13 产生死锁的四个条件是:_、_、_和_。14 如果资源分配图中无_,则系统中没有死锁发生。三、简答题15 在操作系统中,信号量 sereWait 和 semSignal 操作各自的动作是如何定义的?16 管程是什么? 管程与进程的区别是什么 ?17 在什么情况下会产生信号?18 在某系统中,5 个进程共享 6 台同类设备资源,每个进程最多需要 2 台设备资源,试问:该系统是否会发生死锁?简略说明。19 简述死锁防止与死锁避免的区别。四、综合题20 线程能有
4、效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的缓冲区。因为父进程的全局变量,在创建子进程后,两者也是分开存放的,所以即使父子进程之间也不能通过全局变量进行通信。可是,由于在同一进程中的线程共享进程的内存空间,如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时也会获得改变了的结果。因此子线程之间就能通过进程的全局变量进行通信。编一个 C 程序,使用进程的全局变量作为输入输出的缓冲区,线程 1 一次读入一个字符串,将其存入缓冲区,线程 2 从缓冲区取出数据,输出打印,用线程的互斥锁实现两个线程间韵同步。程序调试成功后用 I
5、O 转向再测试程序,标准输入输出都改为文件。21 编三个伪程序,用 semWait 和 semSignal 操作,以实现公共汽车上司机、售票员和乘客之间的同步。只有车停了后,售票员才能开门,只有售票员开了门后,乘客才能上、下车;只有乘客上好车后,售票员才能关门;只有售票员关好门后,司机才能开车。说明各个信号量的初值及意义。假设初态时车已停稳,售票员没开门。五、判断题22 进程之间的同步,主要由于进程之间的资源竞争的需要。( )(A)正确(B)错误23 临界段是指进程中用于实现进程互斥的那段代码。( )(A)正确(B)错误24 用开、关中断方法实现的锁操作只能用于单 CPU 系统。( )(A)正
6、确(B)错误25 如有三个并发进程涉及一个临界区,则信号量 S 的所有可能取值为 1,0,-1。( )(A)正确(B)错误26 可以利用 UNIX 的信号机构实现进程间的同步与互斥。 ( )(A)正确(B)错误27 进程在睡眠时能收到信号。( )(A)正确(B)错误28 死锁就是若干个进程循环等待进程一资源闭合链中下一个进程所占用资源。( )(A)正确(B)错误全国自考操作系统(进程通信)模拟试卷 2 答案与解析一、单项选择题1 【正确答案】 A【知识模块】 进程通信2 【正确答案】 A【知识模块】 进程通信3 【正确答案】 D【知识模块】 进程通信4 【正确答案】 D【知识模块】 进程通信5
7、 【正确答案】 A【知识模块】 进程通信6 【正确答案】 D【知识模块】 进程通信7 【正确答案】 C【知识模块】 进程通信8 【正确答案】 B【知识模块】 进程通信二、填空题9 【正确答案】 临界区(互斥段)【知识模块】 进程通信10 【正确答案】 S 的值0 、阻塞【知识模块】 进程通信11 【正确答案】 有 2 个要访问相关临界资源的进程进入了阻塞状态,或有 2 个等待进入临界区的进程。【知识模块】 进程通信12 【正确答案】 管程【知识模块】 进程通信13 【正确答案】 互斥执行、保持并等待、不可剥夺、循环等待【知识模块】 进程通信14 【正确答案】 环路【知识模块】 进程通信三、简答
8、题15 【正确答案】 信号量的结构定义如下:typedef struct semaphoreint value;*信号量值*Queue queue;*信号量的等待队列*Semaphore;Semaphore s;信号量操作的 semWait 和 semSignal 操作定义如下。对信号量操作应当是原子操作,故要用关、开中断或其他的安全机制将 semWait 和 semSignal 操作保护起来,以使它能完整地执行。Void semWait(s)semaphore s;if(-svalue0)将进程置入等待队列 queue 中;封锁进程;转进程调度程序;Void semSignal(s)Sema
9、phore s;if(+svalue=0)从等待队列 queue 中移出一进程;将该进程置入就绪队列中;。【知识模块】 进程通信16 【正确答案】 管程(monitor)就是为了解决信号量机制而提出的一种新的进程间同步互斥机制。管程引入了面向对象的思想。管程是把共享资源的数据结构及一组对该资源的操作和其他相关操作封装在一起所构成的软件模块。进程只能用管程定义的接口进入管程,访问共享资源。在管程的实现中,为了保护管程共享数据结构的数据完整性,需要保证进程互斥地进入,故在管程中定义了阻塞及唤醒操作,设置了进程等待队列。管程与进程的区别是:进程是活动主体,是动态的,进程能创建和撤销。在操作系统中设置
10、进程的目的是记录和管理程序的动态执行过程。管程与操作系统中的共享资源相关,是被动的、静态的,没有创建和撤销。设置管程是为了协调进程的同步与互斥和对共享资源的访问,管程可被进程调用。【知识模块】 进程通信17 【正确答案】 在 UNIX 中,以下几种情况下向进程发送软中断信号:(1)在用户态运行时产生了各种软、硬件故障;(2)用户通过键盘按键向与该终端有关的进程发送信号;(3)进程之间通过系统调用 kill 传送信号;(4)进程写管道时发生异常;(5)父进程对子进程进行跟踪时。【知识模块】 进程通信18 【正确答案】 不会发生死锁。资源申请最坏的情况是每个进程都已得到了 1 个资源,现均要再申请
11、一个资源,现系统还有一个剩余资源可分配给某个进程,待它结束资源的使用或运行结束后就可归还资源再供其他进程使用,因此该系统不会发生死锁。【知识模块】 进程通信19 【正确答案】 死锁的防止是系统预先确定一些资源分配策略,进程按规定申请资源,系统按预先规定的策略进行分配,从而防止死锁的发生。死锁的避免是当进程提出资源申请时系统测试资源分配,仅当能确保系统安全时才把资源分配给进程,使系统一直处于安全状态之中,从而避免死锁。【知识模块】 进程通信四、综合题20 【正确答案】 实现该功能的 C 程序为程序清单 15-2。在程序清单 15-2 的 pthread_commc 中,主线程创建两个线程,线程
12、1 一次读入一个字符串,将其存入缓冲区,线程 2 从缓冲区取出数据,输出打印。主线程先创建两个子线程,再初始化锁变量,使缓冲区初态为空,通过 pthread_join 等待子线程终止。当一个线程 1 将字符串存入缓冲区后,缓冲区状态为已存入,线程 2 将缓冲区中的字符串取出并打印,缓冲区状态为空,两个线程用互斥锁pthread_rnutex_lock 和缓冲区状态标志 flag 实现互斥和同步,如此循环执行。注意,当一个线程用 pthread_mutex_lock 上锁,进入临界区后,当发现根据 buf 的 flag 标志不能进行存入或取出数据时,就要执行 pthread_mutex_unlo
13、ck 操作,以让另一个进程通过 pthread_mutex_lock 操作进入临界区。当然本进程也可能如此循环地执行pthread_mutex_lock 和 pthread_mutex_unlock,这就是“ 自旋锁”。为了节省处理机时间,可以在这种情况下插入 sleep 语句,但这与线程的同步无关。程序清单 15-2:pthread_mutex c#includestdioh#includestdlib h#includepthreadh#includestringhpthread_mutex_t lock=PAHREAD_MUAEX_INIAIALIZER;*初始化锁后,锁是关闭的*str
14、uct buf_sint flag;char buffer256;buf;main()pthread_t th_1,th_2;* 两个线程*void *put_buf();*线程 1 执行的输入和存人缓冲区的函数*void *get_buf();*线程 2 执行的从缓冲区读出和打印的函数*pthread_create(th_1,NULL,put_buf,NULL) ; *创建线程 l*pthread_create(th_2,NULL,get_buf,NULL) ;*创建线程 2*bufflag=0;*设置初态为缓冲区空*pthread_join(th_1,NULL);*等待子线程 1 结束 *
15、pthread_join(th_2,NULL);*等待子线程 2 结束 *void*put buf()*线程 1 并发执行的函数*while(1)pthread_mutex_lock(&lock)j*关锁,竞争 buf*if(bufflag=0)*缓冲区空*printf(“th_1:input string: “);gets(bufbuffer) ;if(strlen(buf buffer)!=0) *读入空串,设置终止运行标志*bufflag=1;elsebufflag=2;*设置终止运行标志*elseSleep(1);pthread_mutex_unlock(&lock);*开锁*void
16、*get_buf()*线程 2 并发执行的函数*while(1)pthread_mutex_lock(&lock);*关锁,竟争 buf*fif(bufflag=1)*缓冲区中已存入信息*printf(“th_2 print:s n“,bufbuffer) ;*输出缓冲区中信息 *bufflag=0;*缓冲区空标志*elseif(bufflag=2) *终止运行标志 *exit(0);elsesleep(1);pthread mutex_unlock(&lock);*开锁*。【知识模块】 进程通信21 【正确答案】 信号量的意义及初值如下。close:售票员是否关好门,初值为 1,已关好门。s
17、top:司机是否已停好车,初值为 0,没停好车。open:售票员是否打开门,初值为 0,没开门。go-up:乘客是否已上、下好车,初值为 0,没上、下好车。司机 售票员 乘客while(1) while(1) while(1)semWait(close) semWait(stop) semWait(open)开车 开车门上、下车停车 semSignal(open) semSignal(go-up)semSignal(stop) semWait(go-up) 关车门semSignal(close)在本程序中,售票员既与司机之间通过信号量 close 和 stop 进行同步,也与乘客之间通过信号量
18、 open 和 go-up 进行同步。【知识模块】 进程通信五、判断题22 【正确答案】 B【知识模块】 进程通信23 【正确答案】 B【试题解析】 临界段是涉及互斥共享变量或互斥资源的程序段,而实现进程互斥的代码是锁操作、信号量等进程通信原语。【知识模块】 进程通信24 【正确答案】 A【知识模块】 进程通信25 【正确答案】 B【试题解析】 信号量 S 的所有可能取值为:1、0、-1、-2 ,-2 表示最多有 2 个进程可能因等待进入临界区而阻塞。【知识模块】 进程通信26 【正确答案】 B【试题解析】 信号机构与信号量是完全不同的机制,信号机构是软中断,实现进程间的同步与互斥的机制是信号量。【知识模块】 进程通信27 【正确答案】 A【知识模块】 进程通信28 【正确答案】 A【知识模块】 进程通信
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1