进程间通信管道(进程间的间接通信和管道通信有什么不同)

2025-06-28 10:30:02 0

进程间通信管道(进程间的间接通信和管道通信有什么不同)

本篇文章给大家谈谈进程间通信管道,以及进程间的间接通信和管道通信有什么不同对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

进程间的间接通信和管道通信有什么不同

我个人的理解:
管程是将所有公共资源维护起来,相当于一个仓库,所有的进程取用资源都需要在这里排队;管程有条件变量,对于访问公共资源的进程的管理更加多元化
而间接通信是只维护了需要用到的少量资源,也就是相当于一个信箱,只有和这个信箱有关联的进程才会在这里排队;间接通信只设置了等待队列,管理相对单一
总的来说,间接通信可以理解为轻量级的管程,更加单一和高效,管程则是间接通信的强化扩充版,更加普适和方便

进程间通信的管道

普通的Linux shell都允许重定向,而重定向使用的就是管道。例如:
$ ls | pr | lpr
把命令ls(列出目录中的文件)的输出通过管道连接到命令pr的标准输入上进行分页。最后,命令pr的标准输出通过管道连接到命令lpr的标准输入上,从而在缺省打印机上打印出结果。进程感觉不到这种重定向,它们和平常一样地工作。正是shell建立了进程之间的临时管道。
管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的首端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。
传统上有很多种实现管道的方法,如利用文件系统、利用套接字(sockets)、利用流等。在Linux中,使用两个file数据结构来实现管道。这两个file数据结构中的f_inode(f_dentry)指针指向同一个临时创建的VFS I节点,而该VFS I节点本身又指向内存中的一个物理页,如图5.1所示。两个file数据结构中的f_op指针指向不同的文件操作例程向量表:一个用于向管道中写,另一个用于从管道中读。这种实现方法掩盖了底层实现的差异,从进程的角度来看,读写管道的系统调用和读写普通文件的普通系统调用没什么不同。当写进程向管道中写时,字节被拷贝到了共享数据页,当读进程从管道中读时,字节被从共享页中拷贝出来。Linux必须同步对于管道的存取,必须保证管道的写和读步调一致。Linux使用锁、等待队列和信号(locks,wait queues and signals)来实现同步。
右图 --管道示意图所示
参见include/linux/inode_fs.h
当写进程向管道写的时候,它使用标准的write库函数。这些库函数(read、write等)要求传递一个文件描述符作为参数。文件描述符是该文件对应的file数据结构在进程的file数据结构数组中的索引,每一个都表示一个打开的文件,在这种情况下,是打开的管道。Linux系统调用使用描述这个管道的file数据结构中f_op所指的write例程,该write例程使用表示管道的VFS I 节点中存放的信息,来管理写请求。如果共享数据页中有足够的空间能把所有的字节都写到管道中,而且管道没有被读进程锁定,则Linux就在管道上为写进程加锁,并把字节从进程的地址空间拷贝到共享数据页。如果管道被读进程锁定或者共享数据页中没有足够的空间,则当前进程被迫睡眠,它被挂在管道I节点的等待队列中等待,而后调用调度程序,让另外一个进程运行。睡眠的写进程是可以中断的(interruptible),所以它可以接收信号。当管道中有了足够的空间可以写数据,或者当锁定解除时,写进程就会被读进程唤醒。当数据写完之后,管道的VFS I 节点上的锁定解除,在管道I节点的等待队列中等待的所有读进程都会被唤醒。
参见fs/pipe.c pipe_write()
从管道中读取数据和写数据非常相似。Linux允许进程无阻塞地读文件或管道(依赖于它们打开文件或者管道的模式),这时,如果没有数据可读或者管道被锁定,系统调用会返回一个错误。这意味着进程会继续运行。另一种方式是阻塞读,即进程在管道I节点的等待队列中等待,直到写进程完成。
如果所有的进程都完成了它们的管道操作,则管道的I节点和相应的共享数据页会被废弃。
参见fs/pipe.c pipe_read()
Linux也支持命名管道(也叫FIFO,因为管道工作在先入先出的原则下,第一个写入管道的数据也是第一个被读出的数据)。与管道不同,FIFO不是临时的对象,它们是文件系统中真正的实体,可以用mkfifo命令创建。只要有合适的访问权限,进程就可以使用FIFO。FIFO的打开方式和管道稍微不同。一个管道(它的两个file数据结构、VFS I节点和共享数据页)是一次性创建的,而FIFO已经存在,可以由它的用户打开和关闭。Linux必须处理在写进程打开FIFO之前读进程对它的打开,也必须处理在写进程写数据之前读进程对管道的读。除此以外,FIFO几乎和管道的处理完全一样,而且它们使用一样的数据结构和操作。
从IPC的角度看,管道提供了从一个进程向另一个进程传输数据的有效方法。但是,管道有一些固有的局限性:
因为读数据的同时也将数据从管道移去,因此,管道不能用来对多个接收者广播数据。
管道中的数据被当作字节流,因此无法识别信息的边界。
如果一个管道有多个读进程,那么写进程不能发送数据到指定的读进程。同样,如果有多个写进程,那么没有办法判断是它们中那一个发送的数据。

以上就是我们为大家找到的有关“进程间通信管道(进程间的间接通信和管道通信有什么不同)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

进程间通信管道(进程间的间接通信和管道通信有什么不同)

本文编辑:admin

更多文章:


计算机二级c语言考试技巧(计算机二级c语言怎么过)

计算机二级c语言考试技巧(计算机二级c语言怎么过)

各位老铁们,大家好,今天由我来为大家分享计算机二级c语言考试技巧,以及计算机二级c语言怎么过的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录计算机二

2025年12月28日 08:45

数据库课程设计怎么设计(数据库人事管理系统课程设计怎么做)

数据库课程设计怎么设计(数据库人事管理系统课程设计怎么做)

大家好,今天小编来为大家解答以下的问题,关于数据库课程设计怎么设计,数据库人事管理系统课程设计怎么做这个很多人还不知道,现在让我们一起来看看吧!本文目录数据库人事管理系统课程设计怎么做数据库设计的基本步骤是什么课程设计仓库管理系统的数据库制

2025年10月2日 23:45

webservice接口集成平台(webservice接口老不老)

webservice接口集成平台(webservice接口老不老)

大家好,如果您还对webservice接口集成平台不太了解,没有关系,今天就由本站为大家分享webservice接口集成平台的知识,包括webservice接口老不老的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录

2025年11月21日 12:15

square app(iphone的语音系统名称是什么)

square app(iphone的语音系统名称是什么)

大家好,如果您还对square app不太了解,没有关系,今天就由本站为大家分享square app的知识,包括iphone的语音系统名称是什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录iphone的语音系统

2025年12月26日 00:15

怎么做linux系统盘(如何制作启动u盘安装linux系统)

怎么做linux系统盘(如何制作启动u盘安装linux系统)

其实怎么做linux系统盘的问题并不复杂,但是又很多的朋友都不太了解如何制作启动u盘安装linux系统,因此呢,今天小编就来为大家分享怎么做linux系统盘的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录如何制作

2026年4月20日 22:15

determine词组(I am determined to stay here.这句话结构是主系表还是主谓宾宾determined 是形容词吗请具体说明一下)

determine词组(I am determined to stay here.这句话结构是主系表还是主谓宾宾determined 是形容词吗请具体说明一下)

各位老铁们好,相信很多人对determine词组都不是特别的了解,因此呢,今天就来为大家分享下关于determine词组以及I am determined to stay here.这句话结构是主系表还是主谓宾宾determined 是形容

2025年12月10日 14:00

resume个人简历(留学个人简历resume的主要内容介绍)

resume个人简历(留学个人简历resume的主要内容介绍)

这篇文章给大家聊聊关于resume个人简历,以及留学个人简历resume的主要内容介绍对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录留学个人简历resume的主要内容介绍简历(Resume)的写作格式及主要内容英国留学个人简

2025年12月4日 21:00

transformers卡牌游戏(收藏战斗两不误变形金刚前线稀有卡牌全攻略)

transformers卡牌游戏(收藏战斗两不误变形金刚前线稀有卡牌全攻略)

本篇文章给大家谈谈transformers卡牌游戏,以及收藏战斗两不误变形金刚前线稀有卡牌全攻略对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录收藏战斗两不误变形金刚前线稀有卡牌全攻略变形金刚前线怎么玩《变形金刚:百炼为战》传

2026年7月22日 21:15

命令提示符无法打开mysql(mysql命令行输入命令回车后没反应怎么回事具体如图)

命令提示符无法打开mysql(mysql命令行输入命令回车后没反应怎么回事具体如图)

“命令提示符无法打开mysql”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看命令提示符无法打开mysql(mysql命令行输入命令回车后没反应怎么回事具体如图)!本文目录mysql命令行输入命令回车后没反应怎么回事具体如图

2025年7月8日 13:30

怎么在字符数组后加字符串((C语言)如何将char**作为字符串数组,并且动态地添加字符串到其中)

怎么在字符数组后加字符串((C语言)如何将char**作为字符串数组,并且动态地添加字符串到其中)

大家好,今天小编来为大家解答以下的问题,关于怎么在字符数组后加字符串,(C语言)如何将char**作为字符串数组,并且动态地添加字符串到其中这个很多人还不知道,现在让我们一起来看看吧!本文目录(C语言)如何将char**作为字符串数组,并且

2026年7月6日 11:30

chinesechildren是什么意思(Chinese+children是几个单词)

chinesechildren是什么意思(Chinese+children是几个单词)

本篇文章给大家谈谈chinesechildren是什么意思,以及Chinese+children是几个单词对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录Chinese+children是几个单词we’llmeetthechi

2025年12月17日 01:00

python版本(下载Python后发现还是之前的版本怎么办)

python版本(下载Python后发现还是之前的版本怎么办)

大家好,如果您还对python版本不太了解,没有关系,今天就由本站为大家分享python版本的知识,包括下载Python后发现还是之前的版本怎么办的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录下载Python后发

2025年11月29日 22:45

unix和windows的关系(WINDOWS与UNIX的联系)

unix和windows的关系(WINDOWS与UNIX的联系)

“unix和windows的关系”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看unix和windows的关系(WINDOWS与UNIX的联系)!本文目录WINDOWS与UNIX的联系linux和Unix 还有windows

2025年11月19日 16:45

tree中文(tree中文翻译)

tree中文(tree中文翻译)

各位老铁们好,相信很多人对tree中文都不是特别的了解,因此呢,今天就来为大家分享下关于tree中文以及tree中文翻译的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录tree中文翻译tree的中文是什么意思up

2026年5月24日 13:45

网页设计表格代码(网页三行三列表格的代码)

网页设计表格代码(网页三行三列表格的代码)

大家好,关于网页设计表格代码很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于网页三行三列表格的代码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录网页三

2025年7月15日 01:45

powermill五轴编程(powermill编程软件!谁能详细介绍一下它的主要功能啊!还有它可以绘图么编程中要用到边界线等等…怎)

powermill五轴编程(powermill编程软件!谁能详细介绍一下它的主要功能啊!还有它可以绘图么编程中要用到边界线等等…怎)

本篇文章给大家谈谈powermill五轴编程,以及powermill编程软件!谁能详细介绍一下它的主要功能啊!还有它可以绘图么编程中要用到边界线等等…怎对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各

2026年8月11日 07:15

作用的近义词?说明方法有那些 其作用都是什么

作用的近义词?说明方法有那些 其作用都是什么

本篇文章给大家谈谈作用,以及作用的近义词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录作用的近义词说明方法有那些 其作用都是什么Linux

2026年2月12日 11:00

initiate形容词副词(open的形容词是什么)

initiate形容词副词(open的形容词是什么)

大家好,initiate形容词副词相信很多的网友都不是很明白,包括open的形容词是什么也是一样,不过没有关系,接下来就来为大家分享关于initiate形容词副词和open的形容词是什么的一些知识点,大家可以关注收藏,免得下次来找不到哦,下

2026年3月22日 04:15

substantial变形单词(哪些英语单词可以表达 “重要的” 以及它们的区别)

substantial变形单词(哪些英语单词可以表达 “重要的” 以及它们的区别)

这篇文章给大家聊聊关于substantial变形单词,以及哪些英语单词可以表达 “重要的” 以及它们的区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录哪些英语单词可以表达 “重要的” 以及它们的区别高中英语选择性必修二单词

2026年1月13日 17:00

dam在口语中的意思(dam是什么意思)

dam在口语中的意思(dam是什么意思)

各位老铁们好,相信很多人对dam在口语中的意思都不是特别的了解,因此呢,今天就来为大家分享下关于dam在口语中的意思以及dam是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录dam是什么意思荷兰地名 d

2026年1月22日 00:00

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索