1. 进程同步与进程互斥

(1)进程同步:指多个进程中发生的事件存在某种时序关系,必须协同动作,相互配合,以共同完成一个任务。
(2)进程互斥:指由于共享资源所要求的排他性,进程间要相互竞争,以使用这些互斥资源。

2. 进程互斥解决方法

进程互斥的解决有两种做法:一是由竞争各方平等协商;二是引入进程管理者,由管理者来协调竞争各方对互斥资源的使用。

3. 资源共享3 个层次

(1)互斥(MutualExclusion):保证资源的互斥使用是指多个进程不能同时使用同一个资源,这是正确使用资源的最基本要求;

(2)死锁(Deadlock):避免死锁是指避免多个进程互不相让,避免出现都得不到足够资源的情况,从而保证系统功能的正常运行;

(3)饥饿(Starvation):避免饥饿是指避免某些进程一直得不到资源或得到资源的概率很小,从而保障系统内资源使用的公平性。

4. 相互感知度划分

相互感知的程度交互关系一个进程对其他进程的影响潜在的控制问题
相互不感知(完全不了解其他进程的存在)竞争(Competition)一个进程的操作对其他进程的结果无影响互斥、死锁、饥饿
间接感知(双方都与第3方交互,如共享资源)通过共享进行协作一个进程的结果依赖于从其他进程获得的信息互斥、死锁、饥饿
直接感知(双方直接交6如通信)通过通信进行协作一个进程的结果依赖于从其他进程获得的信息死锁、饥饿

5. 临界资源的访问过程

●进入区(Entry Section):为了进入临界区使用临界资源,在进入区要检查可否进入临界区;如果可以进入临界区,通常设置相应的“正在访问临界区”标志,以阻止其他进程同时进入临界区。
●临界区(Critical Section):进程中访问临界资源的一段代码。
●退出区(Exitt Section):将“正在访问临界区”标志清除。
●剩余区(Remainder Section):代码中的其余部分。

6. 进程同步机制准则

(1) 空闲则入:任何同步机制都必须保证任何时刻最多只有一个进程位于临界区。当有进程位于临界区时,任何其他进程均不能进入临界区。
(2) 忙则等待:当已有进程处于其临界区时,后到达的进程只能在进入区等待。
(3) 有限等待:为了避免死锁等现象的出现,等待进入临界区的进程不能无限期地“死等”。
(4) 让权等待:因在进入区等待而不能进入临界区的进程,应释放处理机,转换到阻塞状态,以使得其他进程有机会得到处理机的使用权。

7. 进程互斥的硬件方法

目前,在平等协商时通常利用某些硬件指令来实现进程互斥。硬件方法的主要思路是用一条指令完成读和写两个操作,因而保证读操作与写操作不被打断。依据所采用的指令的不同,硬件方法分成TS 指令和Swap 指令两种。

7.1 TS(Test-and-Set)指令

TS 指令的功能是读出指定标志后把该标志设置为TRUE。TS 指令的功能可描述成下面的函数。
Boolean TS (Boolean * lock) {
Boolean old;
old=*lock; lock=TRUE;
return old;
}
利用TS 指令实现的进程互斥算法是,每个临界资源设置一个公共布尔变量lock,表示资源的两种状态:TRUE 表示正被占用,FALSE 表示空闲,初值为FALSE。在进入区利用TS 进行检查和修改标志lock。有进程在临界区时,重复检查,直到其他进程退出时检查通过。所有要访问临界资源的进程的进入区和退出区代码是相同的。
TS 指令实现互斥的算法是:① 测试锁变量的值,如为1,则重复执行本命令,不断重复测试变量的值;② 如为0,则立即将锁变量测值置为1,进入临界区;③ 测试并设置指令是一条完整的指令,而在一条指令的执行中间是不会被中断的,保证了锁的测试和关闭的连续性;④ 退出临界区时,将锁变量测试值设为0。

7.2 Swap 指令(或Exchange 指令)

Swap 指令的功能是交换两个字(字节)的内容。可用下面的函数描述Swap 指令的功能。
Void SWAP(int*a, int*b){
Int temp;
temp=*a; *a=* b;*b =temp;
}
利用Swap 指令实现的进程互斥算法是,每个临界资源设置一个公共布尔变量lock,初值为FALSE;每个进程设置一个私有布尔变量key,用于与lock 间的信息交换在进入区利用Swap 指令交换lock 与key 的内容,然后检查key 的状态;有进程在临界区时,重复交换和检查过程,直到其他进程退出时检查通过。

8. 硬件方法优缺点

(1)优点有以下几个方面:①使用范围广:硬件方法适用于任意数目的进程,在单处理器和多处理器环境中完全相同;②简单:硬件方法的标志设置简单、含义明确,容易验证其正确性;③ 支持多个临界区:在一个进程内有多个临界区时,只需为每个临界区设立一个布尔变量;
(2)缺点有以下几个方面::①进程在等待进入临界区时,要耗费处理机时间,不能实现“让权等待”;②由于进入临界区的进程是从等待进程中随机选择的,有的进程可能一直选不上,从而导致“饥饿”。

9. 信号量

信号量是由操作系统提供的管理公有资源的有效手段。信号量代表可用资源实体的数量,属于低级通信方法。empty 信号量表明的是空闲资源数目;full 信号量表明的是满的资源数目;mutex 信号量用于实现互斥访问。

10. V 操作

(1) PV 操作由P 操作原语和V 操作原语组成(原语是不可中断的过程)对信号量进行操作。P(S):将信号量S 的值减1,即S=S-1;如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。V(S):将信号量S 的值加1,即S=S+1;如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
(2)优点:P、V 原语的执行,不受进程调度和执行的打断,从而很好地解决了原语操作的整体性。
(3)缺点:一个信号量只能置一次初值,以后只能对之进行P 操作或V 操作。信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制,读写和维护都很困难;核心操作P-V 分散在各用户程序的代码中,不易控制和管理;一旦错误,后果严重,且不易发现和纠正。