- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析Linux进程通信几种方式及其比较
浅析Linux进程通信几种方式及其比较
摘要:本文通过对Linux下几种主要通信方式进行概述,并结合Linux系统的系统调用对OS中的实现进行简要概述,并对其优缺点进行分析,阐述了在不同通信情况下应该选择何种通信方式进行选择。
关键词:Linux;通讯方式
中图分类号:TP39 文献标识码:A
1.进程通信的基本概念
进程间通信(IPC)指的是至少两个进程间传送数据或者信号的一些技术和方法,进程是计算机系统分配资源的基本单位,每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程之间的通信。
2.进程通信的分类
操作系统中进程间传递的信息量有多有少,因此根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型,一种类型主要用于传递进程之间同步、互斥、终止、挂起等控制信息的传递,由于进程互斥与同步交换的信息量较少,并且每次通信传递的信息量固定且效率较低,因此称这两种通信方式为低级通信方式,主要方式有信号量。另一种类型在进程间以较高的效率传送大量数据,被称为高级通信方式,主要方式有管道,共享内存和消息队列。下面对这四种通信方式进行简单的论述。
3.信号量
信号量也叫信号灯,是一个确定的二元组(S,Q),其中S是个具有非负初置的整形变量,表示的是临界资源的实体。信号量的值有以下两种情况:
1)代表可用资源的数量,此时Q 的队列为空。
2)代表由于等待此种资源而被阻塞的进程的数量,也就是Q队列中进程的个数。
信号量的值仅能由P、V操作进行改变,其中p操作和v操作是不可中断的程序段,称为原语操作,它是典型的同步机制之一。每执行一次P操作表示分配一个该类资源给执行P操作的进程,因此P操作将信号量的值减1,当信号量的值小于0时,表示已经没有这类资源可供分配了,所以请求资源的进程将被阻塞而被插入到Q的等待队列当中。此时,信号量的绝对值等于Q队列中进程的个数,即等待分配该类资源的进程数。执行一次V操作意味着进程释放出一个该类可用资源,因而V操作是将信号量的值加1。因信号??的值小于等于0表示在该信号量的等待队列中有请求该类型而被阻塞的进程,因而应把该信号量等待队中的队首的进程唤醒,即进程的状态由阻塞状态变为活动就绪状态。
信号量的创建:Linux系统中使用semget(key,nSemes,flag)来创建一个信号量,key是标识信号量的关键字,nSemes表示创建信号量的个数,flag表示为信号量存取权标志与建立标志。
信号量的操作:Linux系统中采用semop(semid,sops,nsops)来实现对信号量的操作,semid为关键字值,由semget返回得来,第二个参数是指向将要操作的数组的指针,nsops为数组sops的大小。
4.管道通信方式
管道是Linux支持的最初Unix IPC形式之一,当两个进程利用管道进行通信时,发送信息的进程称为写进程,接收信息的进程称为读进程。管道通信方式的中间介质就是文件,通常称这种文件为管道文件.它就像管道一样将一个写进程和一个读进程连接在一起,实现两个进程之间的通信。写进程通过写入端(发送端)往管道文件中写入信息,读进程通过读出端(接收端)从管道文件中读取信息。管道具有如下特点:
1)管道是半双工的,数据只能向一个方向流动,数据只能由写的一方向读得一方流动。
2)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,成为管道文件,但它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
3)数据的读出和写入:管道建立时,通信两端的任务都是被固定了的,也就是说,一端只能用于读,而另一端只能用于写,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
5.消息队列
消息队列的基本思想是:系统管理一组消息缓冲区,并称之为消息缓冲池,其中每个消息缓冲区存放一条消息。消息实际上就是一组信息。当一个进程要发送消息时,首先向系统申请一个消息缓冲区,写入消息后将其连接到接受进程PCB所指示的消息队列。接受进程在适当的时候从其消息队列中取得消息,并立即释放该消息缓冲区,交回给系统管理。
消息队列就是一个消息的链表。就是把消息看作一个记录,并且这个记录具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读出消息。
Linux采用消息队列的方式来实现消息传递。这种消息的发送方式是:发送方不必等待接收方检查它所收到的消息就可以继续工作下去,而接收方如果没有收到消息也不需等待。这种通信机
文档评论(0)