进程间的通信

前面在聊到进程的概念的时候,我们知道,进程在操作系统中是一个个相互独立的个体,也就是说,在没有外力介入的条件下,进程之间相互独立,是无法相互看见对方的。
在前面聊到动态库的时候,我们提过一句虚拟内存的机制。(想要看动态库内容的朋友点这里
那么究竟虚拟内存是个什么情况呢?

这里写图片描述

这个就是虚拟内存到物理内存转化的示意图,也就是说,我们用高级语言写出来的程序,其中指针所指向的地址,其实是虚拟地址。

那么为什么要 使用虚拟地址呢?

其实在早期的时候,加载程序是使用物理地址的,但是后来发现各个相互独立的进程之间可能会发生影响,如果一个进程访问出错,越界访问到了别的进程,那么这两个进程最终可能都会挂掉。

所以后来智慧的程序猿就研究出了这样的方法,也就是虚拟内存机制,这极大的提升了进程的独立性,但是也带来了一些问题。

比如,两个进程的确有一些需求,想要进行一些数据传输
多个进程之间共享同样的资源
一个进程需要向另一个进程发送消息,通知它们发生了某种事件。
有些进程希望完全控制另一个进程,此时控制进程希望能够拦截另一个进程所陷入的异常,并且能够及时知道它的状态改变(Debug进程)。

这就是我们进程通信的目的。

而现在我们需要通过一些手段来进行进程间的通信,既然进程之间是相互独立的,它们之间相互无法看见,那么作为进程的管理者,当然是有办法看见不同的进程了。

所以我们现在进程通信的方法,都是两个进程通过某种中间的媒介,来达到通信的目的。

现在常见的进程通信有以下分类:

扫描二维码关注公众号,回复: 1574847 查看本文章
  1. 管道:

    匿名管道pipe。
    命名管道。

  2. System V IPC

    消息队列
    共享内存
    信号量

  3. POSIX IPC

    消息队列
    共享内存
    信号量
    读写锁

猜你喜欢

转载自blog.csdn.net/zym1348010959/article/details/80668771