【考研】操作系统——同步互斥问题(P、V操作)2
17.设有无穷多个信息,输入进程把信息逐个写入缓冲区,输出进程逐个从缓冲区中取出信息。●mutex——互斥信号量,初值为1,表示各进程互斥进人临界区,即保证任何时候只有一。计数器i=0,j=0(i、j分别为输入进程和输出进程使用的缓冲区号码)。B.所有输入进程连续写人缓冲区的个数不能超过缓冲区的总容量(n)。●empty——可供使用的缓冲区数,其初值为n。●full——放有信息的缓冲区数,其初值为
2题目源于《操作系统原理》孟庆昌等编著。
可配合以下链接“食用”:
【考研】操作系统——同步互斥问题(P、V操作)1_住在阳光的心里的博客-CSDN博客
【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章_住在阳光的心里的博客-CSDN博客
【考研】操作系统:2019年真题43(同步互斥问题)_住在阳光的心里的博客-CSDN博客_有n位哲学家围坐在一张圆桌边
17. 设有无穷多个信息,输入进程把信息逐个写入缓冲区,输出进程逐个从缓冲区中取出信息。针对下述两种情况:
(1) 缓冲区是环形的,最多可容纳 n 个信息
(2) 缓冲区是无穷大的
试分别回答下列问题:
① 输入、输出两组进程读/写缓冲区需要什么条件?
② 用P、V操作写出输入、输出两组进程的同步算法,并给出信号量含义及初值。
解:(1) 缓冲区是环形的,最多可容纳 n 个信息时:
① 输入、输出两组进程读/写缓冲区需要的条件是:
A. 所有进程都要互斥使用缓冲区。
B. 所有输入进程连续写人缓冲区的个数不能超过缓冲区的总容量(n)。
C. 输出进程不能超前输入进程。
② 设置三个信号量:
● full —— 放有信息的缓冲区数,其初值为 0。
● empty —— 可供使用的缓冲区数,其初值为 n。
● mutex —— 互斥信号量,初值为1,表示各进程互斥进人临界区,即保证任何时候只有一
个进程使用缓冲区。
两个计数变量: in 和 out 分别是输人进程和输出进程使用的计数量,表示下面使用的缓冲
区编号,初值都是0。
//输入进程:
while (TRUE) {
P(empty);
P(mutex); //互斥访问缓冲区
信息送往buffer(in);
in = (in + 1) mod n; /* 以 n 为模 */
V(mutex);
V(full);
}
//输出进程:
while (TRUE){
P(full);
P(mutex); //互斥访问缓冲区
从buffer (out )中取出信息;
out = (out + 1) mod n; /*以n为模*/
V(mutex);
V(empty);
}
(2) 缓冲区是无穷大时:
① 输入、输出两组进程读/写缓冲区需要的条件是:
● 所有进程都要互斥使用缓冲区。
● 输出进程不能超前输入进程。
② 设置两个信号量:
● full——缓冲区满的情况,初值为0。
● mutex——互斥信号量, 初值为1。
计数器:i = 0, j = 0 ( i、j 分别为输入进程和输出进程使用的缓冲区号码)。
// 输入进程:
while(TRUE) {
P(mutex); //互斥访问缓冲区
信息送往buffer(i);
i = i + l;
V(mutex);
V(full);
}
// 输出进程:
while (TRUE) {
P(full);
P (mutex); //互斥访问缓冲区
从buffer(j)中取出信息;
j = j + 1;
V(mutex) ;
}
更多推荐
所有评论(0)