- 同步
- 直接制约关系,为了完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系。
- 互斥
- 进程的并发需要共享,各个并发执行的进程不可避免的需要一些系统资源的共享
- 两种资源共享方式
- 互斥共享:一个时段内只允许一个进程访问该资源
- 同时共享:允许一个时间段内多个进程同时对他进行访问
- 一段时间内只允许一个进程使用的资源叫作临界资源,变量、数据、内存缓冲区等都属于邻接资源
- 实现临界资源的互斥访问
- 空闲让进:可以允许一个请求进入临界区的进程立刻进入临界区
- 忙则等待:有进程进入临界区时,其他试图进入临界区的进程必须等待
- 有限等待:对请求访问的进程,应保证能有限时间内进入临界区
- 让权等待:当进程不能进入临界区时,应立刻释放处理机
-
中断屏蔽方法
- 利用开关中断指令实现
- 关中断:不允许当前进程被中断,不会发生进程切换
- 开中断:执行后才可能有别的进程上处理机并访问临界区
- 优点:简单高效
- 缺点:不适合多处理机,适合操作系统内核进程,不适合用户进程(只能运行在内核态)
- 利用开关中断指令实现
-
TestAndSet指令
-
swap指令
- 所有解决方案都无法实现“让权等待”
- 信号量机制:有效的实现进程互斥和同步的方法
- 用户可以通过实用操作系统提供的一对原语来对信号量进行操作
- 信号量表示系统中某种资源的数量,比如系统中有一台打印机,就可以设置信号量为1。
- 原语执行是一气呵成的,不可被中断。是由关中断和开中断实现的
- 一对原语:wait(s)和signal(s),括号内是信号量s
- wait和signal原语常常简称为PV操作
- 整型信号量
- 记录型信号量
- 系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区去除一个产品并使用
- 只有缓冲区没满,生产者才能把产品放入,否则必须等待。
- 只有缓冲区不空,消费者才能从中取出产品,否则必须等待。
- 缓冲区是临界资源,各进程必须互斥访问
- 实现