《进程间通信》ppt课件

《进程间通信》ppt课件

ID:26961146

大小:661.01 KB

页数:18页

时间:2018-11-30

《进程间通信》ppt课件_第1页
《进程间通信》ppt课件_第2页
《进程间通信》ppt课件_第3页
《进程间通信》ppt课件_第4页
《进程间通信》ppt课件_第5页
资源描述:

《《进程间通信》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十章进程间通信嵌入式进程间通信IPC(InterProcessCommunication)是一种进程之间交换信息的一种技术,IPC表示各种进程通信方式的统称IPC的类型有管道、消息队列、信号量、共享存储、网络等并不是所有的系统都支持所有的进程间通信方式进程间通信的概念半双工管道简称管道,它是UNIXIPC的最老形式,是所有的UNIX系统都支持的IPC管道有两种限制,一是半双工,数据只能在一个方向上流动,二是它们只能在具有共同祖先的进程间使用。流管道没有第一种限制,FIFO和命名管道没有第二种限制管道的创建管道在单进程中使用管道没有意义,

2、管道通常使用在父子进程间进行通信fork函数的子进程继承父进程打开的文件描述符,包括管道,在父子进程中各关闭管道的一端就能建立起一条父子进程的通道父子进程关闭的管道端决定了通道的方向管道的通信对管道的读写操作与文件IO相同接口当读一个写端已被关闭的管道时,在所有数据都被读取后,read返回0,表示达到文件结束,而不返回EOF,因为写端的进程未终止当写一个读端已被关闭的管道时,则产生信号SIGPIPE,如果忽略或捕捉该信号,则write函数出错返回,errno置为EPIPE写管道有最大缓冲,超过时有可能在多进程写时发生数据穿插管道的通信规则

3、因为常见的操作是创建一个连接到另一个进程的管道,然后读其输入或向其发送输入,所以标准IO提供一组函数实现此功能,它创建一个管道,fork一个进程,关闭管道的不使用端,exec一个shell执行命令,最后等待命令终止popen/pclose函数UNIX过滤程序从标准输入读取数据,对其进行适当处理后写到标准输出。当同一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出是,则该过滤程序就成为协同进程popen函数提供了连接到另一个进程的标准输入或输出的单行管道,而对于协同进程,它有连接到另一个进程的2为何单行管道,一个输入一个输出,先将要

4、处理的数据写到输入,经过处理后再从输出读协同进程FIFO又称命名管道。不相关的进程也能通过命名管道来交换数据FIFO管道的创建非阻塞标志对管道的影响类似普通管道,若写一个尚无进程为读打开的FIFO,产生信号SIGPIPE。一个给定的FIFO可以有多个写进程,参数PIPE_BUF说明了原子写的最大数据量。若某个FIFO的最后一个写进程关闭了该FIFO,则为读该FIFO的进程产生一个EOFFIFOFIFO由shell命令使用以将数据从一条管道线传送到另一条,无需为此而创建中间临时文件FIFO用于客户机-服务器应用程序中,以在客户机和服务器之间

5、传递数据FIFO的用途消息队列、信号量和共享存储是三种系统V的IPC,有许多相似之处三种IPC都使用一个非负的整数标示符引用创建时需要指定一个关键字,类型为key_t,内核将关键字转为标示符返回使用IPC_PRIVATE表示创建一个新的私有IPC结构,也可以在标志位中设置IPC_CREAT来创建一个新的共有IPC结构可以通过ftok函数指定2个参数来创建一个关键字消息队列、信号量和共享存储当创建IPC时,系统为每个IPC设置一个ipc_perm结构,该结构规定了IPC的许可权和所有者可以通过相应函数修改IPC的所有者和访问权限和普通文件一

6、样,IPC有三组访问权限,每组访问权限都只有读和写,没有执行权限许可权结构IPC结构在系统范围内起作用,没有范围计数,即创建一个IPC并添加消息后终止,该消息仍然存在,而对于管道、FIFO,进程终止后就删除管道和管道内的数据IPC没有名字,无法在文件系统中索引它们,因此不能使用文件IO来操作,而必须使用专门的系统调用函数来操作限制消息队列克服了早期UNIXIPC的缺点,例如信号能够传输的信息量有限,而管道/命名管道只能传输无格式的字节流,并且受缓冲区大小限制消息队列是一个消息的链表,消息相当于记录,具有特定的格式和优先级,对消息队列有写权

7、限的进程可以按照一定的规则添加新消息,对消息队列有读权限的进程可以从消息队列中读消息消息队列消息队列的创建,每个消息队列都有一个msqid_ds结构与其相关,该结构规定了队列的当前状态对消息队列执行操作,该功能操作类似ioctl函数添加消息获取消息消息队列信号量与管道和消息队列不同,它是一个计数器,用于多线程对共享数据对象的存取1.测试控制该资源的信号量2.若值为正,则进程可以使用该资源,并将信号量减1。3若信号量值为0,则进程进入休眠直至信号量值大于0,该进程被唤醒后返回步骤1当进程不再使用该信号量控制的共享资源时,该信号量加1,如果有

8、进程在休眠等待此信号量则唤醒它们信号量为正确使用信号量,对其的测试及减1操作应当是原子操作,通常在内核实现初始值为1的信号量称为双态信号量,它控制单个资源与信号量相关的数据结构为semid_d

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。