基于LSM和BLP的IPC进程通信模型

Posted 杰西啊杰西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于LSM和BLP的IPC进程通信模型相关的知识,希望对你有一定的参考价值。

参考书籍 《UNIX程序设计》、《操作系统安全》

1、IPC进程通信方式总结

(1)半双工管道PIPE

1)管道的概念

为了对进程进行保护,在不跨越进程便捷的前提下进行进程间的通信,操作系统设计了管道机制。每个管道允许两个进程交互数据,一个进程向管道中输入数据,另一个进程从管道中读取数据,这样两个进程之间就进行了通信,并且不需要跨越边界。每一个管道都有由操作系统为其开辟的一页内存,这一页赋予了文件的属性,并且这一页有两个进程共享,但是不会分配给任意一个进程,只由内存掌控。管道就是一页内存,但是进程要以操作文件的方式对其进行操作。

2)管道的特点

①管道是半双工的,数据只能向一个方向流动,双方通信时,需要建立起两个管道;
②只能用于父子进程或者兄弟进程之间。
③管道对于管道两端的进程来说是一个文件,它单独构成一种独立的文件系统,并且只存在与内存中。
④数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。尾部添加,头部读出

(2)FIFO命名管道

命名管道是一种特殊类型的文件,它在系统中以文件形式存在,不过要先用open函数打开一个FIFO才可以用read和write对它进行读写数据。
FIFO极好地解决了系统在应用过程中产生的大量的中间临时文件的问题。它可以被shell调用使数据从一个进程到另一个进程,系统不必为该中间通道去烦恼清理不必要的垃圾,或者去释放该通道的资源,它可以被留做后来的进程使用。
FIFO规避了匿名管道在作用域的限制,可应用于不相关的进程之间。

(3)系统v风格的消息队列、共享存储和信号量

消息队列 messagequeue

提供一种广义的消息传递方法,允许进程发送和接收一个缓冲区中数据。希望通信的一组进程通过具有一个唯一标识的消息队列连接在一起,要传送的任意数据打包并以消息的形式通过消息队列传输。消息的格式由操作系统规定,也可以由协同工作的进程规定。消息队列中的所有消息按照他们提交的顺序传递。
消息队列本身是内核地址空间的内部链表。同一个消息队列可以有多个进程发送消息,也可以有多个进程接收消息。且一旦消息被队列头读走,它就从队列中被删除,因此其他队列不可能再读到它。

共享存储

允许多个进程访问存储器中的相同数据区。希望通信的进程通过一块具有唯一标识的共享存储连接在一起,进而通信的进程可以与正常存储访问一样的方法访问这块共享存储,交换数据。

信号量 semaphore

允许进程打开和关闭一组成为信号量集合的标志,告诉进程某个事件已经发生。那些与信号量集合唯一标识相连的所有进程可以读取和修改信号量集合。信号量集合本身不传递数据,只是用来控制对某种资源的访问来实现进程之间的同步
有PV操作,用来控制进程的互斥和生产/消费情况。
P操作(信号量请求操作),在进程进入关键区时使用,如果信号量为0,则进程不能进入。
V操作,在进程离开关键区使用,离开后它时信号量增加。

(4)BSD风格IPC的套接字Socket

套接字通PIPE一样也解释为文件描述字,它是进程与系统之间通信的主要手段,利用套接字可以方便实现分布于网络的客户/服务系统。
套接字是一个通信端口,是一种用标准UNIX文件描述子与其他程序通信的方法,它除了有一个地址外,还明确包含着关于通信的域、类型、协议。它是非对称的,可以区分用于通信的客户进程和服务进程。

2、LSM勾函数

在这里插入图片描述

在这里插入图片描述

以上是关于基于LSM和BLP的IPC进程通信模型的主要内容,如果未能解决你的问题,请参考以下文章

IPC通信基于管道的popen和pclose函数

APUE读书笔记-15进程内部通信(5)

python—day29 守护进程互斥锁模拟抢票IPC通信机制生产者消费者模型

IPC在两个不相关的节点js进程之间使用共享内存通信

Android 进程间通信,基于Messeger(IPC)

Python学习第20篇:互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型