Linux下IPC总结

1、什么是IPC?

    IPC:interprocess communication-进程间通信

    Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓存区,进程1把数据从用户空间拷贝到内存缓冲区,进程2再从内存缓冲区中把数据读走,内核提供的这种机制称为进程间通信(IPC)。

2、进程间通信的实质?

    不同的两个程序虽然0-4G内存地址空间不同,但两个程序的内核区在物理内存上是同一块。共享(物理内存中)同一内核区。——两个程序打开同一个文件,系统会在内核区维护打开文件的结构体,两个程序打开的是同一个结构体。

3、有哪些常用的进程间通信方法?

    ①匿名管道(PIPE)和有名管道(FIFO):最简单

    ②信号(SIGNAL):系统的开销最小

    ③共享映射区(MMAP):可以在无血缘关系的进程间通信

    ④本地套接字(SOCKET):最稳定(但是比较复杂)

4、为什么要进行进程间通信呢?

    两个进程间要传送数据。在接触IPC前,我们可以用文件来实现进程间通信,两个进程共享同一个打开的文件结构体。A进程写数据到文件中,B进程也打开同一个文件,内核会在内核区域维护一个打开文件的结构体,所以B可以从这个文件中读数据,但是A和B的0-4G进程地址空间是不一样的。之所以能用文件完成上面的通信,依赖于A和B他们的内核区在物理内存上是同一块。

5、IPC方法比较

    pipe-优点:实现简单;缺点:单向通信,只能用于有血缘关系进程间。

    fifo-优点:可以在非血缘关系进程间。

    信号-优点:开销小。

    共享内存-优点:可以用于非血缘关系进程间;缺点:比较复杂。

    本地套接字-优点:稳定性好;缺点:实现复杂。

    共享内存和fifo的区别:在于数据是否可以反复读取;fifo是用队列实现的,不能反复读取;共享内存是Linux内核借助缓冲区,通过内存来实现,可以反复读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值