2026年10月押题密卷 · 选择题
进程P1、P2、P3、P4 和P5 的前趋图如图所示。 (S1) PI (S2) (S4) (S5) P2 P3 P4 P5 前趋图若用PV 操作控制进程P1~P5 并发执行的过程,则需要设置5个信号量s1、S2、S3、S4 和S5, 进程间同步所使用的信号量标注在图中的边上,且信号量S1~S5 的初值都等于零,初始状态下进程 P1开始执行。在如图所示的PV 操作示意图中a、b 和c 处应分别填写 ;d 和e处应分别填写 _,f 和g处应分别填写 o PV 操作示意图。请选择第60空应填写的选项( )。
在多道程序系统中,由于资源共享与进程合作,使各进程之间可能产生两种形式的制约关系,一种是 间接相互制约,例如,在仅有一台打印机的系统中,有两个进程A和B, 如果进程A需要打印时,系统 已将打印机分配给进程B, 则进程A必须阻塞;一旦进程B将打印机释放,系统便将进程A唤醒,使之 由阻塞状态变为就绪状态;另一种是直接相互制约,例如,输入进程A通过单缓冲区向进程B提供数 据。当该缓冲区为空时,进程B不能获得所需的数据而阻塞, 一旦进程A将数据送入缓冲区中,进程B 就被唤醒。反之,当缓冲区满时,进程A就被阻塞,仅当进程B取走缓冲区中的数据时,才唤醒进程A。 进程同步主要源于进程合作,是进程之间共同完成一项任务时直接发生相互作用的关系,为进 程之间的直接制约关系。在多道程序系统中,这种进程间在执行次序上的协调是必不可少的;进程互 斥主要源于资源共享,是进程之间的间接制约关系。在多道程序系统中,每次只允许一个进程访问的 资源称为临界资源,进程互斥要求保证每次只有一个进程使用临界资源。在每个进程中访问临界资源 的程序段称为临界区,进程进入临界区要满足一定的条件,以保证临界资源的安全使用和系统的正常 运 行 。 信号量 信号量是一个二元组(S,Q), 其 中S是一个整形变量,初值为非负数, Q 为一个初始状态为空的 等待队列。在多道程序系统中,信号量机制是一种有效的实现进程同步与互斥的工具。信号量的值通 常表示系统中某类资源的数目,若它大于0,则表示系统中当前可用资源的数量;若它小于0,则表 示系统中等待使用该资源的进程数目,即在该信号量队列上排队的PCB的个数。信号量的值是可变的, 由PV 操作来改变。 PV 操作是对信号量进行处理的操作过程,而且信号量只能由PV 操作来改变。P 操作是对信号量 减1,意味着请求系统分配一个单位资源,若系统无可用资源,则进程变为阻塞状态; V操作是对信 号量加1,意味着释放一个单位资源,加1后若信号量小于等于0,则从就绪队列中唤醒一个进程,执 行V操作的进程继续执行。 对信号量S进行P操作,记为P(S); 对信号量S进行V 操作,记为V(S)。P(S) 和V(S) 的处理过 程如表所示。 P(S)和V(S)的处理过程 P(S) V(S) S=S-1; if(S<0) { 当前进程进入等待队列Q; 阻塞当前进程; } else 当前进程继续; s=S+1; if(S<=0) { 从等待队列Q中取出一个进程P; 进程P进入就绪队列; 当前进程继续; } else 当前进程继续; 实现互斥模型使用信号量机制实现进程互斥时,需要为临界资源设置一个互斥信号量s,其初值通 常为1。在每个进程中将临界区代码置于P(S) 和V(S) 之间。必须成对使用PV原语,缺少P原语则不 能保证互斥访问,缺少V原语则不能在使用临界资源之后将其释放。而且, PV原语不能次序颠倒、重 复或遗漏。实现同步模型使用信号量机制实现进程同步时,需要为进程设置一个同步信号量s, 其 初值通常为0。在进程需要同步的地方分别插入P(S) 和V(S)。 一个进程使用P原语时,则另一个进程 往往使用V原语与之对应。具体怎么使用要根据实际情况决定,下面举个简单例子来加以说明。有两 个进程P1和P2,P1 的功能是计算x=a+b 的值,a 和b是常量,在P1的前面代码中能得到; P2 的功能 是计算y=x+1 的值。若这两个进程在并发执行,则有同步关系: P2 要执行y=x+1 时必须等到P1已 经 执行完x=a+b 语句。P2 进程可能会因为要等待x的值而阻塞,如果是这样的话,P1进程就要在计算出 x的值后唤醒P2进程。因此,为了使P1和P2正常运行,用信号量来实现其同步的过程如表所示。 P1和P2的同步过程 P1 P2 x=a+b; V(S); … y=x+1; 再举一个较为复杂的例子,以加深对PV操作的理解。设有两个并发进程Read 和Print,Read 负责 从输入设备读入信息到一个容量为N的缓冲区,Print 负责从缓冲区中取出信息送打印机输出。设置 信号量mutex 的初值为1,empty 的初值为N,full 的初值为0,则程序如表所示。在本题中,从题 目的前趋图,可以得知以下约束关系:①P1执行完毕,P2 与P3 才能开始;②P2执行完毕,P4 才能 开始;③P2与P3都执行完,P5才能开始。 实现Read和Print的程序 Read Print begin P(empty); P(mutex); 读 入 ; V(mutex); V(full); end begin P(full) P(mutex); 输出 V(mutex); V(empty) end 分析清楚这种制约关系,解题也就容易了。 ①从“P1执行完毕, P2与P3才能开始”可以得知:P2与P3中的b与d位置,分别应填P(S1) 和 P(S2), 以确保在P1执行完毕以前,P2与P3不能执行。当然当P1执行完毕时,应该要对此解锁,所 以P1中 的a位置应填V(S1) 与V(S2)。 ②从“P2 执行完毕,P4 才能开始”可以得知:P4的f位置,应填P(S3), 而P2的结束位置c应有 V(S3)。 ③从“P2 与P3都执行完,P5 才能开始”可以得知:P5 的g位置,应填P(S4) 与P(S5), 而对应的 P2的结束位置c应有V(S4), 结合前面的结论可知,c 应填V(S3) 与V(S4)。 而e应填V(S5)。