进程间通信
arvin_xiaoting
岁月静好~
展开
-
#Linux#进程间通信# System V标准&POSIX标准
在linux系统中进行进程间通信时,会发现例如共享内存,信号量,消息队列等进程之间共享方式时,经常会发现有System v以及POXIS两种类型分别提供了自己的解决方案。POSIXPOSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实...原创 2020-01-03 14:33:09 · 15552 阅读 · 0 评论 -
#Linux#进程间通信# fork
复刻(英语:fork,又译作派生、分支)是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进...原创 2019-12-30 15:56:31 · 15136 阅读 · 0 评论 -
#Linux#进程间通信# 套接字(socket)
套接字(socket)是一种通信机制,凭借这种机制,客户/服务器 (即要进行通信的进程)系统的开发工作既可以在本地单机上进行, 也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网 络连接计算机上的进程进行通信。也因为这样,套接字明确地将客 户端和服务器区分开来。一个套接口可以看作是进程间通信的端点(endpoint),每个套接口的名字都是唯一的(唯一的含义是不言而喻的),其他进程可以发...原创 2019-12-27 14:04:36 · 15442 阅读 · 0 评论 -
#Linux#进程间通信# 共享内存(shared memory)
共享内存(进程间最快通信):一般数据操作过程把数据从用户态拷贝到内核态,用的时候,再将内核态拷贝到用户态,但共享内存不需要这两步,对虚拟地址空间的操作也就是操作了物理内存,那么另一个虚拟地址空间也可以有这个数据,即不需要拷贝。因为共享内存直接申请一块物理内存通过页表映射到虚拟地址空间中,操作虚拟地址空间,其实是操作同一块物理内存区域,因此进行数据传输时相较于其他通信方 式,少了两步用户态与内核态数...原创 2019-12-27 14:03:50 · 15598 阅读 · 0 评论 -
#Linux#进程间通信# 信号(sinal)
在计算机科学中,信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程...原创 2019-12-27 14:02:58 · 15142 阅读 · 0 评论 -
#Linux#进程间通信# 消息队列(message queue)
消息队列实际上是操作系统在内核为我们创建的一个队列,通过这个队列的标识符key,每一个进程都可以打开这个队列,每个进程都可以通过这个队列向这个队列中插入一个结点或者获取一个结点来完成不同进程间的通信。用户组织一个带有类型的数据块,添加到队列中,其他的进程从队列中获取数据块,即消息队列发送的是一个带有类型的数据块;消息队列是一个全双工通信,可读可写(可以发送数据,也可以接受数据)。消息队列生命周期随...原创 2019-12-27 14:02:03 · 15260 阅读 · 0 评论 -
#Linux#进程间通信# 信号量(semophore)
信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。主要作为进程间以及同一进程内不同线程之间的同步和互斥手段。它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个...原创 2019-12-27 14:00:59 · 15341 阅读 · 0 评论 -
#Linux#进程间通信# 管道(pipe)-命名管道fifo
命名管道(named pipe)又被称为先进先出队列(FIFO),是一种特殊的管道,存在于文件系统中。命名管道与管道非常类似,但是又有自身的显著特征:命名管道可以用于任何两个进程间的通信,而不限于同源的两个进程。 命名管道作为一种特殊的文件存放在文件系统中,而不是像管道那样存放在内核中。当进程对命名管道的使用结束后,命名管道依然存在于文件系统中,除非对其进行删除操作,否则该命名管道不会自行消...原创 2019-12-27 13:59:44 · 15092 阅读 · 0 评论 -
#Linux#进程间通信# 管道(pipe)-标准流管道pipe
在#Linux#进程间通信# 管道(pipe)-普通管道pipe中,我们很容易可以看出普通管道一是单工,即只能单向传输,而标准流管道针对匿名管道PIPE一系列封装。返回文件流。只不过返回的文件流无法使用游标/偏移量(offset)相关函数,如lseek等。标准流管道带有缓冲区,函数如下:FILE* popen(char* command ,char* type);command:指向...原创 2019-12-27 13:58:53 · 15138 阅读 · 0 评论 -
#Linux#进程间通信# 管道(pipe)-匿名管道pipe
我们通常把一个进程连接到另一个进程的一个数据流称为一个“管道”,通常是用作把一个进程的输出通过管道连接到另一个进程的输入。管道本质上是内核的一块缓存。内核使用环形队列机制,借助内核缓冲区(4k)实现。管道是Unix中最古老的进程间通信的形式; 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”; 管道的实质就是操作系统所提供的一块内存;每个管道只有一个页面作为缓冲区,该页面是按...原创 2019-12-27 13:57:33 · 15305 阅读 · 0 评论 -
#Linux#进程间通信# 进程与线程
进程的概念进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程...原创 2019-12-27 13:52:24 · 15346 阅读 · 0 评论