第9章综合模拟试题 9模拟试题(一) 判断改错题(判断下列命题的正确性,并对错误命题说明理由,正确命题不加说明。) (10分) 1.一个作业由若干作业步组成,在多道程序系统中这些作业步可以并发执行。 2.多道程序的引入主要是为了提高CPU的利用率 3.不同进程所包含的程序必定相同。 4.P.V操作中信号量的值,永远代表着某类可用资源的数量 5.操作系统对进程的管理和控制主要是通过PCB来实现的。 二.单项选择题(10分) 1.实时操作系统必须在 内处理完来自外部的事件 A.响应时间 B.周转时间 C.被控对象规定时间D.调度时间 2.操作系统提供给程序员的接口是 A.进程 B.系统调用 C.库函数 D.系统调用和库函数 3.操作系统是对 进行管理的软件。 A.软件 B.硬件 C.计算机资源 D.应用程序 4.联想存储器在计算机系统中是用于 的 A.存储文件信息 与主存交换信息 C.内存地址变换D.内存管理信息 5.响应比高者优先作业调度算法是以计算时间和 来考虑的。 A.输入时间 B.完成时间 C.周转时间 D.等待时间 6.在消息缓冲通信中,消息队列属于 资源。 A.临界 B.共享 C.永久 D.可剥夺 7.进程间的同步是指进程间在逻辑上的相互 关系。 A.联接 B.制约 C.继续 D.调用 8.采用资源剥夺法可解除死锁,还可以采用方法解除死锁 A.执行并行操作 B.撤消进程 C.拒绝分配新资源 D.修改信号量 9.实现虚拟存储器的目的是 A.实现存储保护 B.实现程序浮动 C.扩充辅存容量 D.扩充主存容量 10.为了解决不同用户文件的"命名冲突"问题,通常在文件系统中采用 A.约定的方法 B.多级目录 C.路径 D.索引 填空(20分) 1.多道程序环境下的各道程序,宏观上它们是在」 运行,微观上则是在
第 9 章 综合模拟试题 9.1 模拟试题(一) 一.判断改错题(判断下列命题的正确性,并对错误命题说明理由,正确命题不加说明。) (10 分) 1.一个作业由若干作业步组成,在多道程序系统中这些作业步可以并发执行。 2.多道程序的引入主要是为了提高 CPU 的利用率。 3.不同进程所包含的程序必定相同。 4. P.V 操作中信号量的值,永远代表着某类可用资源的数量。 5.操作系统对进程的管理和控制主要是通过 PCB 来实现的。 二.单项选择题(10 分) 1.实时操作系统必须在________内处理完来自外部的事件。 A.响应时间 B.周转时间 C.被控对象规定时间 D.调度时间 2.操作系统提供给程序员的接口是________。 A.进程 B.系统调用 C.库函数 D.系统调用和库函数 3.操作系统是对____________进行管理的软件。 A.软件 B.硬件 C.计算机资源 D.应用程序 4.联想存储器在计算机系统中是用于_______的。 A.存储文件信息 B.与主存交换信息 C.内存地址变换 D.内存管理信息 5.响应比高者优先作业调度算法是以计算时间和__________来考虑的。 A.输入时间 B.完成时间 C.周转时间 D.等待时间 6.在消息缓冲通信中,消息队列属于_________资源。 A.临界 B.共享 C.永久 D.可剥夺 7.进程间的同步是指进程间在逻辑上的相互__________关系。 A.联接 B.制约 C.继续 D.调用 8.采用资源剥夺法可解除死锁,还可以采用_____方法解除死锁。 A.执行并行操作 B.撤消进程 C.拒绝分配新资源 D.修改信号量 9.实现虚拟存储器的目的是________。 A.实现存储保护 B.实现程序浮动 C.扩充辅存容量 D.扩充主存容量 10.为了解决不同用户文件的"命名冲突"问题,通常在文件系统中采用______。 A.约定的方法 B.多级目录 C.路径 D.索引 三.填空(20 分) 1.多道程序环境下的各道程序,宏观上它们是在________运行,微观上则是在______执
2.并发和 是操作系统的两个最基本的特征,两者之间互为存在条件 3.所谓系统调用,就是用户在程序中调用 所提供的一些子功能。 4.确定作业调度算法时应注意系统资源的均衡使用,使作业和作业搭配运行。 5.临界资源的概念是,而临界区是指 6.进程是一个 态概念,而程序是一个 态概念 7.处理死锁的方法通常有 和 8.重定位的方式有 和 两种。 9.UNIX操作系统中进程控制块分为 和 两部分。 10.从资源管理(分配)的角度出发,I/0设备可分为 和 种类型。 四.简答题(30分) 1.什么叫多道程序设计?多道程序设计的主要特点是什么? 2.什么是线程?线程与进程的区别是什么? 3.什么是系统功能调用?系统调用与一般用户程序有什么区别?与库函数和实用程序又 有什么区别? 4.什么是设备驱动程序?其功能是什么?用户进程怎样使用驱动程序? 5为什么引进缓冲区?UNIX系统V的缓冲区有哪儿种? 6.提高内存利用率的途径有哪些? 五.综合题(30分 1.某个采用段式存储管理的系统为装入主存的一个作页建立了段表SMT 段长 主存起始地址 0 140 2 580 1237 1959 (1)给出段式地址转换过程。 (2)计算该作业访问的内存地址(0,432),(1,10),(2,500),(3,400)时的绝对地址。 2.假设系统有同类资源10个,供P、Q、R三个进程共享,P、Q、R所需资源总数分别为8 4、9,它们申请资源的次序和数量如下: L次序进程〖申请量 23456 PQPRQ 按银行家算法为它们分配资源 (1)写出执行完序号为6的申请时,各进程的状态和己占的资源数 (2)请估计系统是否会出现死锁,并简要说明理由 3.进程A1,A2,…An1通过m个缓冲区向进程B1 Bn2不断地发送消息。发送和
行。 2.并发和____________是操作系统的两个最基本的特征,两者之间互为存在条件。 3.所谓系统调用,就是用户在程序中调用________所提供的一些子功能。 4.确定作业调度算法时应注意系统资源的均衡使用,使_____作业和_____作业搭配运行。 5.临界资源的概念是________,而临界区是指______________。 6.进程是一个__________态概念,而程序是一个__________态概念。 7.处理死锁的方法通常有_______、________和________。 8.重定位的方式有_______和_________两种。 9.UNIX 操作系统中进程控制块分为______和__________两部分。 10.从资源管理(分配)的角度出发,I/0 设备可分为________、_______和________三 种类型。 四.简答题(30 分) 1.什么叫多道程序设计?多道程序设计的主要特点是什么? 2.什么是线程?线程与进程的区别是什么? 3.什么是系统功能调用?系统调用与一般用户程序有什么区别?与库函数和实用程序又 有什么区别? 4.什么是设备驱动程序?其功能是什么?用户进程怎样使用驱动程序? 5.为什么引进缓冲区? UNIX 系统 V 的缓冲区有哪儿种? 6.提高内存利用率的途径有哪些? 五. 综合题(30 分) 1.某个采用段式存储管理的系统为装入主存的一个作页建立了段表 SMT。 段号 段长 主存起始地址 0 1 2 3 4 660 140 100 580 960 2219 3300 90 1237 1959 (1)给出段式地址转换过程。 (2)计算该作业访问的内存地址(0,432),(1,10),(2,500),(3,400)时的绝对地址。 2.假设系统有同类资源 10 个,供 P、Q、R 三个进程共享,P、Q、R 所需资源总数分别为 8、 4、9,它们申请资源的次序和数量如下: 次序 进程 申 请 量 1 2 3 4 5 6 … R P Q P R Q … 2 4 2 2 1 2 … 按银行家算法为它们分配资源: (1)写出执行完序号为 6 的申请时,各进程的状态和已占的资源数。 (2)请估计系统是否会出现死锁,并简要说明理由。 3.进程 A1,A2,…An1 通过 m 个缓冲区向进程 B1,B2,…Bn2 不断地发送消息。发送和
接收工作遵循如下规则: (1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度 2)对每一个消息,B1,B2,…,Bn2都须各接收一次,读入各自的数据区内 (3)m个缓冲区都满时,发送进程等待:没有可读的消息时,接收进程等待 试用P、V操作组织正确的发送和接收工作。 模拟试题(一)答案 判断题改错题 1.错,原因:按顺序执行 2.对 3.错,原因:只有共享的可再入程序相同。 4.错,原因:信号量为负值时,绝对值表示等待队列中的进程个数 5.对 二.单项选择题 1.C2.B3.C4.C5.D6.A7.B8.B9.D10.B 三.填空 并行串行 2.共享 3.操作系统 4.I/0繁忙CPU繁忙 5.次仅允许一个进程访问的资源 程序中访问临界资源的那段程序代码 6.动态静态 7.死锁预防 死锁避免 死锁检测与解除态 8.静态重定为动态重定位 9.Proc结构 User结构 10.独享 共享 虚拟 四.简答题 1.多道程序设计是指把一个以上的程序放在内存中,并且同时处于运行状态,这些程序 共享CPU和其它计算机资源。其主要特点是 (1)CPU的利用率高。在单道环境下,程序独占资源,当程序等待I/0操作时,CPU空闲 造成CP资源的浪费:在多道环境下,多个程序共享计算机资源,当某个程序等待I/0操作 时,CPU可以执行其它的程序,提高了CPU的利用率 (2)设备利用率高。在多道环境下,内存和外设也由多个程序共享,这样也会提高内存和 外设的利用率。 (3)系统吞吐量大。由于资源利用率的提高,减少了程序的等待时间,提高了系统的吞吐 率 2线程是在进程内用于调度和占有处理机的基本单位,它由线程控制表、存储线程上下文 的用户钱以及核心校组成。 线程可分为用户级线程、核心级线程以及用户/核心混合型线程等类型。其中,用户级线程在 用户态下执行,CPU调度算法和各线程优先级都由用户设置,与操作系统内核无关;核心级线 程的调度算法及线程优先级的控制杈在操作系统内核中:混合型线程的控制权则在用户和操 作系统内核。 线程与进程的主要区别如下 (1)进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外设等
接收工作遵循如下规则: (1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度; (2)对每一个消息,B1,B2,…,Bn2 都须各接收一次,读入各自的数据区内; (3)m 个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。 试用 P、V 操作组织正确的发送和接收工作。 模拟试题(一)答案 一.判断题改错题 1.错,原因:按顺序执行。 2.对 3.错,原因:只有共享的可再入程序相同。 4.错,原因:信号量为负值时,绝对值表示等待队列中的进程个数。 5.对 二.单项选择题 1.C 2.B 3.C 4.C 5.D 6.A 7.B 8.B 9.D 10.B 三.填空 1. 并行 串行 2. 共享 3. 操作系统 4. I/O 繁忙 CPU 繁忙 5. 次仅允许一个进程访问的资源 程序中访问临界资源的那段程序代码 6. 动态 静态 7. 死锁预防 死锁避免 死锁检测与解除态 8. 静态重定为 动态重定位 9. Proc 结构 User 结构 10. 独享 共享 虚拟 四. 简答题 1.多道程序设计是指把一个以上的程序放在内存中,并且同时处于运行状态,这些程序 共享 CPU 和其它计算机资源。其主要特点是: (1)CPU 的利用率高。在单道环境下,程序独占资源,当程序等待 I/0 操作时,CPU 空闲, 造成 CPU 资源的浪费:在多道环境下,多个程序共享计算机资源,当某个程序等待 I/0 操作 时,CPU 可以执行其它的程序,提高了 CPU 的利用率。 (2)设备利用率高。在多道环境下,内存和外设也由多个程序共享,这样也会提高内存和 外设的利用率。 (3)系统吞吐量大。由于资源利用率的提高,减少了程序的等待时间,提高了系统的吞吐 率。 2.线程是在进程内用于调度和占有处理机的基本单位,它由线程控制表、存储线程上下文 的用户钱以及核心校组成。 线程可分为用户级线程、核心级线程以及用户/核心混合型线程等类型。其中,用户级线程在 用户态下执行,CPU 调度算法和各线程优先级都由用户设置,与操作系统内核无关;核心级线 程的调度算法及线程优先级的控制权在操作系统内核中:混合型线程的控制权则在用户和操 作系统内核。 线程与进程的主要区别如下: (1)进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外设等:
线程只是处理机调度的基本单位,它只和其他线程一起共享进程资源,但自己没有任何资源 (2)以进程为单位进行处理机调度和切换时,由于涉及到资源转移以及现场保护等问题,将导 致处理机切换时间变长,资源利用率低。以线程为单位进行处理机调度和切换时,由于不发生 资源变化,特别是地址空间的变化,处理机切换时间较短,处理机效率高。 (3)就用户而言,多线程可以减少用户的等待时间,提高系统的响应速度。例如,当一个进程需 要对两个不同服务器进行远程过程调用时,对于无线程的操作系统,就需要顺序等待两个不 同调用返回结果后才能继续执行,而且等待中可能发生进程调度。对于多线程系统,则可以在 同一进程中使用不同的线程同时进行远程过程调用,从而缩短进程的等待时间 (4)线程和进程一样,都有自己的状态和相应的同步机制,但是,由于线程没有单独的数据和 程序空间,因此,线程不能像进程的程序和数据一样,交换到外存上,因此线程没有挂起状态 进程的调度、同步控制大多由操作系统内核完成,而线程的控制可以由操作系统内核完 成,也可以由用户控制完成 3.系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序一 级动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的 工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统 的具体动作而只提供杳关的功能。 它与一般用户程序、库函数和实用程序的区别是:系统功能调用是在程序核心态执行, 调用它们需要一个类似于硬件中断处理的中断处理机制来提供系统服务。 4.设备驱动程序是驱动外部物理设各和相应的DMA控制器或I/0控制器等设备,使 之能直接和内存进行I/0操作的子程序集合。它们负责设置相应设备的有关寄存器,启动I/0 操作,指定操作类型和数据流向等 设备驱动程序屏蔽了直接对硬件操作的细节,为程序员提供了操作设备的良好接口。 用户进程通过调用设备驱动程序提供的接口来使用设各驱动程序。 5.引进缓冲区的目的是为了匹配外设与CPU之间的处理速度,减少中断次数和中断处理 时间,解决DMA和通道方式的数据传输瓶颈。 缓冲区分为自由buf队列、空设备队列、设备缓冲区队列、设备I/0请求队列。 6.内存利用率不高,主要表现为以下四种形式: (1)内存中存在着大量的、分散的、难以利用的碎片 2)暂时或长期不能运行的程序和数据,占据了大量的存储空间。 (3)当作业较大时,内存中只能装入少量作业,当它们被阻塞时,将使CPU空闲,从而也就 降低了内存的利用率 (4)内存中存在着重复的拷贝。 针对上述问题,可分别采用下述方法提高内存的利用率 (1)改连续分配方式为离散分配方式,以减少内存中的零头 (2)增加对换机制,将那些暂时不能运行的进程或暂时不需要的程序和数据,换出至外存 以腾出内存来装入可运行的进程。 (3)引入动态链接机制,当程序在运行中需要调用某段程序时,才将该段程序由外存装入 内存。这样,可以避免装入一些本次运行中不用的程序。 (4)引入虚拟存储器机制,使更多的作业能装入内存,并使CPU更加忙碌。引入虚拟存储器 机制,还可以避免装入本次运行中不会用到的那部分程序和数据 (5)引入存储器共享机制,允许一个正文段或数据段被若干个进程共享,以削减内存中重 复的拷贝。 五.综合题 1.(1)A.根据程序编译后形成的逻辑地址,取出段号s,w
线程只是处理机调度的基本单位,它只和其他线程一起共享进程资源,但自己没有任何资源。 (2)以进程为单位进行处理机调度和切换时,由于涉及到资源转移以及现场保护等问题,将导 致处理机切换时间变长,资源利用率低。以线程为单位进行处理机调度和切换时,由于不发生 资源变化,特别是地址空间的变化,处理机切换时间较短,处理机效率高。 (3)就用户而言,多线程可以减少用户的等待时间,提高系统的响应速度。例如,当一个进程需 要对两个不同服务器进行远程过程调用时,对于无线程的操作系统,就需要顺序等待两个不 同调用返回结果后才能继续执行,而且等待中可能发生进程调度。对于多线程系统,则可以在 同一进程中使用不同的线程同时进行远程过程调用,从而缩短进程的等待时间。 (4)线程和进程一样,都有自己的状态和相应的同步机制,但是,由于线程没有单独的数据和 程序空间,因此,线程不能像进程的程序和数据一样,交换到外存上,因此线程没有挂起状态。 进程的调度、同步控制大多由操作系统内核完成,而线程的控制可以由操作系统内核完 成,也可以由用户控制完成。 3.系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序一 级动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的 工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统 的具体动作而只提供杳关的功能。 它与一般用户程序、库函数和实用程序的区别是:系统功能调用是在程序核心态执行, 调用它们需要一个类似于硬件中断处理的中断处理机制来提供系统服务。 4.设备驱动程序是驱动外部物理设各和相应的 DMA 控制器或 I/O 控制器等设备,使 之能直接和内存进行 I/O 操作的子程序集合。它们负责设置相应设备的有关寄存器,启动 I/O 操作,指定操作类型和数据流向等。 设备驱动程序屏蔽了直接对硬件操作的细节,为程序员提供了操作设备的良好接口。 用户进程通过调用设备驱动程序提供的接口来使用设各驱动程序。 5.引进缓冲区的目的是为了匹配外设与 CPU 之间的处理速度,减少中断次数和中断处理 时间,解决 DMA 和通道方式的数据传输瓶颈。 缓冲区分为自由 buf 队列、空设备队列、设备缓冲区队列、设备 I/0 请求队列。 6. 内存利用率不高,主要表现为以下四种形式: (1)内存中存在着大量的、分散的、难以利用的碎片。 (2)暂时或长期不能运行的程序和数据,占据了大量的存储空间。 (3)当作业较大时,内存中只能装入少量作业,当它们被阻塞时,将使 CPU 空闲,从而也就 降低了内存的利用率。 (4)内存中存在着重复的拷贝。 针对上述问题,可分别采用下述方法提高内存的利用率: (1)改连续分配方式为离散分配方式,以减少内存中的零头。 (2)增加对换机制,将那些暂时不能运行的进程或暂时不需要的程序和数据,换出至外存, 以腾出内存来装入可运行的进程。 (3)引入动态链接机制,当程序在运行中需要调用某段程序时,才将该段程序由外存装入 内存。这样,可以避免装入一些本次运行中不用的程序。 (4)引入虚拟存储器机制,使更多的作业能装入内存,并使 CPU 更加忙碌。引入虚拟存储器 机制,还可以避免装入本次运行中不会用到的那部分程序和数据。 (5)引入存储器共享机制,允许一个正文段或数据段被若干个进程共享,以削减内存中重 复的拷贝。 五. 综合题 1.(1)A.根据程序编译后形成的逻辑地址,取出段号 s,w
B.根据s在段变换表中查找相应的段起始地址p和该段长1 C.检查w运1是否成立,若成立则执行E:否则进入D执行 D.产生地址越界错,程序终止 E.计算:物理地址=p+w,这就是所要的指令物理地址 (2)(0,432)物理地址=2219+432=26 (1,10)物理地址=300+10=3310 (2,500)因为段内偏移500)段长100,故报地址越界错 3,400)物理地址=1237+400=1637 2.(1)执行完序号为6的申请时,各进程的状态和已占的资源数如下 P等待 已古用资源4个 Q就绪或运行已占用资源4个 R等待 己占用资源2个 根据单项银行家算法,过程为 ①R申请2个资源时,剩余资源可使各进程运行结束,所以这个分配是安全的,故将2个资 源分给R。 ②同理,p,Q分别申请4、2个资源时,剩余资源可使各进程运行结束,所以这个分配也是 安全的,故将4、2个资源分给P、Q ③P申请2个资源时,系统此刻剩余资源数为2,如果将这两个资源分给P,系统就没有资 源了。这时的p、Q、R都还需要资源才可运行完,这样,p、Q、R将都进入阻塞状态。所以P 申请的这两个资源不能分配 ④同理,接下来R欲申请1个资源也是不安全的分配,故不能分给。 ⑤Q申请2个资源时,假定操作系统分给它。Q进程将运行结束,Q释放的资源又可使P运 行结束:P运行结束,释放的资源又可使R运行结束。所以这个分配是安全的,故将2个资源 分给Q。 (2)不会死锁,因为银行家算法在任何时候均保证至少有一个进程能得到所需的全部资源, 这样,得到资源的进程能及时归还资源供其他进程使用。 3.本题是生产者-消费者问题的一个变形,一组生产者A1,A2,…An1和一组消费者B1 B2,…,Bn2共用m个缓冲区,每个缓冲区只要写一次,但需要读n2次。因此,我们可以 把这一组缓冲区看成n2组缓冲区,每个发送者需要同时写n2组缓冲区中相应的n2个缓冲 区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。 在本题中,应设置一个信号量 mutex实现诸进程对缓冲区的互斥访问:两个信号量数组 empty[n2]和full[n2]描述n2组缓冲区的使用情况。 mutex的初值为1,数组 empty中元素 初值为m,数组full中的元素初值为0。其同步关系描述如下 int mutex, empty [n2], full [n2] int mutex=l for(i=0;i<=n2-1;i++) empty [i]=m full[i=0:
B.根据 s 在段变换表中查找相应的段起始地址 p 和该段长 1。 C.检查 w 运 l 是否成立,若成立则执行 E:否则进入 D 执行。 D.产生地址越界错,程序终止。 E.计算:物理地址=p+w,这就是所要的指令物理地址。 (2) (0,432) 物理地址=2219+432=2651 (1,10) 物理地址=3300+10=3310 (2,500) 因为段内偏移 500〉段长 100,故报地址越界错 (3,400) 物理地址=1237+400=1637 2. (1)执行完序号为 6 的申请时,各进程的状态和已占的资源数如下: P 等待 已占用资源 4 个 Q 就绪或运行 已占用资源 4 个 R 等待 己占用资源 2 个 根据单项银行家算法,过程为: ①R 申请 2 个资源时,剩余资源可使各进程运行结束,所以这个分配是安全的,故将 2 个资 源分给 R。 ②同理,p,Q 分别申请 4、2 个资源时,剩余资源可使各进程运行结束,所以这个分配也是 安全的,故将 4、2 个资源分给 P、Q。 ③P 申请 2 个资源时,系统此刻剩余资源数为 2,如果将这两个资源分给 P,系统就没有资 源了。这时的 p、Q、R 都还需要资源才可运行完,这样,p、Q、R 将都进入阻塞状态。所以 P 申请的这两个资源不能分配。 ④同理,接下来 R 欲申请 1 个资源也是不安全的分配,故不能分给。 ⑤Q 申请 2 个资源时,假定操作系统分给它。Q 进程将运行结束,Q 释放的资源又可使 P 运 行结束:P 运行结束,释放的资源又可使 R 运行结束。所以这个分配是安全的,故将 2 个资源 分给 Q。 (2)不会死锁,因为银行家算法在任何时候均保证至少有一个进程能得到所需的全部资源, 这样,得到资源的进程能及时归还资源供其他进程使用。 3.本题是生产者-消费者问题的一个变形,一组生产者 A1,A2,…An1 和一组消费者 B1, B2,…,Bn2 共用 m 个缓冲区,每个缓冲区只要写一次,但需要读 n2 次。因此,我们可以 把这一组缓冲区看成 n2 组缓冲区,每个发送者需要同时写 n2 组缓冲区中相应的 n2 个缓冲 区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。 在本题中,应设置一个信号量 mutex 实现诸进程对缓冲区的互斥访问;两个信号量数组 empty[n2]和 full[n2]描述 n2 组缓冲区的使用情况。mutex 的初值为 1,数组 empty 中元素 初值为 m,数组 full 中的元素初值为 0。其同步关系描述如下: int mutex,empty[n2],full[n2]; int 1; mutex=1; for(i=O;i<=n2-1;i++) { empty[i]=m; full[i]=0; } main( )