1、全国自考操作系统(进程通信)模拟试卷 3 及答案与解析一、单项选择题1 临界区是指并发进程中_。(A)用于实现进程互斥的程序段(B)用于实现进程同步的程序段(C)用于实现进程通信的程序段(D)与互斥的共享资源有关的程序段2 解决进程间同步与互斥问题的常用方法是使用_。(A)锁操作(B)存储管理(C)信号机构(D)信号量3 在进程之间要传递大量的数据,效率高而且互斥与同步控制方便的方法是采用_。(A)管道(B)共享存储(C)全局变量(D)信号量4 能支持两台计算机之间的通信机制是_。(A)Signal(B) Pipe(C) Ipc(D)Socket5 如果系统只有一个临界资源,同时有很多进程要竞
2、争该资源,那么系统_发生死锁。(A)一定会(B)一定不会(C)不一定会(D)由进程数量决定6 在多进程的并发系统中,肯定不会因竞争_而产生死锁。(A)打印机(B)磁带机(C)光刻机(D)处理机7 系统有 11 台磁带机供 5 个进程使用,如每个进程最多同时分配_台磁带机,就没有死锁的危险。(A)2(B) 3(C) 4(D)58 设有 12 个同类资源可供 4 个进程共享,资源分配情况见表 41。当进程 P1、P2、P3、P4 都相继提出申请要求,为使系统不致死锁,应满足_的要求。(A)P1(B) P2(C) P3(D)P4二、填空题9 若一个进程已进入一个临界区,其他欲进入同一临界区的进程必须
3、_。10 每执行一次 semSignal 操作,信号量的数值 S 加 1。若_,则该进程继续执行;否则,从对应的_队列中移出一个进程,该进程的状态将为_。11 某一时刻系统中共有 6 个进程,每个进程要使用 1 个相关临界资源。互斥信号量 s 的初值为 3,当前值为-2,则表示有_个进程正在访问相关临界资源,有_个访问相关临界资源的进程进入了阻塞状态,有_个进程还没有申请访问相关临界资源。12 一个进程要向另一个进程传送大量数据,如不考虑进程间的同步,效率最高的进程通信机制为_。13 对资源采用_的策略可以使循环等待资源的条件不成立。三、简答题14 什么是临界资源和临界区?一个进程进入临界区的
4、调度原则是什么?15 说明互斥和同步对信号量操作方法的差异。16 叙述面向连接的 Socket 通信基本过程实现网络通信。17 在生产者一消费者问题中,如果将两个 semWait 操作即生产者程序流程中的semWait(buffers)和 semWait(mutex)互换位置,或者是将 semSignal(mutex)与semSignaj(products)互换位置,结果会如何 ?18 在某系统中,有 N 个进程共享 6 台同类设备资源,每个进程最多需要 2 台设备资源,试问:N 最多为几时才能保证系统不会发生死锁 ?简略说明。19 在解决死锁的方法中,哪种方法最浪费资源?哪种方法最容易实现?
5、 如果死锁发生的可能性很小,用哪种方法最好?四、综合题20 用纯用户软件实现进程的互斥。对共享资源的访问要互斥进行,进程级的互斥可以通过系统提供的锁和信号量等实现,也可通过纯软件实现。用纯软件实现进程互斥地进入临界段的方法既可用于单处理机环境,也可用于多处理机环境,只要这些处理机能共享同一个存储区,且诸进程对同一主存单元的访问是串行地进行的,除此以外不需要任何硬件、操作系统或程序设计语言的特殊支持。通过纯软件来实现进程间的互斥所需共享存储区,就要通过共享内存的系统调用shmget、shmat 获得。父进程的全局变量在创建子进程后,两者也是分开存放的,故即使父子进程之间也不能通过全局变量进行通信
6、。线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的机制。可是,由于在同一进程中的线程共享内存,它们之间的通信就不需要调用核心。由于同一个进程中的所有线程共享进程的资源,它们驻留在相同的地址空间和访问相同的数据。如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时也会获得改变了的结果。故子线程之间就能通过进程的全局变量进行通信,也能用全局变量实现纯软件的安全锁。试编一个多线程并发的程序,用纯软件来实现对共享资源的访问计数,最简单的互斥共享资源就是共享计数变量。21 有两个生产者 a、b 不断向仓库存放产品,由销售者
7、c 取走仓库中的产品(仓库初态产品数为 0,仓库容量为无限大)。请写出通过 semWait、semSignal 操作实现三个进程间的同步和互斥的框图或伪程序,并写出信号量的初值和意义。五、判断题22 变量也可以是一个临界资源。( )(A)正确(B)错误23 锁可以用于控制临界段的互斥执行。( )(A)正确(B)错误24 普通用户能用文件的 creat 系统调用实现锁操作。 ( )(A)正确(B)错误25 利用信号量既能实现进程间的同步,也能实现进程间的互斥。( )(A)正确(B)错误26 中断和信号都有优先级。( )(A)正确(B)错误27 信号可以直接传送信息内容。( )(A)正确(B)错误
8、28 若进程资源分配和等待图中含有圈,则一定有进程处于死锁状态。( )(A)正确(B)错误全国自考操作系统(进程通信)模拟试卷 3 答案与解析一、单项选择题1 【正确答案】 D【知识模块】 进程通信2 【正确答案】 D【试题解析】 锁操作只能解决进程间的互斥而不能解决进程间的同步问题。【知识模块】 进程通信3 【正确答案】 A【试题解析】 信号量只能传递少量的(控制)信息;采用共享存储区的方法,一般还需要信号量来实现进程间的同步;全局变量只能用于进程内部的信息传递。【知识模块】 进程通信4 【正确答案】 D【知识模块】 进程通信5 【正确答案】 B【试题解析】 由于系统只有一个临界资源,各个进
9、程只能竞争和轮流占用该资源,不会形成循环等待的死锁条件,那么系统就一定不会发生死锁。【知识模块】 进程通信6 【正确答案】 D【知识模块】 进程通信7 【正确答案】 B【试题解析】 在最坏的情况下,每一个进程都已平均分配了 2 台磁带机,系统还剩下 1 台磁带机。这台磁带机就可以分配给某个进程使用,使该进程得到了全部的资源后,就能运行到底,从而可释放它所占用的 3 台磁带机,这样其他进程又能获得磁带机,就没有死锁的危险。【知识模块】 进程通信8 【正确答案】 D【试题解析】 目前剩余资源数为 2,只有 P4 剩余需求数最少,为 2 个资源,只要先满足 P4 的要求,使它能运行到底,并释放所分配
10、的资源,再满足其他进程的要求,系统就不致死锁。【知识模块】 进程通信二、填空题9 【正确答案】 等待(被阻塞)【知识模块】 进程通信10 【正确答案】 S0、等待、就绪【知识模块】 进程通信11 【正确答案】 3、2、1【试题解析】 互斥信号量 S 的初值为 3 表示有 3 个同类资源可以被 3 个进程同时访问,当前值为-2 表示有 2 个要访问相关临界资源的进程进入了阻塞状态,另外有 3 个进程正在访问相关临界资源,剩下的(6-5)个进程还没有申请访问相关临界资源。【知识模块】 进程通信12 【正确答案】 共享内存【知识模块】 进程通信13 【正确答案】 按序分配【知识模块】 进程通信三、简
11、答题14 【正确答案】 不能允许 2 个或 2 个以上进程同时访问的资源称为临界资源。进程执行的访问临界资源的程序段称为临界区、临界段或互斥段。能支持各进程互斥地执行临界区的调度机制必须满足下列要求。(1)在所有共享相同资源或对象的临界区中,每次只能允许一个进程进入。(2)一个进程在非临界区中的暂停运行不能影响其他进程。(3)一个进程如需要进入临界区,不能发生无限延迟的情况,即既不会死锁,也不会饥饿。(4)当无进程在临界区时,必须让任何希望进入该程序段的进程无延迟地进入。(5)一个进程只能在临界区内停留有限的时间。(6)对于相关进程的运行速度和处理机的数量不做假设。【知识模块】 进程通信15
12、【正确答案】 互斥和同步都是通过对信号量的 sereWait、semSignal 操作来实现的,但这两种控制机制对信号量的操作策略是不同的。互斥的实现是不同的进程对同一信号量进行 semWait、semSignal 操作,一个进程在成功地对信号量执行了semWait 操作后进入临界段,并在退出临界段后,由该进程本身对这信号量执行semSignal 操作,表示没有进程处于临界段,可让其他进程进入。同步的实现由一个进程 Pa 对一个信号量进行 semWait 操作后,只能由另一个进程 Pb 对同一个信号量进行 semSignal 操作,使 Pa 能继续前进,在这种情况下,进程 Pa 要同步等待Pb
13、。如进程 Pb 也要同步等待 Pa,则要设置另一个信号量。【知识模块】 进程通信16 【正确答案】 面向连接的 Socket 通信的过程如下。(1)服务器方:申请套接字端口,建立通信链路端点。建立主机地址和端口号与 socket 描述符的联系。指定接收队列区。等待客户机请求到达指定端口。接收到客户机的请求后,启动一个新进程处理来自客户机的请求。当服务完成时,终止该进程。原进程继续等待客户机的请求。(2)客户方:申请一套接字,建立通信链路端点。建立与服务机上的 ACPIP 进程监听端口的连接。向服务器发出请求消息(报文) ,等待接收应答。接收服务器来的应答。可循环多次。当不再请求时关闭通信链路并
14、终止客户进程。【知识模块】 进程通信17 【正确答案】 seinWait(buffers)和 semWait(mutex)互换位置后,因为 mutex 在这儿是生产者和消费者公用的信号量变量,生产者在执行完 semWait(mutex)后,则mutex 赋值为 0,倘若当前无空闲缓冲区,buffers 也为 0,在执行了semWait(buffers)后,buffers 为-1,该生产者进程就会进入阻塞状态,这样不仅其他的生产者进程会因 mutex 不能继续存放产品,并且消费者也因 mutex 不能取产品,从而释放缓冲区,使缓冲区始终为 0,这样就形成了死锁。由于 semSignal 操作不含
15、有使进程阻塞的操作,故 semSignal(mutex)与semSignal(products)互换位置后,不会发生死锁问题。交换消费程序流程中的 semWait(products)和 sereWait(mutex)或者 semSignal(mutex)与 semSignal(products)的位置的结果也类似。【知识模块】 进程通信18 【正确答案】 N 最多为 5 时才能保证系统不会发生死锁,资源申请最坏的情况是每个进程都已得到了 1 个资源,现均要再申请一个资源,现系统还有一个剩余资源可分配给某个进程,待它结束资源的使用或运行结束后就可归还资源再供其他进程使用,因此该系统不会发生死锁。
16、【知识模块】 进程通信19 【正确答案】 只要进程一次申请它所需要的所有的资源,在所有的需要同时满足以前,阻塞自己。这种方法简单,易于实施,但也最浪费资源,因为分配给一个进程的资源可能长时间地闲置不用,而在这段时间内,它们也不能被其他进程使用,这影响了资源的周转使用,造成了浪费。采用有序资源使用法也可以防止死锁的循环等待条件。采用这种策略,进程是在需要时才动态申请和分配资源的,故按序分配法资源的利用率比预分配方法要高,但后使用的序号较小的资源要先申请,也一定程度上造成了资源的浪费。如果死锁发生的可能性很小,可以不采用任何预防和避免死锁的措施,操作系统可定期地执行死锁检测算法,一旦检测到死锁,就
17、采用某一个算法解除死锁。【知识模块】 进程通信四、综合题20 【正确答案】 实现该功能的 C 程序为程序清单 15-3。程序清单 15-3 的 soft_sectionC 程序使用 Peterson 1981 年发表的算法解决两个进程互斥执行临界段的算法。程序用纯用户软件实现了进入临界段的互斥控制函数enter_section 和退出临界段的控制函数 leave_section。enter_section 保证只能由一个进程或线程能通过本函数,另外的进程或线程就在函数内的 while 语句中循环等待。程序创建了两个线程对共享变量 global_count 进行访问计数,在一次运行中,每一个线程
18、访问 09 次(由随机数产生器产生),并用 enter_section 控制线程互斥地存取global_count。为了强化互斥进入的效果,把对 global_count 访问计数操作拆成两句,并在两句之间插入睡眠 02 秒的 sleep()函数(也由随机数产生器产生 )。另外作为比较,每一个线程也计算各自访问次数,最后由主线程收集累加。从运行结果可以看出,两种独立的计数方法的结果是相同的。如果线程不调用进入临界段的互斥控制函数 enter_section 和退出临界段的控制函数 leave_section,请读者再次编译和运行程序,并比较这两种独立的计数方法的结果。程序清单 15-3:sof
19、t_section c#includepthreadh#includestdioh#includestdlib h#define BALSE 0#define ARUE 1#define N 100*竞争资源的进程数目 *int observer; *轮到哪个进程观察要进入临界段的情况*int wanted_inN;*各进程希望进入临界段的标志*enter_section(process)*进入临界段的互斥控制函数*int process;*进程编号:0 或 1*int other; *对方进程号*other=1-process;wanted_inprocess=ARUE;*本进程要进入临界段
20、*observer=process;*本进程要观察进入临界段的情况*while(observer=processwanted_inother);*等待*leave_section(process)*退出临界段函数 *int process;wanted_inprocess=BALSE;*表示离开了临界段*静 define AIMES 5int global count;*线程执行函数,传入参数为线程序号,传出参数为项:(序号+1)*2*void*dowork(void*params)int i,j ,tmp,times,thread count=0 ;extern int global_cou
21、nt;j=*(int*)params;times=random()10;for(i=0,itimes;i+)enter_section(j);tmp=global_count;sleep(random()3) ;global_count=tmp+1;leave_section(j);thread_count+;*(int*)params=thread count;printf(“the threaddcount=dn“ ,j,thread_count);int nthreads=2;*运行方法:a out n 其中 n 为要创建的线程数,默认为 2*main(intargc,char*argv
22、)int i:pthread_t threads100;int thread_id100;int thread_count=0;extern int global_count;nthreads=1;if(argc=2)nthreads=atoi(argv1);将命令行字符串参数转换为整数srand(0);for(i=0;inthreads ;i+)thread_idi=i;*创建线程,其中 pthreaddatai为传给线程执行函数 dowork 的参数,并将结果带回*pthread_create(&threadsi,NULL,dowork,&thread_idi);for(i=0;inthr
23、eads ;i+)pthread_join(threadsi,NULL);等待子线程结束,汇合结果thread_count+=thread_idi;printf(“Ahe thread_count=dn“,thread_count) ;printf(“Ahe global_count=dn“ ,global_count);编译:$gcc thread_mutexc-lpthread本程序的 enter_section 和 leave_section 函数只能支持两个线程间的互斥。但Peterson 算法也很容易扩展到任意的 N 个进程,只要将 enter_section 函数中的while 语
24、句改成如下的形式。while(observer=process)if(observer!=process)break;for(i=0;wanted_ini;i+)if(wanted_ini)continue;。【知识模块】 进程通信21 【正确答案】 通过 semWait、semSignal 操作实现三个进程间的同步和互斥的框图见图 151。 信号量初值和意义如下。product:初值为 0,仓库中已存放的产品个数,同步信号量。mutex:初值为 1,向仓库存放产品和从仓库取走产品的互斥信号量。【知识模块】 进程通信五、判断题22 【正确答案】 A【知识模块】 进程通信23 【正确答案】 A【知识模块】 进程通信24 【正确答案】 A【知识模块】 进程通信25 【正确答案】 A【知识模块】 进程通信26 【正确答案】 B【试题解析】 中断有优先级,信号没有优先级。【知识模块】 进程通信27 【正确答案】 B【知识模块】 进程通信28 【正确答案】 A【知识模块】 进程通信