疑问:进程间通信
我们知道进程有自己的虚拟地址空间,并且互不干扰,那么进程间通信又如何实现呢?A又看不到B的地址,B又看不到A的地址,那A怎么访问B的东西,B又怎么访问A的东西,我想这应该得借助第三方的东西,我们都知道进程地址空间有一段内核地址,里面是进程由用户态进入内核态时进程运行的内核态环境,比如通过系统调用进入内核态获取内核服务,进程的内核态也有自己内核栈,为什么需要内核栈呢?用户栈难道不就够了吗?因为内核服务很多都是受保护的,比如访问页表,进程控制块这些东西。但是内核栈又和进程间通信有什么相关呢?对于OS所有的进程间通信都是调用系统调用实现的,所有的系统调用都要陷入到内核态去执行。
问题:管道是如何实现进程间通信?
管道有两种形式,一种只能实现父子进程之间通信,还有一种可以实现无关进程之间的通信,对于第一种管道,我认为实现方式应该可以讲管道映射到内存中一块地址,两个进程读取这一块地址即可,但是进程间必须协同操作,一个读一个写,不能同时读,同时写,父子进程都能看到这一块内存,为什么都能看到呢?因为父进程fork出子进程时,同时继承了管道描述符,所以能看到。对于第二种管道,我认为可以映射到同一个文件上,但是具体不是很清楚?求大神解释。