第十章+进程间通信.ppt_第1页
第十章+进程间通信.ppt_第2页
第十章+进程间通信.ppt_第3页
第十章+进程间通信.ppt_第4页
第十章+进程间通信.ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

第十章进程间通信 嵌入式 进程间通信IPC InterProcessCommunication 是一种进程之间交换信息的一种技术 IPC表示各种进程通信方式的统称IPC的类型有管道 消息队列 信号量 共享存储 网络等并不是所有的系统都支持所有的进程间通信方式 进程间通信的概念 半双工管道简称管道 它是UNIXIPC的最老形式 是所有的UNIX系统都支持的IPC管道有两种限制 一是半双工 数据只能在一个方向上流动 二是它们只能在具有共同祖先的进程间使用 流管道没有第一种限制 FIFO和命名管道没有第二种限制管道的创建 管道 在单进程中使用管道没有意义 管道通常使用在父子进程间进行通信fork函数的子进程继承父进程打开的文件描述符 包括管道 在父子进程中各关闭管道的一端就能建立起一条父子进程的通道父子进程关闭的管道端决定了通道的方向 管道的通信 对管道的读写操作与文件IO相同接口当读一个写端已被关闭的管道时 在所有数据都被读取后 read返回0 表示达到文件结束 而不返回EOF 因为写端的进程未终止当写一个读端已被关闭的管道时 则产生信号SIGPIPE 如果忽略或捕捉该信号 则write函数出错返回 errno置为EPIPE写管道有最大缓冲 超过时有可能在多进程写时发生数据穿插 管道的通信规则 因为常见的操作是创建一个连接到另一个进程的管道 然后读其输入或向其发送输入 所以标准IO提供一组函数实现此功能 它创建一个管道 fork一个进程 关闭管道的不使用端 exec一个shell执行命令 最后等待命令终止 popen pclose函数 UNIX过滤程序从标准输入读取数据 对其进行适当处理后写到标准输出 当同一个程序产生某个过滤程序的输入 同时又读取该过滤程序的输出是 则该过滤程序就成为协同进程popen函数提供了连接到另一个进程的标准输入或输出的单行管道 而对于协同进程 它有连接到另一个进程的2为何单行管道 一个输入一个输出 先将要处理的数据写到输入 经过处理后再从输出读 协同进程 FIFO又称命名管道 不相关的进程也能通过命名管道来交换数据FIFO管道的创建非阻塞标志对管道的影响类似普通管道 若写一个尚无进程为读打开的FIFO 产生信号SIGPIPE 一个给定的FIFO可以有多个写进程 参数PIPE BUF说明了原子写的最大数据量 若某个FIFO的最后一个写进程关闭了该FIFO 则为读该FIFO的进程产生一个EOF FIFO FIFO由shell命令使用以将数据从一条管道线传送到另一条 无需为此而创建中间临时文件FIFO用于客户机 服务器应用程序中 以在客户机和服务器之间传递数据 FIFO的用途 消息队列 信号量和共享存储是三种系统V的IPC 有许多相似之处三种IPC都使用一个非负的整数标示符引用创建时需要指定一个关键字 类型为key t 内核将关键字转为标示符返回使用IPC PRIVATE表示创建一个新的私有IPC结构 也可以在标志位中设置IPC CREAT来创建一个新的共有IPC结构可以通过ftok函数指定2个参数来创建一个关键字 消息队列 信号量和共享存储 当创建IPC时 系统为每个IPC设置一个ipc perm结构 该结构规定了IPC的许可权和所有者可以通过相应函数修改IPC的所有者和访问权限和普通文件一样 IPC有三组访问权限 每组访问权限都只有读和写 没有执行权限 许可权结构 IPC结构在系统范围内起作用 没有范围计数 即创建一个IPC并添加消息后终止 该消息仍然存在 而对于管道 FIFO 进程终止后就删除管道和管道内的数据IPC没有名字 无法在文件系统中索引它们 因此不能使用文件IO来操作 而必须使用专门的系统调用函数来操作 限制 消息队列克服了早期UNIXIPC的缺点 例如信号能够传输的信息量有限 而管道 命名管道只能传输无格式的字节流 并且受缓冲区大小限制消息队列是一个消息的链表 消息相当于记录 具有特定的格式和优先级 对消息队列有写权限的进程可以按照一定的规则添加新消息 对消息队列有读权限的进程可以从消息队列中读消息 消息队列 消息队列的创建 每个消息队列都有一个msqid ds结构与其相关 该结构规定了队列的当前状态对消息队列执行操作 该功能操作类似ioctl函数添加消息获取消息 消息队列 信号量与管道和消息队列不同 它是一个计数器 用于多线程对共享数据对象的存取1 测试控制该资源的信号量2 若值为正 则进程可以使用该资源 并将信号量减1 3若信号量值为0 则进程进入休眠直至信号量值大于0 该进程被唤醒后返回步骤1当进程不再使用该信号量控制的共享资源时 该信号量加1 如果有进程在休眠等待此信号量则唤醒它们 信号量 为正确使用信号量 对其的测试及减1操作应当是原子操作 通常在内核实现初始值为1的信号量称为双态信号量 它控制单个资源与信号量相关的数据结构为semid ds创建一个信号量集合信号量的操作 信号量 共享存储允许两个或多个进程共享一定

温馨提示

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

评论

0/150

提交评论