Linux 下进程概念以及进程间基本通信机制:管道,共享内存,消息队列,信号量

目录

一、Linux 下的进程

1.1 进程相关基础概念 

1.1.1 程序

1.1.2 进程

1.1.3 进程与程序的关系

1.2特殊进程

1.2.1 僵尸进程

1.2.2 孤儿进程

二、进程间基本通信机制

2.1 进程通信目的

扫描二维码关注公众号,回复: 15955310 查看本文章

2.2 管道

2.2.1 无名管道

2.2.2 命名管道(FIFO)

2.3 共享内存

2.4消息队列

2.5 信号量


一、Linux 下的进程

1.1 进程相关基础概念 

1.1.1 程序

程序是一些保存在磁盘上的指令的有序集合;

1.1.2 进程

进程是程序的一次执行过程;

1.1.3 进程与程序的关系

①、程序是静态的,进程是动态的;         

②、一个程序可以对应多个进程;

③、程序只有数据段和代码段,进程除了有数据段和代码段之外,还有堆和栈;

1.2特殊进程

1.2.1 僵尸进程

当进程退出的时候,它是不会立即释放空间的,它的PCB会保存一段时间让父进程或者操作系统读取,让父进程或操作系统知道这个进程即将退出了,然后父进程或者操作系统释放掉进程占用的资源和空间。一般情况下,清理进程资源空间的操作都是父进程。

那么僵尸进程,指的是什么呢?就是进程退出时,依然会在内存里面待一段时间,如果父进程没有能力将此进程完整地释放掉,造成这个进程一直在内存里面,此时这个进程就是僵尸进程。

1.2.2 孤儿进程

当父进程衍生出一个或多个子进程后,父进程先退出了,只留下了衍生出的一个或多个子进程,这些子进程就叫孤儿进程

我们先kill了父进程,就导致了子进程的父进程消失了,而操作系统绝对不会坐视不管,它会去领养这个子进程,所以我们可以看到,孤儿进程的父进程是操作系统。为什么操作系统要领养这个子进程呢?因为如果不领养这个子进程,它就会一直占用内存的空间,它不依赖任何父进程存活,这是非常危险的事情,因为我们无法控制和管理它了!这就导致内存泄漏了!
 

二、进程间基本通信机制

2.1 进程通信目的

数据传输:一个进程需要将它的数据发送给另一个进程;

资源共享:多个进程之间共享同样的资源;

通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(例如进程终止时要通知父进程);

进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能及时直到它的状态;

2.2 管道

管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。

管道是半双工通信、本质上是内存中的一块缓冲区

2.2.1 无名管道

特点:

  1. 半双工。(同一时间,数据单向流通)
  2. 只应用在父子或者兄弟进程之间。
  3. 数据读取后,管道中的数据即不存在了。

2.2.2 命名管道(FIFO)

特点:

  1. FIFO可以在无关进程之间交换数据。
  2. FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

2.3 共享内存

共享内存即在物理内存上开辟一块空间,然后多个进程通过页表将这同一个物理内存映射到自己的虚拟地址空间中,通过自己的虚拟地址空间来访问这块物理内存,达到了数据共享的目的。

 也正是因为这种特性,使得共享内存成为了最快的进程间通信的方式因为它直接通过虚拟地址来访问物理内存,比前面的管道和后面的消息队列少了内核态和用户态的几次数据拷贝和交互。

共享内存的使用流程:

1. 创建共享内存
2. 将共享内存映射到虚拟地址空间
3. 进行操作
4. 解除映射关系
5. 释放共享内存

特点:

\1. 共享内存是最快的进程间通信方式
\2. 生命周期随内核
\3. 不自带同步与互斥,但可以借助信号量来实现同步与互斥

2.4消息队列

消息队列是内核中的一个优先级队列,多个进程通过访问同一个队列,进行添加节点或者获取节点来实现通信。

2.5 信号量

通过信号量来对临界资源的访问进行控制,来实现进程间的同步与互斥。

  1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
  2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
  3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
  4. 支持信号量组。

参考:【Linux】详细理解进程间通信机制(管道、消息队列、共享内存、信号量)_管道通信,消息缓冲队列,共享缓冲区,其中哪些通信机制提供了发送进程和接收进程之__ClivenZ的博客-CSDN博客

Linux —— 进程概念超详解!_linux进程_小龙向钱进的博客-CSDN博客

https://www.cnblogs.com/feige1314/p/7231734.html

猜你喜欢

转载自blog.csdn.net/weixin_45440484/article/details/130712969