进程同步要解决什么问题?
在OS中引入进程后,如果不进行妥善的管理,必然会因为这些进程对系统资源的无序争夺而给系统造成混乱。致使每次处理的结果存在不确定性,即程序运行结果的不可再现性。为保证多个进程能有条不紊地运行,在多道程序系统中,必须引入进程同步机制。
一、进程同步机制的主要任务
进程同步机制的主要任务,是对多个相关进程在执行次序上的协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地合作,从而使程序的执行具有可再现性。
二、进程之间两种形式的制约关系
1. 间接相互制约关系(互斥关系)
是指由于共享系统资源,如CPU、I/O设备等,致使这些并发执行的进程形成的相互制约关系。
2. 直接相互制约关系(同步关系)
一个程序为了完成某任务而建立了多个进程,这些进程需要相互合作。直接制约关系就是源于它们的相互合作,比如需要共享缓冲区等。
三、临界资源
(1)定义: 一次仅允许一个进程使用的资源称为临界资源。
(2)包括: 慢速设备(打印机、磁带机等)、共享的变量、数据结构、缓冲区等。
(3)结论: 诸进程间应采用互斥方式,实现对这些资源的共享。
eg 1. 多道系统中,像这种两个或多个进程并发地读写一个共享数据, 共享数据的值取决于最后访问它的进程的执行结果,这种情况称为 竞态条件(Race condition),要保证对临界资源的互斥使用。
eg 2. 生产者——消费者问题,是一个经典的进程同步问题。
所有的生产者和消费者进程都是以异步方式运行的,但它们之间必须保持同步:既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品的缓冲区投放产品。
四、临界区
(1)定义: 每个进程中访问临界资源的那段代码 称为临界区(critical section)
(2) 可以把访问临界资源的循环进程描述如下:
进入区: 用于对欲访问的临界资源进行检查,看它是否正被访问。是的话,则本进程不能进入临界区,否的话,就可以访问,并要设置访问标志。
退出区: 用于将临界区正被访问的标志恢复为未访问的标志。
剩余区: 进程中除了进入区、临界区、退出区以外的代码都称为剩余区。
五、所有同步机制必须遵循的原则
1 和 2 就是很简单的互斥原则;
1. 空闲让进
当没有进程处于临界区时,应允许一个请求进入临界区的进程立即进入。
2. 忙则等待
当已有进程进入临界区时,其它试图进入的进程必须等待。
3. 有限等待
应保证每一个进程在有限时间内能进入自己的临界区,避免陷入“死等”状态。(可以通过限制其它进程进入临界区的次数来实现)
4. 让权等待
当进程不能进入自己的临界区时,应立即释放处理机。(也就是此时进程没啥工作可做了,只能等到临界区允许进入才能继续下去,所以占着CPU也没啥意义了,让出CPU的使用权,继续等待资源,就这意思)