进程之间需要通信的原因:即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。
进程之间的通信方式有6种:管道和有名管道,信号,消息队列,共享内存,信号量,套接字 (记忆方式:管信消,共信套)
1.管道及有名管道:
前者:具有亲缘关系的父子进程间的通信
后者:有无亲缘关系均可。
2.信号:
在软件层上对终端机制的一种模拟,通知有事发生,与处理器收到一个中断请求是一致的。
3.消息队列:
1).是消息的链接表:有写权限的:按一定规则向队列中添加新信息
有读权限的:从消息队列中读取信息
2).克服了以上两种信号量有限的缺点
4.共享内存:
1).多个进程可访问同一块内存空间,不同进程可及时看到对方进程中共享数据内存中数据的更新
2).最有用的进程间的通信方式,依靠同步来完成,如互斥锁和信号量
5.信号量:
是进程间或同一进程中不同线程间的同步和互斥的手段
6.套接字:
网络中不同机器间的进程的通信,应用广泛
互斥和同步的区别:
前者:某一资源同时只允许一个访问者访问,具有唯一性和排他性,但是访问顺序是无序的。
后者:在互斥的基础上,实现访问者对资源的有序访问。