IPC对象的持续性

转载:http://book.51cto.com/art/201006/207275.htm

《UNIX网络编程:第2版.第2卷,进程间通信》本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、共享内存及远程调用(RPC)。书中包含了大量经过优化的源代码,帮助读者加深理解。这些源代码可以从图灵网站本书网页免费注册下载。 本节为大家介绍IPC对象的持续性。

1.3 IPC对象的持续性

我们可以把任意类型的IPC的持续性(persistence)定义成该类型的一个对象一直存在多长时间。图1-2展示了三种类型的持续性。

 
图1-2 IPC对象的持续性

(1) 随进程持续的(process-persistent)IPC对象一直存在到打开着该对象的最后一个进程关闭该对象为止。例如管道和FIFO就是这种对象。

(2) 随内核持续的(kernel-persistent)IPC对象一直存在到内核重新自举或显式删除该对象为止。例如System V的消息队列、信号量和共享内存区就是此类对象。Posix的消息队列、信号量和共享内存区必须至少是随内核持续的,但也可以是随文件系统持续的,具体取决于实现。

(3) 随文件系统持续的(filesystem-persistent)IPC对象一直存在到显式删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列、信号量和共享内存区如果是使用映射文件实现的(不是必需条件),那么它们就是随文件系统持续的。

在定义一个IPC对象的持续性时我们必须小心,因为它并不总是像看起来的那样。例如管道内的数据是在内核中维护的,但管道具备的是随进程的持续性而不是随内核的持续性:最后一个将某个管道打开着用于读的进程关闭该管道后,内核将丢弃所有的数据并删除该管道。类似地,尽管FIFO在文件系统中有名字,它们也只是具备随进程的持续性,因为最后一个将某个FIFO打开着的进程关闭该FIFO后,FIFO中的数据都被丢弃。

图1-3汇总了将在本书中讲述的各种类型IPC对象的持续性。

 
图1-3 各种类型IPC对象的持续性

注意该列表中没有任何类型的IPC具备随文件系统的持续性,但是我们说过有三种类型的Posix IPC可能会具备该持续性,这取决于它们的实现。显然,向一个文件写入数据提供了随文件系统的持续性,但这通常不作为一种IPC形式使用。多数形式的IPC并没有在系统重新自举后继续存在的打算,因为进程不可能跨越重新自举继续存活。对于一种给定形式的IPC,要求它具备随文件系统的持续性可能会使其性能降级,而IPC的一个基本的设计目标是高性能。

时间: 2024-07-29 12:56:35

IPC对象的持续性的相关文章

【UNIX】什么是IPC对象以及共享内存

sys V 的IPC 对象:对于内核中创建的文件对象,就是文件标识符(它引用了文件对象的全部信息)在进程中文件描述符一般使用当前最小可用值. 对于IPC标识符返回的是索引的整数值,它是全局变量的流水号,在系统中唯一分配的,若果在创建的IPC对象没有关闭,他会全局存在,只有在系统关闭的时候才关闭,这样会造成内存空间的资源被占用. 为了进程之间交换信息,内核专门留了一块内存空间,由进程映射到各自进程私有空间. [共享内存的实现]: 1)创建/打开共享内存,这里的创建/打开和文件的创建/打开差不多,只

进程间通信---IPC对象 之 消息队列

IPC对象,既我们所说的进程间通信,下面就来总结一下都有哪些方式以及怎么使用. 一 消息队列 1 消息队列的创建: int msgget(key_t key, int msgflg); 功能:获取指定的key值的消息队列ID 参数: @key <1>IPC_PRIVATE:每次都会创建一个新的消息队列 [用在亲缘关系的进程间痛惜] <2>ftok函数获的key [用在非亲缘关系进程间通信] key_t ftok(const char *pathname, int proj_id);

进程间同步---system v ipc 对象信号灯集

一.信号灯简介 Linux支持System V的信号灯(semaphore),是一种进程间通信的方式,只不过它和管道.FIFO或者共享内存不一样,信号灯主要用于同步或者互斥对共享资源的访问,它的发明来源于火车运行系统中的"信号灯",利用信号灯可以实现"PV"操作这种进程间同步进制.P操作时获得资源,将信号灯的值减1,如果结果不为负则执行完毕,进程获得资源,否则进程睡眠以等待的进程释放;V操作则是释放资源,给信号灯的值加1, 唤醒一个因执行P操作而等待的进程. 二.信

Linux系统编程——进程间通信(System V IPC 对象)

基本查看命令 ipcs  -m查看共享内存        ipcs -s查看信号量        ipcs -q查看消息队列 ipcrm  -m  id 删除共享内存   -M+key值 ipcrm  -s  id 删除信号量 ipcrm  -q  id 删除消息队列 (1)共享内存.为了在多个进程间进行信息交换,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间.共享内存允许两个或者更多进程共享一给定的存储区,是一种效率最高的进程间通信方式,因为数据不需要再服务端和客户

Linux IPC实践(1) -- 概述

进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源, 而在进程中涉及到互斥资源的程序段叫临界区. Linux IPC发展 Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的.而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克

Linux环境编制之IPC进程间通信(一):IPC概述

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

Unix IPC之Posix消息队列(1)

部分参考:http://www.cnblogs.com/Anker/archive/2013/01/04/2843832.html IPC对象的持续性:http://book.51cto.com/art/201006/207275.htm 消息队列可以认为是一个消息链表,某个进程往一个消息队列中写入消息之前,不需要另外某个进程在该队列上等待消息的达到,这一点与管道和FIFO相反.Posix消息队列与System V消息队列的区别如下: 1. 对Posix消息队列的读总是返回最高优先级的最早消息,

IPC:进程间通信

IPC:interprocesscommunication 进程间通信. ipc对象的持续性: 随进程持续:管道.互斥锁.条件变量.读写锁.fcntl记录上锁.套接字.posix基于内存的信号量 随内核持续:消息队列.信号量(posix有名信号量和system v信号量).共享内存 在CS架构中,迭代服务器可能出现拒绝服务型攻击(DoS),所以要注意可能在哪里阻塞和阻塞多久. 解决DoS攻击的方法: 1.在迭代服务器中的阻塞设置超时时间. 2.使用并行服务器. 生产者消费者问题最好的解决方法就是

Linux进程间通信(IPC)简介

Linux IPC的发展 Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的.而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同.前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",其通信进程主要局限在单个计算机内:而BSD则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.而Linux则把两者的优势都继承