主题
进程同步与进程互斥

01
进程同步
问题
在多道批处理系统中,多个进程是并发执行的,而并发执行的进程具有异步性,也就是说,各个进程以各自独立的、不可预知的速度向前推进。这样会带来什么问题呢?如果有 AB 两个进程分别进行读写数据的操作,那么写数据应该发生在读数据之前,而实际上,由于异步性的存在,可能会发生先读后写的情况,而此时由于缓冲区为空,该读数据进程就会被阻塞。
解决方法:
所以,我们要通过进程同步来解决此类问题。与进程同步相关的也就是直接制约关系,指的是多个进程一起完成某个任务,这些进程因为合作、因为需要在某些位置上协调他们的工作次序而产生了某些制约关系。
1 概念
进程同步机制对相关进程在执行次序上进行协调,使并发的进程之间按一定规则共享资源,使程序的执行具有可再现性。
02
进程互斥
问题
在多道批处理系统中,多个进程是并发执行的,而并发执行的进程不可避免地需要共享一些系统资源(比如内存、打印机、摄像头等)。有些资源在一个时间段内只允许一个进程使用,诸如各种物理设备、变量、数据、内存缓冲区等,这些称之为临界资源——也就是说,一方面,并发执行的进程需要共享资源;另一方面,临界资源的访问又必须是互斥地进行(不能同时共享),这会导致资源访问上的矛盾。
解决方法:
所以,我们要通过进程互斥来解决此类问题。与进程互斥相关的也就是间接制约关系,指的是当 A 进程在访问某个临界资源时,另一个也想要访问该资源的 B 进程就必须等着,直到 A 进程访问结束并释放资源后,B 进程才能去访问。
03
两种形式的制约
1 概念
由于进程具有独立性和异步性等并发特征,计算机的资源有限,导致了进程之间的资源竞争和共享,也导致了对进程执行过程的制约。
① 间接制约:进程间无关,但都要使用临界资源
② 直接制约:进程间协作,需要按照某些规则运行

例:进程A和进程B通过共享缓冲区协作完成数据处理,进程A负责产生数据并放入缓冲区,进程B从缓冲区读数据并输出。进程A和进程B之间的制约关系是( )。
A. 互斥关系B.同步关系C. 互斥和同步关系D. 无制约关系解析:C。并发进程因为共享资源而产生相互之间的制约关系,可以分为两类:①互斥关系,指进程之间因相互竞争使用独占型资源(互斥资源)所产生的制约关系;②同步关系,指进程之间为协同工作需要交换信息、相互等待而产生的制约关系。本题中两个进程之间的制约关系是同步关系,进程B必须在进程A将数据放入缓冲区后才能从缓冲区中读出数据。此外,共享的缓冲区一定是互斥访问的,所以它们也具有互斥关系。实现
do { extry section; // 进入区 critical section; // 临界区 exit section; // 退出区 remainder section; // 剩余区} while(true)
04
进程对临界资源的访问过程
1 概念进入区:A 进程想要访问临界资源,首先会在进入区检查是否可以进入,由于此时没有其它进程占用临界资源,所以检查通过,同时它设置了一个 Flag 标志当前自己正在访问临界资源;临界区:实际访问临界资源的那段代码退出区:负责解除之前的 Flag剩余区:其它处理对于 B 进程,如果此时它也想要访问这个资源,同样就会在进入区做一个检查,它知道了 A 进程正在访问,所以自己就不能访问了。这样就实现了资源访问的互斥。
05
四个原则
1 概念空闲让进:临界区空闲时,说明没有进程使用临界资源,此时应该让想要进入临界区的进程立刻进来忙则等待:如果已经有进程进入临界区,则其它同样想要进入的进程只能等着有限等待:不能让进程一直干等着,要保证他在有限的时间内可以进入临界区让权等待:当进程不能进入自己的临界区时,应该立刻释放处理机,防止进程陷入“忙等”状态。
