主题
进程同步与进程互斥
01
进程同步
问题
在多道批处理系统中,多个进程是并发执行的,而并发执行的进程具有异步性,也就是说,各个进程以各自独立的、不可预知的速度向前推进。这样会带来什么问题呢?如果有 AB 两个进程分别进行读写数据的操作,那么写数据应该发生在读数据之前,而实际上,由于异步性的存在,可能会发生先读后写的情况,而此时由于缓冲区为空,该读数据进程就会被阻塞。
解决方法:
所以,我们要通过进程同步来解决此类问题。与进程同步相关的也就是直接制约关系,指的是多个进程一起完成某个任务,这些进程因为合作、因为需要在某些位置上协调他们的工作次序而产生了某些制约关系。
1 概念
进程同步机制对相关进程在执行次序上进行协调,使并发的进程之间按一定规则共享资源,使程序的执行具有可再现性。
【题目】在操作系统中,要对并发进程进行同步的原因是()。 A.
进程必须在有限的时间内完成 B.
进程具有动态性 C.
并发进程是异步的 D.
进程具有结构性 解析:C。进程同步是指进程之间一种直接的协同工作关系,这些进程的并发是异步的,它们相互合作,共同完成一项任务。
02
进程互斥
问题
在多道批处理系统中,多个进程是并发执行的,而并发执行的进程不可避免地需要共享一些系统资源(比如内存、打印机、摄像头等)。有些资源在一个时间段内只允许一个进程使用,诸如各种物理设备、变量、数据、内存缓冲区等,这些称之为临界资源——也就是说,一方面,并发执行的进程需要共享资源;另一方面,临界资源的访问又必须是互斥地进行(不能同时共享),这会导致资源访问上的矛盾。
【题目】以下()不属于临界资源。 A. 打印机
B. 非共享数据
C. 共享变量
D. 共享缓冲区
解析:B。临界资源是互斥共享资源,非共享数据不属于临界资源。打印机、共享变量和共享缓冲区都只允许一次供一个进程使用。 【题目】以下()属于临界资源。 A. 磁盘存储介质
B. 公用队列
C. 私用数据
D. 可重入的程序代码
解析:B。临界资源与共享资源的区别在于,在一段时间内能否允许被多个进程访问(并发使用),显然磁盘属于共享设备。公用队列可供多个进程使用,但一次只可供一个进程使用,试想若多个进程同时使用公用队列,势必造成队列中的数据混乱而无法使用。私用数据仅供一个进程使用,不存在临界区问题,可重入的程序代码一次可供多个进程使用。
解决方法:
所以,我们要通过进程互斥来解决此类问题。与进程互斥相关的也就是间接制约关系,指的是当 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 进程正在访问,所以自己就不能访问了。这样就实现了资源访问的互斥。
例:在一段时间内只允许一个进程访问的资源,称为( )。
A.
共享资源B.临界区C.临界资源D.共享区
解析:C.在一段时间内只允许一个进程访问的资源称为临界资源或独占资源。计算机系统中的大多数物理设备,以及某些软件中所用的栈、变量和表格,都属于临界资源,它们要求被互斥地共享。
05
四个原则
1
概念
空闲让进
:临界区空闲时,说明没有进程使用临界资源,此时应该让想要进入临界区的进程立刻进来
忙则等待
:如果已经有进程进入临界区,则其它同样想要进入的进程只能等着
有限等待
:不能让进程一直干等着,要保证他在有限的时间内可以进入临界区
让权等待
:当进程不能进入自己的临界区时,应该立刻释放处理机,防止进程陷入“忙等”状态。
例:以下不是同步机制应遵循的准则的是()。 A.
让权等待 B.
空闲让进 C.
忙则等待 D.
无限等待 解析:D。同步机制的4个准则是空闲让进、忙则等待、让权等待和有限等待。