本章节整理了学习DBUS之前所需的理论基础,深入理解包括Linux系统进程间通信(Inter-Processing Communication)机制、Dbus术语等内容。
1. 进程间通信(IPC)方法
本节介绍linux系统的进程通信方法,概述其区别和各自的优缺点。
| 通信机制 | 介绍 | 区别 | 优缺点 | 使用场景 | |
|---|---|---|---|---|---|
| 管道(Pipe) | 匿名管道 | 从一个进程连接到另一个进程的一个数据流称为一个“管道”,也称为共享文件。本质上是操作系统在内核中为进程创建的一块文件缓冲区,因此也只能实现半双工通信。 | 只能在具有亲缘关系的进程间通信(父子进程间通信) | 优点:简单方便 缺点: 1. 半双工单向传输; 2. 仅父子进程之间可用; 3. 只能承载无格式字节流; 4. 缓冲区大小有限制(linux系统中大小限制为65536字节)。 |
在父子进程间实现单向通信(要实现父子间的双向通信,可以建立两个匿名管道) |
| 命名管道(FIFO) | 允许在不相关的进程间通信 | 优点:无亲缘关系的进程之间可用 缺点:因长期存在系统内核中,使用不当容易出错 |
在两个非父子关系的不同进程间实现通信 | ||
| 信号(Signal) | 由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。 | 信号用于通知进程产生了某个事件 | 优点:触发某些行为,也是唯一的异步通信机制 缺点:传递信息极少 |
用户传递的信息较少;用于通知接收进程某个事件已经发生;发送信号给进程本身 | |
| 信号量(Semaphore)和PV操作 | 是一个特殊的变量,本质是计数器,信号量里面记录了临界资源的数目,进程对其访问都是原子操作(pv操作,p:占用资源,v:释放资源)。 它的作用是调协进程对共享资源的访问,让一个临界区同一时间只有一个进程在访问它(多进程同步)。 |
信号量是用来同步进程(线程)的 | 主要作为不同进程间、同一进程内不同线程间的同步手段,常与共享内存配合使用 | ||
| 消息队列(Message Queues) | 消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。 允许任意进程通过共享消息队列来实现进程间通信.并由系统调用函数来实现消息发送和接收之间的同步.从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题。 |
克服了信号承载信息量少管道只能承载无格式字节流以及缓冲区大小受限等缺点 | 优点:不再局限于父子进程,不再需要考虑同步问题,使用方便 缺点: 1. 消息队列中信息拷贝需要额外消耗CPU的时间; 2. 不适宜于信息量大或操作频繁的场合。 |
UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程,适用于传输用户自定义的数据结构。 | |
| 共享内存(Shared Memory) | 使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。 往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 |
共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息。 | 优点:无须复制速度快,信息量大 缺点: 1. 存在冲突问题,必须由各进程利用其他同步方法解决(如借助信号量); 2. 由于内存实体存在于计算机系统中,所以只能由处于同一个计算机系统中的诸进程共享,不方便网络通信。 |
与其他通信机制(如信号量)配合使用,来实现进程间的同步与通信 | |
| 套接字(Sockets) | 对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。 | 优点:跨网络在不同计算机之间的进程通信 缺点:无限循环等待 |
用于不同进程的通信,包括不同计算机之间的进程通信 | ||
在进程通信机制上存在System V和POSIX两种标准,注意两者的区别。
2. 什么是D-Bus?
2.1 简介
D-Bus是Desktop Bus的缩写,是针对桌面环境优化的IPC(InterProcess Communication)机制,用于进程间的通信或进程与内核的通信。它是为Linux系统开发的进程间通信(IPC)和远程过程调用(RPC)机制,使用统一的通信协议来代替现有的各种IPC解决方案。D-Bus允许系统级进程(如:打印机和硬件驱动服务)和普通用户进程进行通信。
D-Bus使用一个快速的二进制消息传递协议,D-Bus协议的低延迟和低消耗特点适用于同一台机器的通信。D-Bus的规范目前由freedesktop.org项目定义,可供所有团体使用。D-Bus不和低层的IPC直接竞争,比如sockets,shared memory或message queues。低层IPC有自己的特点,和D-Bus并不冲突。
与其他重量级的进程间通信技术不同,D-Bus是非事务的。D-Bus使用了状态以及连接的概念,比UDP等底层消息传输协议更“聪明”。但另一方面,D-Bus传送的是离散消息,与TCP协议将数据看做“流”有所不同。D-Bus支持点对点的消息传递以及广播/订阅式的通信。
优点:
- 低延迟:DBus一开始就是用来设计成避免来回传递和允许异步操作的。因此虽然在Application和Daemon之间是通过socket实现的,但是又去掉了socket的循环等待,保证了操作的实时高

最低0.47元/天 解锁文章
770

被折叠的 条评论
为什么被折叠?



