操作系统课件os02进程通信和线程_第1页
操作系统课件os02进程通信和线程_第2页
操作系统课件os02进程通信和线程_第3页
操作系统课件os02进程通信和线程_第4页
操作系统课件os02进程通信和线程_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统操作系统operating systems2.5 进进 程程 通通 信信 进程通信:进程之间的信息交换,其所交换的信息量:进程通信:进程之间的信息交换,其所交换的信息量: 一个状态或数值一个状态或数值 成千上万个字节成千上万个字节 低级通信:低级通信: 进程之间的互斥和同步进程之间的互斥和同步 交换量的比较少交换量的比较少 高级通信:高级通信: 用户可直接利用用户可直接利用os所提供的一组所提供的一组通信命令通信命令高效地传送高效地传送大大量数据量数据的一种通信方式。的一种通信方式。进程通信的类型进程通信的类型1 共享存储器系统共享存储器系统 基于共享数据结构的通信方式基于共享数据结构

2、的通信方式 基于共享存储区的通信方式基于共享存储区的通信方式2 消息传递系统消息传递系统3 管道通信系统管道通信系统1 共享存储器系统共享存储器系统 基于共享数据结构的通信方式基于共享数据结构的通信方式 诸进程公用某些数据结构诸进程公用某些数据结构如:在生产者如:在生产者消费者问题消费者问题 增加了程序员的负担增加了程序员的负担 os只须提供共享存储器只须提供共享存储器 低效的,只适于传递相对少量的数据。低效的,只适于传递相对少量的数据。共享存储器系统共享存储器系统 基于共享存储区的通信方式基于共享存储区的通信方式 诸进程通过对共享存储区中数据的读或写来实现通信。诸进程通过对共享存储区中数据的

3、读或写来实现通信。 通信方式属于高级通信通信方式属于高级通信先向系统申请获得共享存储区中的一个分区先向系统申请获得共享存储区中的一个分区像读、写普通存储器一样地读、写该公用存储分区。像读、写普通存储器一样地读、写该公用存储分区。 进程进程1 1进程进程2 2 物理主存物理主存共享主存共享主存2 消息传递系统消息传递系统 属于高级通信方式属于高级通信方式 程序员直接利用操作系统提供的一组程序员直接利用操作系统提供的一组通信命令通信命令(原语原语) 进程间的数据交换进程间的数据交换 以格式化的消息以格式化的消息(message)为单位的为单位的 因实现方式的不同而进一步分成:因实现方式的不同而进一

4、步分成: 直接通信方式直接通信方式 间接通信方式间接通信方式3 管道通信管道通信 管道管道 是指用于连接一个读进程和一个写进程以实现它们之是指用于连接一个读进程和一个写进程以实现它们之间通信的一个间通信的一个共享文件共享文件,又名,又名pipe文件。文件。写进程写进程共享文件共享文件读进程读进程管道机制必须的协调能力管道机制必须的协调能力1. 互斥互斥2. 同步同步 当写进程把一定数量的数据写入当写进程把一定数量的数据写入pipe,便去睡眠等待,便去睡眠等待,读进程取走数据后,再把它唤醒。读进程取走数据后,再把它唤醒。 当读进程读一空当读进程读一空pipe时,也应睡眠等待时,也应睡眠等待写进程

5、将数据写入管道后,才将之唤醒。写进程将数据写入管道后,才将之唤醒。3. 确定对方是否存在确定对方是否存在 只有确定了对方已存在时,才能进行通信。只有确定了对方已存在时,才能进行通信。 2.5.2 消息传递通信的实现方法消息传递通信的实现方法 直接通信方式直接通信方式 间接通信方式间接通信方式1. 直接通信方式直接通信方式 发送进程利用发送进程利用os所提供的发送命令,直接把消息发送给目所提供的发送命令,直接把消息发送给目标进程。标进程。 系统提供下述两条通信命令系统提供下述两条通信命令(原语原语): send(receiver,message);发送一个消息给接收进程;发送一个消息给接收进程

6、receive(sender,message);接收;接收sender发来的消息发来的消息 要求发送进程和接收进程都以显式方式提供对方的标识符要求发送进程和接收进程都以显式方式提供对方的标识符 原语原语send(p2,m1) 原语原语receive(p1,m1)解决生产者解决生产者消费者问题消费者问题repeatproduce an item in nextp;send(consumer,nextp);until false;repeat receive(producer,nextc); consume the item in nextc;until false2. 间接通信方式间接通信方式

7、进程之间的通信需要通过作为进程之间的通信需要通过作为共享数据结构共享数据结构的实体。的实体。 该实体用来暂存发送进程发送给目标进程的消息;该实体用来暂存发送进程发送给目标进程的消息; 接收进程从该实体中取出对方发送给自己的消息。接收进程从该实体中取出对方发送给自己的消息。 这种中间实体称为信箱这种中间实体称为信箱 消息在信箱中可以安全地保存,消息在信箱中可以安全地保存, 只允许核准的目标用户随时读取。只允许核准的目标用户随时读取。信箱通信原语信箱通信原语1. 信箱的创建和撤消。信箱的创建和撤消。创建者进程应给出信箱名字、信箱属性;创建者进程应给出信箱名字、信箱属性;对于共享信箱,还应给出共享者

8、的名字。对于共享信箱,还应给出共享者的名字。当进程不再需要读信箱时,可用信箱撤消原语将之当进程不再需要读信箱时,可用信箱撤消原语将之撤消撤消2. 消息的发送和接收。消息的发送和接收。send(mailbox,message);receive(mailbox,message);信箱分类信箱分类 私用信箱私用信箱 公用信箱公用信箱 共享信箱共享信箱私用信箱私用信箱 用户进程可为自己建立一个新信箱,并作为该进程的一部用户进程可为自己建立一个新信箱,并作为该进程的一部分。分。 当拥有该信箱的进程结束时,信箱也随之消失。当拥有该信箱的进程结束时,信箱也随之消失。 可采用可采用单向通信链路单向通信链路的信

9、箱来实现的信箱来实现 信箱的拥有者有权从信箱中读取消息,信箱的拥有者有权从信箱中读取消息, 其他用户只能将自己构成的消息发送到该信箱中。其他用户只能将自己构成的消息发送到该信箱中。公用信箱公用信箱 它由它由操作系统操作系统创建,提供给系统中的创建,提供给系统中的所有核准进程所有核准进程使用。使用。 公用信箱在系统运行期间公用信箱在系统运行期间始终存在始终存在。 公用信箱应采用公用信箱应采用双向通信链路双向通信链路的信箱来实现。的信箱来实现。 核准进程既可把消息发送到该信箱中,核准进程既可把消息发送到该信箱中, 也可从信箱中读取发送给自己的消息。也可从信箱中读取发送给自己的消息。共享信箱共享信箱

10、 由由某进程某进程创建,创建时提供共享进程(用户)的名字创建,创建时提供共享进程(用户)的名字 拥有者和共享者均可读取自己消息。拥有者和共享者均可读取自己消息。2.5.3消息传递系统实现中的若干问题消息传递系统实现中的若干问题1通信链路通信链路 建立通信链路的方式建立通信链路的方式(1)由发送进程在通信之前用显式的由发送进程在通信之前用显式的“建立连接建立连接”命令命令(原语原语)请求系统为之建立一条通信链路;请求系统为之建立一条通信链路; 主要用于计算机网络中。主要用于计算机网络中。(2)发送进程无须明确提出建立链路的请求,只须利用系统提发送进程无须明确提出建立链路的请求,只须利用系统提供的

11、供的发送命令发送命令(原语原语),系统会自动地为之建立一条链路。,系统会自动地为之建立一条链路。 主要用于单机系统中。主要用于单机系统中。 通信链路通信链路 根据通信链路的连接方法,可把通信链路分为两类:根据通信链路的连接方法,可把通信链路分为两类:(1) 点点点连接通信链路;点连接通信链路;(2) 多点连接链路,指用一条链路连接多个多点连接链路,指用一条链路连接多个(n2)结点结点(进程进程) 根据通信方式的不同,可把链路分成两种:根据通信方式的不同,可把链路分成两种:(1)单向通信链路;单向通信链路;(2)双向通信链路;双向通信链路; 根据通信链路容量,把链路分成两类:根据通信链路容量,把

12、链路分成两类:(1)无容量通信链路;)无容量通信链路;(2)有容量通信链路)有容量通信链路2消息的格式消息的格式 单机系统环境单机系统环境 其消息格式比较简单;其消息格式比较简单; 计算机网络环境计算机网络环境 可把一个消息分成消息头和消息正文两部分。可把一个消息分成消息头和消息正文两部分。 消息头包括消息在传输时所需的控制信息消息头包括消息在传输时所需的控制信息如源进程名、目标进程名、消息长度、消息类型、如源进程名、目标进程名、消息长度、消息类型、消息编号及发送的日期和时间;消息编号及发送的日期和时间; 定长消息格式和变长消息格式定长消息格式和变长消息格式3 同步方式同步方式 send( )

13、时时 阻塞:等待接收进程回答消息后,才继续进行阻塞:等待接收进程回答消息后,才继续进行 非阻塞:发送方可继续运行非阻塞:发送方可继续运行,直到某个时刻需要接收进程直到某个时刻需要接收进程返回的回答消息后,才查询和处理。返回的回答消息后,才查询和处理。 receive()时时 阻塞:如果没有消息,接收进程会被阻塞,直到有消息;阻塞:如果没有消息,接收进程会被阻塞,直到有消息;如果有消息,则会立即获得一个消息并返回如果有消息,则会立即获得一个消息并返回 非阻塞:查询后,立即返还控制给调用进程;如果有消息非阻塞:查询后,立即返还控制给调用进程;如果有消息,就返回消息;否则表明无消息可用。这种方法允许

14、接收,就返回消息;否则表明无消息可用。这种方法允许接收进程轮询信箱进程轮询信箱通信进程的同步通信进程的同步 发送进程阻塞,接收进程阻塞发送进程阻塞,接收进程阻塞 主要用于进程之间紧密同步主要用于进程之间紧密同步 发送进程和接收进程之间无缓冲时。发送进程和接收进程之间无缓冲时。 发送进程不阻塞,接收进程阻塞。发送进程不阻塞,接收进程阻塞。 应用最广的进程同步方式应用最广的进程同步方式 常用于服务进程常用于服务进程 发送进程和接收进程均不阻塞。发送进程和接收进程均不阻塞。2.5.4 2.5.4 消息缓冲队列通信机制消息缓冲队列通信机制 数据结构数据结构1).1).消息缓冲区:消息缓冲区:type

15、message_buffer=recordtype message_buffer=record sendersender;发送进程标识符;发送进程标识符 sizesize; 消息长度消息长度 texttext; 消息正文消息正文 nextnext; 指向下一缓冲区指针指向下一缓冲区指针end end 2.5.4 2.5.4 消息缓冲队列通信机制消息缓冲队列通信机制2).pcb2).pcb中有关通信的数据项:中有关通信的数据项:type processcontrol block=recordtype processcontrol block=record mqmq; 消息队列队首指针消息队列队首

16、指针 mutexmutex; 消息队列互斥信号量消息队列互斥信号量 smsm; 消息队列资源信号量消息队列资源信号量 end end 发送原语发送原语 procedure send(receiver, a) begin getbuf(a.size,i); 根据根据a.size申请缓冲区;申请缓冲区; i.sender =a.sender; i.size =a.size; i.text =a.text; i.next =0; getid(pcb set, receiver.j); 获得接收进程内部标识符;获得接收进程内部标识符; wait(j.mutex); insert(j.mq, i); 将

17、消息缓冲区插入消息队列;将消息缓冲区插入消息队列; signal(j.mutex); signal(j.sm); end 消息缓冲通信消息缓冲通信接收原语接收原语procedure receive(b)beginj:= internal name; j为接收进程内部的标识符;为接收进程内部的标识符; wait(j.sm); wait(j.mutex); remove(j.mq,i); 将消息队列中第一个消息移出;将消息队列中第一个消息移出; signal(j.mutex); b.sender:=i.sender;将消息缓冲区;将消息缓冲区i中的信息复制到接收区中的信息复制到接收区b; b.si

18、ze:=i.size; b.text:=i.text;end 2.6线程线程1 线程的引入线程的引入 在创建、撤消和切换中,系统必须为之付出较大的时空开在创建、撤消和切换中,系统必须为之付出较大的时空开销销 进程数目不宜过多,进程切换的频率也不宜过高。进程数目不宜过多,进程切换的频率也不宜过高。 将拥有资源的单位和可独立调度将拥有资源的单位和可独立调度/分派的基本单位分离分派的基本单位分离2线程与进程的比较线程与进程的比较1) 调度调度 把线程作为调度和分派的基本单位把线程作为调度和分派的基本单位 进程作为资源拥有的基本单位进程作为资源拥有的基本单位2) 并发性并发性2线程与进程的比较线程与进

19、程的比较3) 拥有资源拥有资源4) 系统开销系统开销进程进程 进程进程pcbpcb资源资源线程线程控制块控制块用户栈用户栈核心栈核心栈线程线程控制块控制块用户栈用户栈核心栈核心栈线程线程控制块控制块用户栈用户栈核心栈核心栈存储空间存储空间全局数据全局数据程序代码程序代码线程线程1 1线程线程2 2线程线程控制块控制块线程线程i i线程线程n n3线程的属性线程的属性 轻型实体。轻型实体。 线程中的实体基本上不拥有系统资源线程中的实体基本上不拥有系统资源 只是有一点必不可少的、只是有一点必不可少的、 能保证其独立运行的资源能保证其独立运行的资源 独立调度和分派的基本单位。独立调度和分派的基本单位

20、。 线程的切换非常迅速且开销小。线程的切换非常迅速且开销小。 可并发执行。可并发执行。 共享进程资源。共享进程资源。3 线程的状态线程的状态 线程的运行状态线程的运行状态 执行状态执行状态 就绪状态就绪状态 阻塞状态阻塞状态 线程的状态转换也类似于进程。线程的状态转换也类似于进程。6多线程多线程os中的进程中的进程 在多线程在多线程os中的进程具有的属性:中的进程具有的属性:(1)作为系统资源分配的单位。作为系统资源分配的单位。(2)可包括多个线程:至少也要有一个线程可包括多个线程:至少也要有一个线程(3)进程不是一个可执行的实体。进程不是一个可执行的实体。 进程仍具有进程仍具有与执行相关的状

21、态与执行相关的状态 对进程所施加的与进程状态有关的操作,也对其线程对进程所施加的与进程状态有关的操作,也对其线程起作用起作用进程挂起和激活进程挂起和激活2.6.3 线程的实现方式线程的实现方式 从实现角度看,线程分成从实现角度看,线程分成: 用户级线程用户级线程ult如如 java线程库线程库 内核支持线程内核支持线程kst如如window2003、os/2。 混合式线程混合式线程如如solaris1 内核支持线程内核支持线程进程中的线程的创建、撤消和切换等都是利用进程中的线程的创建、撤消和切换等都是利用系统调用系统调用进入内核,再由内核中相应的处理程序完成的。进入内核,再由内核中相应的处理程

22、序完成的。内核支持线程主要优点内核支持线程主要优点 多处理器上,内核能同时调度同一进程中多个线程多处理器上,内核能同时调度同一进程中多个线程并行执行并行执行 进程中的一个线程被阻塞了,内核能调度同一进程的其它线进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行。程占有处理器运行。 内核支持线程数据结构和堆栈很小,线程切换较快内核支持线程数据结构和堆栈很小,线程切换较快 内核自身也可用多线程技术实现,能提高系统的执行速度和内核自身也可用多线程技术实现,能提高系统的执行速度和效率。效率。 内核支持线程的主要缺点内核支持线程的主要缺点 对于用户的线程切换而言,其模式切换的开销较大对

23、于用户的线程切换而言,其模式切换的开销较大2 用户级线程用户级线程 用户级线程用户级线程仅存在于用户空仅存在于用户空间中间中 线程管理工作线程管理工作无须利用系统无须利用系统调用来实现,调用来实现,由用户空间中由用户空间中的线程库来完成。的线程库来完成。 内核不知道线程的存在内核不知道线程的存在用户级线程用户级线程 调度单位调度单位内核支持线程内核支持线程用户级线程用户级线程用户级线程(用户级线程(ult)优点)优点 线程切换不需要转换到内核空间线程切换不需要转换到内核空间 调度算法可以是进程专用的。调度算法可以是进程专用的。 用户级线程的实现与操作系统平台无关用户级线程的实现与操作系统平台无

24、关用户级线程(用户级线程(ult)的缺点)的缺点 系统调用的阻塞问题。系统调用的阻塞问题。 多线程应用不能利用多处理机进行多重处理的优点:多线程应用不能利用多处理机进行多重处理的优点: 内核在一段时间里,分配一个进程仅占用一个内核在一段时间里,分配一个进程仅占用一个cpu 进程中仅有一个线程能执行。进程中仅有一个线程能执行。cpu3组合方式组合方式 线程的实现两个层次:线程的实现两个层次:用户层和核心层用户层和核心层 内核支持多内核支持多kstkst的建立、调度的建立、调度和管理;和管理; 允许应用程序建立、调度和管允许应用程序建立、调度和管理理ultult。组合方式组合方式应用程序的多个应用

25、程序的多个ultult能分配和对应于能分配和对应于一个或多个一个或多个klt.klt.一个应用中的多个线程能同时在多一个应用中的多个线程能同时在多处理器上并行运行处理器上并行运行阻塞一个线程时并不需要封锁整个阻塞一个线程时并不需要封锁整个进程。进程。用用户户空空间间线程库线程库p p内内核核空空间间p p作业作业 p83 34 36 37unixunix系统系统 unix系统最本质的特征是开放性。系统最本质的特征是开放性。 所谓开放性,是指系统遵循国际标准规范;凡遵循国际标所谓开放性,是指系统遵循国际标准规范;凡遵循国际标准所开发的硬件和软件,均能彼此兼容,并可方便地实现准所开发的硬件和软件,

26、均能彼此兼容,并可方便地实现互连。互连。 人们普遍认为人们普遍认为: unix是目前开放性最好的是目前开放性最好的os,是目前惟一能稳定运行,是目前惟一能稳定运行在从微型机到大、中型等各种机器上的在从微型机到大、中型等各种机器上的os 还能方便地将已配置了还能方便地将已配置了unix os的机器互连成计算机的机器互连成计算机网络。网络。 unix系统是一个多用户、多任务系统是一个多用户、多任务osunix核心的框图核心的框图字符设备块设备设备驱动程序硬件控制高速缓存文件子系统系统调用接口进程间通信调度存储管理进程控制子系统核心级硬件级硬件核心级用户级库函数用户程序捕俘10.2.3 10.2.3

27、 进程控制进程控制 创建进程创建进程(fork)。 终止进程终止进程( (exit) )。 等待子进程结束等待子进程结束(wait)。 用于将调用进程挂起,直至其子进程因暂停或终止而用于将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。发来软中断信号为止。 父进程可以利用父进程可以利用wait使自身的执行与子进程的终止同使自身的执行与子进程的终止同步。步。 获得进程获得进程id创建进程创建进程 fork( )-父子进程是独立的进程父子进程是独立的进程 p创建一个新进程,即调用创建一个新进程,即调用fork( )父进程的副本,称为子父进程的副本,称为子进程。进程。p子进程继承了父进程

28、的许多特性。子进程继承了父进程的许多特性。p父进程与子进程并发执行父进程与子进程并发执行进程的创建进程的创建 系统调用格式:系统调用格式: int pid=fork( ) ;fork( )返回值意义如下:返回值意义如下:0:在子进程中,:在子进程中,pid变量保存的变量保存的fork( )返回值为返回值为0,表示当前,表示当前进程是子进程。进程是子进程。对子进程返回对子进程返回00:在父进程中,:在父进程中,pid变量保存的变量保存的fork( )返回值为子进程的返回值为子进程的id值。值。向父进程返回子进程的进程号向父进程返回子进程的进程号-1:创建失败:创建失败进程的创建进程的创建实例:编

29、写一段程序,使用系统调用实例:编写一段程序,使用系统调用fork( )创建一个子创建一个子进程。进程。当此程序运行时,在系统中有一个父进程和一个子进当此程序运行时,在系统中有一个父进程和一个子进程活动。程活动。让每一个进程在屏幕上显示不同的字符串:让每一个进程在屏幕上显示不同的字符串: 子进程显示子进程显示这是子进程这是子进程 父进程显示父进程显示 这是父进程这是父进程 main() pid_t pid; printf(“pid); pid=fork(); if(pid!=0) printf(“这是父进程这是父进程”); else printf(“这是子进程这是子进程);main( ) pid

30、_t pid; printf(“pid); pid=fork(); if(pid!=0) printf(“这是父进程这是父进程”); else printf(“这是子进程这是子进程);main( ) pid_t pid; printf(“pid); pid=fork(); if( pid !=0) printf(“这是父进程这是父进程”); else printf(“这是子进程这是子进程);父进程父进程父进程父进程子进程子进程分裂分裂执执行行继继续续执执行行继继续续执执行行10.3.210.3.2信号机制信号机制 信号机制信号机制 主要是作为在主要是作为在同一用户同一用户的诸进程之间通信的简单

31、工具的诸进程之间通信的简单工具 信号本身是一个信号本身是一个119中的某个整数中的某个整数 用来代表某一种事先约定好的简单消息用来代表某一种事先约定好的简单消息 发送信号发送信号 可利用系统调用可利用系统调用kill向另一进程或一组进程向另一进程或一组进程发送发送一个一个信信号号。 表示某进程已发生了某种异常事件表示某进程已发生了某种异常事件信号机制信号机制 每个进程在执行时,都要通过信号机制来每个进程在执行时,都要通过信号机制来检查检查是否有是否有信号信号到达。到达。 若有信号到达,则:若有信号到达,则: 立即中断正在执行的进程立即中断正在执行的进程 转向转向由该信号由该信号(某整数某整数)

32、所指示的所指示的处理程序处理程序,去完成对所,去完成对所发生的事件发生的事件(事先约定事先约定)的处理。的处理。 处理完毕,再处理完毕,再返回返回到此前的到此前的断点断点处继续执行。处继续执行。预置处理方式预置处理方式 系统调用系统调用signalsignal(sig(sig,func)func) 参数参数sigsig为信号名为信号名 funcfunc用于预置处理方式,可分成三种情况:用于预置处理方式,可分成三种情况:(1)func=1(1)func=1时,进程对时,进程对sigsig类信号不予理睬。类信号不予理睬。(2)func=0(2)func=0,为缺省值,进程在收到,为缺省值,进程在收

33、到sigsig信号后应自我终止信号后应自我终止( (3) )func为非为非0、非、非1类整数时,就把类整数时,就把func的值作为指向某的值作为指向某信号处理程序的指针。信号处理程序的指针。 如如: signal(16,stop); /接收到软中断信号接收到软中断信号16,转,转stopprocess abegin /*向向b发软中断信号发软中断信号16*/ kill(b,16); endprocess bbegin signal(16,stop); end void stop() mark=0; 10.3.310.3.3管道机制管道机制 管道的类型管道的类型 无名管道无名管道(unname

34、d pipes)(unnamed pipes)这是一个临时文件,利用系统调用这是一个临时文件,利用系统调用pipe( )建立。建立。只有调用只有调用pipe的进程及其子孙进程才能利用该文件的进程及其子孙进程才能利用该文件(管道管道)进行通信进行通信 有名管道有名管道(named pipes)(named pipes)利用利用mknod系统调用建立的系统调用建立的可以在文件系统中长期存在的、具有路径名的文件可以在文件系统中长期存在的、具有路径名的文件其它进程可以感知它的存在,并能利用该路径名来其它进程可以感知它的存在,并能利用该路径名来访问该文件。访问该文件。父进程:父进程:int fd2; int fd2; char outpipe100,inpipe100;/ char outpipe100,inpipe100;/ 定义两个字符数组定义两个字符数组 pipe(fd);/ pipe(fd);/ 创建无名管道创建无名管道 read(fd0,inpipe,50);read(fd0,inpipe,50); 子进程子进程write(fd1,outpipe,50);write(fd1,outpipe,50);/ / 向管道写入数据向管道写入数据 10.3.4 10.3.4 消息机制消息机制 消息消息(message)(message) 消息是一个格式化的、可变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论