1.为什么要进行进程间通信
Linux系统中内存控件分为:内核空间,用户空间。内核空间中运行系统内核代码以及与硬件密切相关的代码,用户空间中运行用户程序以及与硬件无关部分。
应用程序不能直接操控硬件或者调用内核函数,需借助一系列接口函数申请让系统调用相关代码在内核空间运行以获取某些操作硬件或内核程序的能力(也就是系统调用)。例如上层应用在用户空间执行到 open() API函数时,会触发系统软中断,系统调用sys_open(),在内核空间执行open代码,这样用户空间的open函数内部代码就取得了在内核空间运行的权限,可以做一些比较牛比较核心的事情。这里的sys_open()就是一个系统调用,系统调用是一系列操作系统内核的方法
通过上述方式就实现了Linux用户进程和系统进程之间的隔离,这样做的好处就是当用户进程崩溃的时候不会波及系统进程,从而达到了系统的安全稳定的目的。
并且Linux中每个进程之间都是相互隔离的,也就是说每个进程各自有不同的用户地址空间,任何一个进程的变量在另一个进程中都是看不到的,所以进程之间要交换数据必须通过内核,在内核中开辟出一块缓冲区。一个进程把自己的数据从用户空间拷贝到内核缓冲区,另一个进程再从内核缓冲区把数据读走。内核提供的这种机制称为进程间通信(IPC,Inter Process Communication)
综上:
1.Linux内存分为内核空间和用户空间,彼此相互隔离,从而到达系统安全
2.每个进程彼此隔离,从而达到应用之间互不影响
3.用户进程想访问内核空间需要通过系统调用的方式来让用户进程进