导航:首页 > 编程系统 > linux进程通信机制

linux进程通信机制

发布时间:2022-01-20 21:27:05

1. linux系统的进程间通信有哪几种方式

一、方式

1、管道(Pipe)及有名管道( mkpipe):

管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

2、信号(Signal):

信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。

linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction。

实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数。

3、消息队列(Message):

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

4、共享内存:

使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

5、信号量(semaphore):

主要作为进程间以及同一进程不同线程之间的同步手段。

6、套接口(Socket):

更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

二、概念

进程间通信概念:

IPC—-InterProcess Communication

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到所以进程之间要交换数据必须通过内核。

在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。

(1)linux进程通信机制扩展阅读

1)无名管道:

管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。

管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,构成两进程间通信的一个媒介。

数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

2)有名管道:

不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间)。

因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。



2. 简述Linux进程间通信的几种方式

进程间通讯进程间通信就是不同进程之间传播或交换信息,进程的用户空间是互相独立的,进程之间可以利用系统空间交换信息。
管道(pipe)管道是一种半双工的通信方式,数据只能单向流动。如果要进行双工通信,需要建立两个管道。
管道只能在具有亲缘关系的进程间使用,例如父子进程或兄弟进程。
有名管道(named
pipe)
有名管道也是双半工的通信方式,但它允许无亲缘关系的进程间使用。
信号量(semophore)
信号量常用来作为一种锁机制来使用,它是一个记数器,用来控制多进程对共享资源的访问,防止多个进程同时访问一个共享资源。信号量主要用作为进程间或同一进程间不同线程之间的同步手段。
信号(sinal)
信号是一种比较复杂的通信方式,用于通知接收进程某些事件已经发生,要注意信号处理中调用的函数是否为信号安全。
消息队列(message
queue)
消息队列是由消息的链表组成,存放在内核中并由消息队列标识符标识。
共享内存(shared
memory)
共享内存就是映射一段被其他进程所访问的内存,这段共享内存由一个进程创建,可由多个进程访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式的低运行效率而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
套接字(socket)
套接字也是进程间通信的一种方式,与其他方式不同的是,它可以用在不同主机间的进程通信(也是它的主要用途)。
几种方式的缺点
管道:
速度慢,容量有限,只能用于亲缘关系进程间通信。
有名管道:
同管道,不过允许无亲缘关系进程间通信。
消息队列:
容量受系统限制,队列中会遗留数据,读时要考虑到这些未读完的数据。
信号量:
主要用于同步,无法传递复杂的数据信息。

3. Linux的几种进程间通信方法简介

管道(pipe) 管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等。 (一)无名管道,它具有几个特点: 1) 管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道; 2) 无名管道使用pipe()函数创建,只能用于父子进程或者兄弟进程之间; 3) 管道对于通信的两端进程而言,实质上是一种独立的文件,只存在于内存中; 4) 数据的读写操作:一个进程向管道中写数据,所写的数据添加在管道缓冲区的尾部;另一个进程在管道中缓冲区的头部读数据。 (二)有名管道 有名管道也是半双工的,不过它允许没有亲缘关系的进程间进行通信。具体点说就是,有名管道提供了一个路径名与之进行关联,以FIFO(先进先出)的形式存在于文件系统中。这样即使是不相干的进程也可以通过FIFO相互通信,只要他们能访问已经提供的路径。 值得注意的是,只有在管道有读端时,往管道中写数据才有意义。否则,向管道写数据的进程会接收到内核发出来的SIGPIPE信号;应用程序可以自定义该信号处理函数,或者直接忽略该信号。 二。信号量(semophore) 信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s)) 三。信号(Signal) 信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制-进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。 内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+\等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。 四。消息队列(Message Queue) 消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。 消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。 五。共享内存(shared memory) 共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。 五。套接字(socket) socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。

4. Linux进程间通信

进程间通信支持进程之间的通信,Linux支持进程间的多种通信机制,包含信号量、共享内存、消息
队列、管道、UNIX域套接字等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传
递。在实际的Linux应用中,人们更多地趋向于使用UNIX域套接字,而不是System V IPC中的消息队列等
机制。Android内核则新增了Binder进程间通信方式。
Linux内核5个组成部分之间的依赖关系如下。
·进程调度与内存管理之间的关系:这两个子系统互相依赖。在多程序环境下,程序要运行,则必须
为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。
·进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机
制允许两个进程除了拥有自己的私有空间之外,还可以存取共同的内存区域。
·虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也
利用内存管理支持RAMDISK设备。
·内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程定期由调度
程序调度,这也是内存管理依赖于进程调度的原因。当一个进程存取的内存映射被换出时,内存管理向虚
拟文件系统发出请求,同时,挂起当前正在运行的进程。
除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都
用到的API,如分配和释放内存空间的函数、输出警告或错误消息的函数及系统提供的调试接口等。

阅读全文

与linux进程通信机制相关的资料

热点内容
大数据社会调研报告 浏览:172
数据中的属性有哪些类型 浏览:176
苹果6手机支付宝加密 浏览:480
大数据的内涵以下理解 浏览:92
word2007组合 浏览:643
定向士官在什么网站报志愿填报 浏览:332
hyp是什么文件格式 浏览:720
编程哪里学靠谱 浏览:224
vfp数据库文件是哪个 浏览:694
移动数据已停用怎么解决 浏览:541
小米2s升级miui7耗电 浏览:837
文件资源管理器最近使用文件找不到 浏览:539
sublimetext文件名乱码 浏览:792
安徽宝德网络技术 浏览:44
计算机编程编码怎么回事 浏览:802
订阅号的文件在哪里找 浏览:850
dw图片左右切换代码 浏览:943
ppt文件磁盘损坏怎么修复工具 浏览:632
服务器备份和恢复出厂设置密码 浏览:837
win10处于通知模式如何激活 浏览:162

友情链接