前面在聊到进程的概念的时候,我们知道,进程在操作系统中是一个个相互独立的个体,也就是说,在没有外力介入的条件下,进程之间相互独立,是无法相互看见对方的。
在前面聊到动态库的时候,我们提过一句虚拟内存的机制。(想要看动态库内容的朋友点这里)
那么究竟虚拟内存是个什么情况呢?
这个就是虚拟内存到物理内存转化的示意图,也就是说,我们用高级语言写出来的程序,其中指针所指向的地址,其实是虚拟地址。
那么为什么要 使用虚拟地址呢?
其实在早期的时候,加载程序是使用物理地址的,但是后来发现各个相互独立的进程之间可能会发生影响,如果一个进程访问出错,越界访问到了别的进程,那么这两个进程最终可能都会挂掉。
所以后来智慧的程序猿就研究出了这样的方法,也就是虚拟内存机制,这极大的提升了进程的独立性,但是也带来了一些问题。
比如,两个进程的确有一些需求,想要进行一些数据传输。
多个进程之间共享同样的资源。
一个进程需要向另一个进程发送消息,通知它们发生了某种事件。
有些进程希望完全控制另一个进程,此时控制进程希望能够拦截另一个进程所陷入的异常,并且能够及时知道它的状态改变(Debug进程)。
这就是我们进程通信的目的。
而现在我们需要通过一些手段来进行进程间的通信,既然进程之间是相互独立的,它们之间相互无法看见,那么作为进程的管理者,当然是有办法看见不同的进程了。
所以我们现在进程通信的方法,都是两个进程通过某种中间的媒介,来达到通信的目的。
现在常见的进程通信有以下分类:
扫描二维码关注公众号,回复:
1574847 查看本文章
管道:
匿名管道pipe。
命名管道。System V IPC
消息队列
共享内存
信号量POSIX IPC
消息队列
共享内存
信号量
读写锁