第三章 进程的同步与通信
3.1 进程同步的概念
3.2 信号量机制
3.3 经典进程同步问题
3.4 管程机制
3.5 进程通信
3.1 进程同步的概念
进程之间的关系:
资源共享关系:
相互合作关系:
1. 临界资源
临界资源的定义:
2. 临界区:
⑴临界区的定义
⑵临界区进入和退出的方法:
⑶同步机制应该遵循的准则:
空闲让进、忙则等待、有限等待、让权等待
3. 利用软件方法解决进程互斥问题
4. 利用硬件方法解决进程互斥问题
⑴利用Test-and-Set指令实现互斥
TS指令:
TS(lock)
Int *lock;
{ int t;
t=*lock;
*lock=1;
return(t);
}
入口:while(TS(&lock));
出口:lock=0;
⑵利用Swap指令实现互斥
Swap指令:
Swap(a,b)
Int *a,*b;
{
int t;
t=*a;
a=b;
*b=t;
}
入口:key=1;
do
{swap(&lock,&key);
}while(key==0);
}
出口:lock=0;
3.2 信号量机制
1. 整型信号量机制:
⑴整形信号量:
⑵利用信号量互斥:
⑶利用信号量描述前驱关系:
2. 记录型信号量机制:
3. 信号量集机制:
⑴AND信号量集机制:
⑵一般信号量集机制:
3.3 经典进程同步问题
1. 生产者消费者问题。
2. 读者写者问题。
3. 哲学家进餐问题。
3.4 管程机制
1.管程的引入:
2.管程的基本概念:
⑴管程的定义:
⑵条件变量
3.利用管程解决生产者----消费者问题
4. 利用管程解决哲学家进餐问题
5. 利用管程解决读者写者问题:(孙钟秀)
3.5 进程通信
进程通信的定义:进程间的信息交换。
进程通信:
低级进程通信:少量的信息交换,没有专门的通信机制,如信号量机制
缺点:效率低,通信对用户不透明
高级进程通信:大量的信息交换,有专门的通信机制
1. 进程的通信类型:
⑴共享存储器系统
①基于共享数据结构的通信方式:
②基于共享存储区的通信方式:
⑵消息传递系统:
message为传递单位
直接通信方式和间接通信方式(信箱方式)
⑶管道通信
2. 直接通信和间接通信方式
⑴直接通信方式:
⑵间接通信方式:
3. 消息传递系统的几个问题:
⑴通信链路
⑵消息的格式
⑶进程的同步方式
①发送进程阻塞,接收进程阻塞;
②发送进程不阻塞,接收进程阻塞;
③发送进程和接收进程均不阻塞;
4.消息缓冲队列机制
⑴消息缓冲队列机制中的数据结构:
⑵发送原语
⑶接收原语