4.1 进程同步的概念
(1)主要任务
使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序地执行具有可再现性。
(2)进程间地制约关系
间接制约关系(互斥关系):进程互斥使用临界资源。
直接相互制约关系(同步关系):进程间相互合作
(3)临界资源:系统中某些资源一次只允许一个进程使用,称这样地资源为临界资源或互斥资源或共享资源
诸进程间应采取互斥方式,实现对这种资源地共享
生产者-消费者问题:
(4)临界区
临界区:进程中涉及临界资源的代码段
进入区:用于检查是否可以进入临界区的代码段
退出区:将临界区正在被访问的标志恢复为未被访问标志
剩余区:其他代码
(5)同步机制遵循的准则
①空闲让进:当无进程处于临界区,应允许一个请求进入临界区的进程立即进入自己的临界区;
②忙着等待:已有进程处于其临界区,其他试图进入临界区的进程必须等待。
③有限等待:等待进入临界区的进程不能“死等”;
④让权等待:不能进入临界区的进程,应释放CPU;
(6)进程同步机制
①软件同步机制:使用编程方法解决临界区问题,有难度,具有局限性,现在很少采用。
②硬件同步机制:使用特殊的硬件指令,可有效实现进程互斥。
③信号量机制:一种有效的进程同步机制,已被广泛应用。
④管程机制:新的进程同步机制
4.2 软件同步机制
4.3硬件同步机制
4.4信号量机制
(1)整型信号量
(2)记录型信号量:去除忙等的信号量
每个信号量S除一个整数值S.value外,还有一个进程等待队列S,list,存放阻塞再信号量的各个进程PCB。
typedef struct{ int value; struct PCB *list; }semaphore;
①信号量只能通过初始化和两个标准原语wait,signal来访问,作为OS核心代码运行,不受进程调度的打断
②初始化指定一个非负整数值,表示空闲资源总数(资源信号量),若有非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数。
(3)AND型信号量
基本思想:将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放。
4.5管程机制
(1)定义:一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据
互斥:
①管程中的变量只能被管程中的操作访问
②任何时候一个进程再管程中操作
③类似临界区
④由编译器完成
同步:
①条件变量
②唤醒和阻塞操作
4.6 经典进程的同步问题
(1)生产者-消费者问题
(2)哲学家进餐问题
(3)读者-写者问题