本章目标:
进程同步与进程互斥
进程间通信目的
进程间通信发展
进程间通信分类
进程间共享信息的三种方式
IPC对象的持续性
1 进程同步与进程互斥
1.1顺序程序与并发程序的特征
1.1.1顺序程序特征
顺序性
后一个指令在前一个指令的基础上才能执行
封闭性:(运行环境的封闭性)
同样寄存器,系统堆栈,进程上下文不受其他程序影响
确定性
输入一定,输出一定,不受所运行得机器上
可再现性
相同的输入,相同的输出
1.1.2并发程序特征
共享性
并发性
随机性
1.2 进程互斥
互斥资源(临界资源)
只允许一个进程使用的资源(排他性)
进程的互斥
各进程间竞争使用需要互斥使用的资源,进程的这种关系为进程的互斥
临界区
在进程涉及到互斥资源的程序段叫临界区
互斥示例:售票——票
1.3 进程同步
多个进程需要相互配合共同完成一项任务
(两个进程的协作)
同步与互斥---可以通过信号量实现
2 进程间通信目的
数据传输
一个进程需要将它的数据发送给另一个进程
资源共享
多个进程之间共享同样的资源
通知事件
一个进程需要向另一个或一组进程发送信息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)
进程控制
有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变
进程控制也可以通过信号的方式(SIGTRAP)来实现
3 进程间通信发展
管道
两个进程间通信
匿名管道:父子进程或有亲缘关系的进程间通信
有名管道:允许无亲缘关系的进程间通信
System V进程间通信
使用广泛,Unix , linux等
POSIX进程间通信
4 进程间通信分类
文件
两进程A、B数据传输,A数据存在文件中,B从文件中读数据
文件锁
互斥与同步---读写锁,读操作-共享,写操作--互斥锁
管道(pipe)和有名管道(FIFO)
进程间传输数据
信号(signal)
SIGTRAP 一个进程完全控制另一个进程的执行
消息队列
进程间传输数据
共享内存
进程间共享数据
信号量
进程间对数据的同步访问或互斥访问
互斥量
条件变量
读写锁
套接字(socket)
注:
System V IPC :System V 消息队列、System V 共享内存、 System V 信号量
POSIX IPC: 消息队列、共享内存、 信号量\互斥量、条件变量、 读写锁
5 进程间共享信息的三种方式
1、共享一个文件系统
2、共享内核中的信息
3、共享同一块共享内存区(传递数据效率高,不涉及对内核的访问)
6 IPC对象的持续性
随进程持续
一直存在直到打开最后一个进程(pipe和FIFO)
随内核持续
一直存在直到内核自举或显示删除(如System V 消息队列、共享内存、信号量)
ps: 内核自举:机器重启
随文件系统持续
一直存在直到显示删除,即是内核自举还存在。(POSIX消息队列、共享内存、信号量如果是使用映射文件来实现)