进程互斥 概念:临界区 临界资源 间接制约 互斥 信号量 P操作 V操作
1.临界区:不允许多个并发进程执行的一段程序称为临界资源。 临界资源:把一次(一段时间内)仅允许一个进程使用的资源称为临界资源。 分析与总结:——由于读写数据的顺序性导致。
2.间接制约:由共享公有资源而造成的对并发进程执行速度的间接制约。 分析与总结:——时间决定效率
3.互斥:一组并发进程中的一个或多个程序段,因共享某一公有的资源而导致它们必须以一个不允许交叉执行的单位执行。即不允许两个以上的共享该资源的进程同时进入临界区。 分析与总结:——比喻成一个独木桥。
4.互斥发生的五条基本原则: 有空让进(空闲让进),忙则等待,多中选一,有限等待,让权等待(即等待的进程应该主动放弃CPU)。 分析与总结——白话:如果临界资源是空的,那么就让一个进程使用(有空让进),从哪里选呢?从等待队列中选择一个咯(多中选一);如果没有空闲的话呢?就等待咯!不要一直等,很烦的(有限等待),还不能一直占用茅坑而不解放(让权等待)。
5.原语:是在管态下执行、完成系统特定功能的过程。不允许中断,是一个不可分割的单位,执行的顺序不可以是并发,而是顺序的。 分析与总结:——类似机器指令。
6.信号量:一个整数,正数表示可供并发进程使用的资源数,负数的绝对值表示等待使用临界区的进程数。 Struct Sem { Int value; Pointer_PCB queue; }; 体会:是一个变量,这个变量的作用好牛逼,可以表示某个进程使用,表示等待资源的个数。而且是一个公用的变量(标志着临界资源与进程之间的关系)。
7.P操作:信号量减一,表示申请临界资源,如果小于零,进入等待队列。见图P原语操作功能: 8.V操作:信号量加一,表示当前进程释放临界资源,如果小于等于零,则唤醒一个等待的进程。见图V原语操作功能:
进程同步: 类似于生产者和消费者。仍然是针对临界区提出的。时间的控制。
1.进程的同步:把异步环境下的一组并发进程,因直接制约而互相合作,互相等待,使得各进程按一定的速度运行的过程称为进程间的同步。 分析与总结:模拟生产者和消费者,前提:生产和消费共享一个区域。要生产,得有地方才行,即消费的释放;要消费,要已经生产好了才行。
2.合作进程以其消息:具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。如: wait (消息名) signal (消息名)
3.私用信号量:只与两组进程有关,制约的和被制约的。如full,empty。 公用信号量:互斥时使用的信号量。如Semaphore。 都是对立的分析。
4.利用P,V原语实现进程同步的方法: (1)首先为各并发进程设置私用信号量,总结:一般是对立的变量。 (2)然后为私用信号量赋初值,总结:一般是和为定值,一个为0,一个为N (3)最后利用P,V原语和私用信号量规定各进程的执行顺序 。 总结:考虑两个方面,一是如何传递私有信号,以实现同步;另一是如何设置公有信号量,以实现进程的互斥。
5.同步例题
解答: (1).设Buffempty为进程Pa的私用信号量,Buffull为进程Pb的私用信号量。(对立关系)。 (2).令Buffempty的初始值为N(N为缓冲队列的缓冲区个数),Buffull的初始值为0。(对立关系的初值,总和不变)。 (3).描述: Pa: deposit(data): Begin local x //x表示一个缓冲区块的地址。 P(Buffempty); 按FIFO方式选择一个空缓冲区 BUF(X); BUF(X)=data; BUF(X)置满标记 V(Buffull) End
Pb: remove(data): Begin local x P(Buffull); 按FIFO方式选择一个装满的空缓冲区 BUF(X); data =BUF(X); BUF(X)置空标记 V(Bufempty); End
6.由于有界缓冲区时临界资源,各生产者和各消费者进程之间必须互斥执行,即要设置公用信号量。——生产者和消费者问题
|
|