码迷,mamicode.com
首页 > 其他好文 > 详细

ipc基础

时间:2019-04-13 10:52:14      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:共享内存   定义   c基础   文件   而不是   字符   拷贝   unmap   mapped   

ipc对象持久性

  1. 进程持久性:具有这种持久性的对象在持有它的最后一个进程关闭了该对象为止
  2. 内核持久性:这种IPC对象一直存在直到内核重新自举或显示删除该对象为止
  3. 文件系统持久性:具有这种持久性的对象只有在它被显式删除时才会消失。即使内核重新自举该对象还保持(POSIX消息队列,信号量,共享内存如果是使用映射文件实现的,那么他们就是随文件系统持续的)。少有进程能不受系统重启的影响;而且使用文件系统持久性也可能会降低该IPC机制的性能

  管道或FIFO尽管是随进程持续而不是随内核持续,但是管道中的数据在内核中维护,最后一个将某个管道打开着用于读的进程关闭该管道后,内核将丢弃所有的数据并删除该管道

类型 持久性

管道

FIFO

进程持久性

进程持久性

Posix互斥锁

Posix条件变量

Posix读写锁

Fcntl记录锁

进程持久性

进程持久性

进程持久性

进程持久性

Posix消息队列

Posix命名信号量

Posix信号量

Posix共享内存

内核持久性

内核持久性

进程持久性

内核持久性

System V消息队列

System V信号量

System V共享内存

内核持久性

内核持久性

内核持久性

TCP socket

UDP socket

Unix域socket

进程持久性

进程持久性

进程持久性

命名空间

  当两个或多个无亲缘关系的进程使用某种类型的ipc对象交换彼此的信息时,ipc必须有一种某种形式的名字或标识符

消息队列,信号量,共享内存都可以是用路径名标示,这些名字即可以是文件系统的真实名字也可能不是

  1. 他必须符合已有路径规则,最多由PATH_MAX个字节构成,包括结尾的空字符
  2. 如果以斜杠开头,那么对这些函数的不同调用将访问同一个队列,如果他不以斜杠开头,那么效果取决于实现
  3. 名字中额外的斜杠符的解释由实现定义(名字必须以一个斜杠开头,并且不能在含有任何其他斜杠符,必须在根目录中有写权限)

调用fork,exec,_exit对IPC对象影响

类型 fork exec _exit
管道和FIFO 子进程获得父进程的所有打开的描述符的拷贝 除非描述符的FD_CLOSEXEC比特被置位了,否则描述符保持打开状态 所有描述符都被关闭,在描述符最后一次被关闭时,管道或FIFO中的数据会被删除
Posix消息队列 子进程获得父进程的所有打开的消息队列描述符的拷贝 所有打开的消息队列的描述符都被关闭 所有打开的消息队列的描述符都被关闭
System V消息队列 没影响 没影响 没影响
Posix互斥锁和条件变量 如果在共享内存中并且设置了进程共享属性则就被共享 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失
Posix读写锁 如果在共享内存中并且设置了进程共享属性则就被共享 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失
Posix(基于内存的)信号量 如果在共享内存中并且设置了进程共享属性则就被共享 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失 除非位于仍被打开的共享内存中并且具有进程共享属性否则就将消失
Posix命名信号量 在父进程被打开的在子进程中仍保持打开 所有被打开的都将被关闭 所有被打开的都将被关闭
System V信号量 所有的semadj的值在子进程中被设置为0 所有的semadj的值被传递给新的程序 所有的semadj的值被加到相应的信号量上
记录锁 父进程持有的锁不会被子进程所继承 只要描述保持打开,锁就不会因为exec的动作而变化 所有被进程持有的锁都会被释放
mmap共享内存 父进程的共享内存被子进程保留 共享内存被unmapped 共享内存被unmapped
Posix共享内存 父进程的共享内存被子进程保留 共享内存被unmapped 共享内存被unmapped
System V共享内存 父进程中已连接上的共享内存被子进程保留 共享内存被deattached 共享内存被deattached

ipc基础

标签:共享内存   定义   c基础   文件   而不是   字符   拷贝   unmap   mapped   

原文地址:https://www.cnblogs.com/tianzeng/p/10699843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!