1. 进程同步的基本概念
-
两种形式下的制约关系
(1) 互斥(间接相互制约关系)
(2) 同步(直接相互制约关系) -
临界资源
诸进程间采取互斥方式实现对临界资源的共享 -
临界区
每个进程中访问临界资源的那段代码
while(TRUE)
{
进入区
临界区
退出区
剩余区
}
- 同步机制遵循的原则
(1) 空闲让进
(2) 忙则等待
(3) 有限等待
(4) 让权等待
2. 硬件同步机制
- 关中断
- 利用Test-and-Set指令实现互斥
- 利用Swap指令实现进程互斥
3. 信号量机制
3.1 分类
- 整型信号量
资源数目整型量S:
两个标准的原子操作wait(S)和signal(S),即P、V操作
wait(S){
while (S<=0);
S- -;
}
signal(S){
S++;
}
- 记录型信号量
进程链表指针list,链接所有等待进程
S -> value记录系统中资源的数目。S->value初值为1则成为互斥信号量。 - AND型信号量
基本思想:将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。 - 信号量集
当进程申请某类临界资源时,在每次分配之前,都必须测试资源的数量,判断是否大于可分配的下限值,决定是否予以分配。
3.2 应用
- 利用信号量实现进程互斥
为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。 - 利用信号量实现前趋关系
设有两个并发执行的进程P1和P2,
在进程P1中,用S1;signal(S);
在进程P2中,用wait(S);S2;
实现S1执行后再执行S2的前趋关系。
4. 管程机制
- 定义:系统中的各种硬件资源和软件资源均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节。
- 构成:
(1) 管程的名称
(2) 局部于管程的共享数据结构说明
(3) 对该数据结构进行操作的一组过程
(4) 对局部于管程的共享数据设置初始值的语句 - 条件变量:在利用管程实现进程同步时,必须设置同步工具,如两个同步操作原语wait和signal。