第15章 进程间通行 15.6 XSI IPC 15.7 消息队列

15.6 XSI IPC

(1)3种称作XSI IPC的IPC是:

1)消息队列

2)信号量

3)共享存储器

(2)标识符和键

1)标识符:是一个非负整数,用于引用IPC结构。是IPC对象的内部名。

2)键:IPC对象的外部名。可使多个合作进程能够在同一IPC对象上汇聚。

(3)IPC_PRIVATE键:

用于创建一个新的IPC结构。不能指定此键来引用一个现有的IPC结构。

(4)ftok函数:

由一个路径名和项目ID产生一个键。

(5)ipc_perm结构体

规定了ipc结构的权限和所有者。

(6)结构限制:

XSI IPC结构都有内置限制,可通过重新配置内核来改变。

1)sysctl命令:观察、修改内核配置参数。

2)ipcs -l:显示ipc相关限制。

(7)IPC结构和管道、FIFO的区别:

IPC结构在系统范围内起作用,且没有引用计数。

(8)IPC结构在文件系统中没有名字;IPC不使用文件描述符。



15.7 消息队列

(1)新的应用程序中不要使用消息队列。它们有缺点。(15.6.4)

(2)客户进程和服务器进程之间的双向数据流,可以使用消息队列或全双工管道。



15.8 信号量

(1)多个进程间共享一个资源,可以使用信号量、记录锁和互斥量中的一种来协调。

(2)共享存储中的互斥量速度最快,但作者依然喜欢使用记录锁的两个原因:

1)<459>

2)<459>



15.9 共享存储

(1)共享存储的作用:

允许两个或多个进程共享一个给定的存储区。

它是最快的一种IPC,因为数据不需要在客户进程和服务器进程之间复制。

(2)使用共享存储时要掌握的唯一诀窍:

同步:写完再读取。(信号量、记录锁和互斥量)

时间: 2024-10-03 14:03:43

第15章 进程间通行 15.6 XSI IPC 15.7 消息队列的相关文章

第15章 进程间通行 15.5 FIFO

(1)什么是命名管道,未命名管道? 未命名管道:只能在两个相关的进程之间使用,而且这两个相关的进程还要有一个共同的创建了它们的主先进程. 命名管道:FIFO,不相关的进程也能交换数据. (2)FIFO是一种文件类型. 创建FIFO类似于创建文件,且FIFO的路径名存在与文件系统中. (3) 函数mkfifo,mkfifoat创建FIFO,用open打开它(O_NONBLOCK非阻塞标志的影响). 应用程序可以用mknod和mknodat函数创建FIFO. (4)FIFO有两种用途. 1)复制一系

Linux/UNIX之进程间的通信(2)

进程间的通信(2) 有三种IPC我们称为XSI IPC,即消息队列.信号量以及共享存储器,它们之间有很多相似之处. 标识符和键 每个内核的IPC结构(消息队列.信号量或共享存储段)都用一个非负整数的标识符加以引用.例如,为了对一个消息队列发送或取消息,只需要知道其队列标识符.与文件描述符不同,IPC标识符不是小的整数.当一个IPC结构被创建,以后被删除时,与这种结果相关的标识符连续加1,知道达到一个整型数的最大值,然后又回到0. 标识符是IPC对象的内部名.为使多个合作进程能够在同一IPC对象上

Linux进程间的通信

一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): D. 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 匿名管道的创建:该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义;因此,一

Perl进程间数据共享

本文介绍的Perl进程间数据共享内容主体来自于<Pro Perl>的第21章. IPC简介 通过fork创建多个子进程时,进程间的数据共享是个大问题,要么建立一个进程间通信的通道,要么找到一个两进程都引用的共享变量.本文将介绍Unix IPC的近亲System V IPC:message queues(消息队列).semaphores(信号量)和shared memory-segments(共享内存段).它们都是IPC结构,它们被非常广泛地应用于进程间通信.它们的帮助文档可参见: $ perl

进程间的通信方式

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系.# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信.# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手段.# 消息队列( m

进程间的通信方式与区别

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件.除此以外,那就是双方都可以访问的外设了.在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息.广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”.因为那些通信手段的效率太低了,而人们对

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

 IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对的IPC的持续性(Persistence of IPC Object)也有三种: 随进程持续的(Process-Persistent IPC) IPC对象一直存在,直到最后拥有他的进程被关闭为止,典型的IPC有pipes(管道)和FIFOs(先进先出对象) 随内核持续的(Kernel-persist

进程间的几种通信方式

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

【IPC进程间通讯之一】邮槽MailSlot

IPC进程间通信+邮槽MailSlot         IPC(Inter-Process Communication,进程间通信).        现代计算机采用虚拟内存机制,为进程提供独立的足够大的地址空间,处于安全目的,一个进程不具有特殊的权限,是无法访问另一个进程的内存空间,进程间相互隔绝.进程间通信IPC就需要特别的机制来实现,邮槽MailSlot是常用的IPC方法之一.                 1.邮槽(MailSlot):                 邮槽MailSlo