
Linux 内部通信
文章平均质量分 55
# 进程与进程;用户与内核;内核模块与模块;之间的通信
Aitel@
三尺微命,一介书生。
展开
-
进程间通信的发布订阅模型注意事项
1. 进程间通信,根据通信数据量的多少,选择通信方式。2. 在数据量比较大的情况下,首选socket通信。3. 进程模块的业务都是异步的,发布订阅模型相对比较方便。4. 加入进程A为发布端,进程B为订阅端。5. B进程关心A进程中的某些数据,所以A进程数据变化的时候,需要主动告知到B进程。6. 而A进程中的所有数据,B进程未必全部关心,可能B进程只关注A进程的某部分数据,所以需要B进程先向A进程订阅 所关注的数据项 和 B进程标识(统一规定)。7. 进程模块的业务都是异步的,所.原创 2022-02-18 15:48:22 · 552 阅读 · 0 评论 -
Linux内核模块通信 之 头文件声明
此方法仅涉及到共享内核全局变量内核中本身就存在全局变量,如 jiffies。在内核头文件夹中 include/linux/ 新建这个头文件 xxx.h。将你向共享的变量的声明放在这个地方。原创 2021-12-19 16:37:20 · 321 阅读 · 0 评论 -
Linux下进程间通信的八种方法
无名管道(pipe) 命名管道(FIFO) 内存映射(mapped memeory), 消息队列(message queue) 共享内存(shared memory) 信号量(semaphore) 信号(signal), 套接字(Socket)=========================================================================(1) 无名管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2) 命名管原创 2021-12-14 17:16:27 · 11168 阅读 · 0 评论 -
Linux下进程间通信 之 管道
管道分为 “无名管道(pipe)” 和 “命名管道(fifo)” 无名管道实际是用于进程间通信的一段共享内存,创建无名管道的进程称为“管道服务器”,连接到无名管道的进程为“管道客户机”。一个进程在向无名管道写入数据后,另一进程就可以从无名管道的另一端将其读取出来。无名管道的特点:1、半双工,数据只能向一个方向流动;需要双方通信时,需要建立起两个无名管道。2、 只能用于父子进程或者兄弟进程之间( 具有亲缘关系的进程): 比如fork或exec...转载 2021-12-18 14:36:17 · 152 阅读 · 0 评论 -
Linux下进程间通信 之 信号
关于使用系统定义的信号进行通信的,可以看这篇转载的博文:Linux进程间通信——使用信号_ljianhui的专栏-优快云博客_linux信号通信系统为我们提供了2个已经定义的用户可以使用的信号 SIGUSR1 和 SIGUSR2,一般利用这2个信号已经能满足需要。但很多项目中这两个信号完全不够,因此需要一些自定义的信号来满足需求。先说结论:man 7 signal页面说到可以用 SIGRTMIN 作为自定义信号。所以一般自定义使用 SIGRTMIN 和SIGRTMAX 之间的信号值。.原创 2021-12-17 15:25:03 · 1665 阅读 · 0 评论 -
Linux下进程间通信 之 信号量
信号量是一种计数器,用于控制对多个进程共享的资源进行的访问。它们常常被用作一个锁机制,在某个进程正在对特定的资源进行操作时,信号量可以防止另一个进程去访问它。信号量是特殊的变量,它只取正整数值并且只允许对这个值进行两种操作:等待(wait)和 信号(signal)。即:(P、V操作,P用于等待,V用于信号)p(sv):如果sv的值大于0,就给它减1;如果它的值等于0,就挂起该进程的执行V(sv):如果有其他进程因等待sv而被挂起,就让...转载 2021-12-18 16:11:52 · 234 阅读 · 0 评论 -
Linux下进程间通信 之 消息队列
消息队列是内核地址空间中的内部链表,通过linux内核在各个进程直接传递内容,消息顺序地发送到消息队列中,并以几种不同的方式从队列中获得,每个消息队列可以用 IPC标识符 唯一地进行识别。内核中的消息队列是通过IPC的标识符来区别,不同的消息队列直接是相互独立的。每个消息队列中的消息,又构成一个 独立的链表。消息队列克服了信号承载信息量少,管道只能承载无格式字符流。(1)消息缓冲区结构:// 头文件#include <sys/types....原创 2021-12-18 14:50:04 · 757 阅读 · 0 评论 -
Linux下进程间通信 之 共享内存
一、共享内存的概念共享内存是在两个或多个正在运行的进程之间共享内存区域的一种进程间的通信方式(就是允许两个或多个不相关的进程访问同一个逻辑内存)。是 IPC中最快捷的通信方式,因为共享内存方式的通信没有中间过程,而管道、消息队列等方式则是需要将数据通过中间机制进行转换。共享内存方式是直接将某段“物理内存”段进行映射,多个进程间共享的内存是同一块的物理空间,各进程只是映射这段物理内存地址到自己的地址空间而已,因此不需要进行复制,可以直接使用此段空间。就好...原创 2021-12-15 09:08:04 · 3876 阅读 · 0 评论 -
Linux下进程间通信 之 共享内存同步方法(互斥锁,信号量 和 信号)
先说结论:使用的还是,“互斥锁”,“信号量” 和 “信号” 进行同步。=========================================================================以下为转载部分:linux实现共享内存同步的四种方法_sunxiaopengsun的专栏-优快云博客_共享内存同步机制———————————————————————————————————————————同步(synchronization)指的是多个任务(线程...原创 2021-12-15 10:34:18 · 9985 阅读 · 0 评论 -
Linux下进程间通信 之 内存映射
Linux下进程间通信 之 内存映射原创 2021-12-18 16:15:34 · 140 阅读 · 0 评论 -
Linux下进程间通信 之 套接字
Linux下进程间通信 之 套接字原创 2021-12-18 16:16:48 · 255 阅读 · 0 评论 -
linux进程间通信(IPC)机制总结
转载:linux基础——linux进程间通信(IPC)机制总结_千里之行,始于足下-优快云博客_linux 进程间通信转载 2021-12-18 17:37:22 · 189 阅读 · 0 评论 -
Linux用户空间与内核空间交互的几种方式
对于进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有私有)。不管是内核空间还是用户空间,它们都处于虚拟地址空间。内核空间和用户空间交换数据的方式有很多。用户空间发起的有系统调用、proc、虚拟文件系统等。内核空间主动发起的有get_user/put_user、信号、netlink等。 Linux应用程序与内核程序交互主要有以下几种通信方式:(1)系统调用 Linux系统下,设备即文件,也因此大部分设备驱动...原创 2021-12-14 11:56:27 · 6964 阅读 · 1 评论 -
Linux用户空间与内核空间交互的几种方式 之:内核空间映射到用户空间
一:简介 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷...转载 2021-12-17 15:41:32 · 1794 阅读 · 0 评论 -
Linux内核空间与用户空间数据交互 之 relay介绍
relay是一种从Linux内核到用户空间的高效数据传输技术。通过用户定义的relay通道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。relay特别适用于内核空间有大量数据需要传输到用户空间的情形,目前已经广泛应用在内核调试工具如SystemTap中。relay要解决的问题对于大量数据需要在内核中缓存并传输到用户空间需求,很多传统的方法都已到达了极限,例如内核程序员很熟悉的printk()调用。此外,如果不同的内核子都开发自己的缓存和传...转载 2021-12-19 15:52:33 · 825 阅读 · 0 评论 -
Linux内核模块通信 之 符号导出
先说结论:linux内核模块间通信可以使用符号导出函数EXPORT_SYMBOL() EXPORT_SYMBOL( ) 标签内定义函数对全部内核代码公开,不用修改内核代码就可以在其他内核模块中直接调用。 EXPORT_SYMBOL_GPL( ) 和前面一个类似,但这个范围只适合GPL许可的模块进行调用。函数标签内定义函数对内核全部代码公开,不用修改内核代码就可以在另外一个内核模块中直接调用。 如何使用? 假设模块B要调用模块A中的函数: ...原创 2021-12-19 16:20:46 · 687 阅读 · 0 评论