目录
🤗个人主页:东洛的克莱斯韦克

✈必备知识
进程间通信概述

🔥概述
进程间通信简称IPC,是在不同进程之间传播或交换信息的一种机制。
管道是基于内存级文件的通信方案
在System V解决方案中有共享内存,消息队列,信号量。在POSIX IPC解决方案中有共享内存,消息队列,信号量,互斥量,条件变量,读写锁
这些通信方案在系统中都属于IPC资源。
🔥必要性
每个进程都有自己的地址空间,这保证了进程的独立性。即使两个进程是父子关系,可以看到同一份数据,但只要有一方进行写入操作都会发生写时拷贝。
进程A异常了,不会影响到进程B,进程C......本质上来讲进程的独立性是因为进程间的数据具有独立性。
进程具有独立性是在内核设计时就有的理念。但后来发现,进程有时相互传输数据是必要的,所以必须提出解决方案——不破坏进程的独立性又能实现进程的通信。
🔥原理
先让两个进程看到同一份公共资源,这公共资源可以是文件,也可以是一块内存。
进程A向公共资源写入数据,进程B向公共资源读数据。此时两个进程完成了数据的交互,这样进程A和进程B就实现了通信。
管道概述

🔥管道的本质
管道也是文件的一种,属于p类型的文件。管道文件属于公共资源,如果多个进程打开同一个管道文件,就能相互传输数据。
管道文件是内存级文件,它在磁盘中并没有对应的数据块来为它保存文件内容。系统只会在内存中为管道文件开辟文件缓冲区来保存数据。这样做避免了内存与外设的IO交互,提高进程间通信效率。
管道文件在磁盘中有个简单的映像,这个映像的大小为 0 ,这么做是为了让文件系统知道有这么一个文件存在。
🔥管道的相关特性
| 管道一般是单向通信——一方是读端,一方是写端 |
| 管道具有同步与互斥机制——保护数据 |
| 管道的生命周期随进程——被打开的文件的声明周期随进程 |
| 管道是面向字节流的 |
🔥管道的同步与互斥机制
同步与互斥机制是为了保护管道数据的安全
| 读写端都正常,管道为空,读端阻塞 |
| 读写端都正常,管道为满,写端阻塞 |
| 读端正常,写端关闭,读端会读到 0 ,相当于读到文件结尾,进程正常执行后续代码 |
| 读端关闭,写端正常,写端的进程会被信号杀掉,进程异常终止 |
匿名管道
匿名管道本质上是没有名字的内存级的文件——适用于具有血缘关系的进程
🔥系统调用接口介绍
🔥内核原理
在使用pipe系统调用之后,系统会为该进程分配两个文件描述符——files_struct数组下标。会有两个file结构体指向同一个文件缓冲区。分别以只读和只写打开文件缓冲区。


1979

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



