操作系统概论中的问题如果一个生产者和一个消费者共享的缓冲器容量为可以存放n件物品,那么只要把信号量SP的初值定位n.当缓

chb1984672022-10-04 11:39:541条回答

操作系统概论中的问题
如果一个生产者和一个消费者共享的缓冲器容量为可以存放n件物品,那么只要把信号量SP的初值定位n.当缓冲器中没有放满n件物品时,生产者调用P(SP)都不会成为等待状态,可以吧物品存入缓冲器.但当缓冲器中已经有n件物品时,生产者想再存入一件物品将被拒绝.每存入一件物品后,由于调用V(SG),故SG的值表示缓冲器中可用的物品数.只要SG>0,消费者调用P(SG)后总可去去物品.每取走一件物品后,由于调用V(SP),便增加了一个可用来存放物品的位置.用指针k和t分别指示生产者往缓冲器中存放物品和消费者从缓冲器中取物品的相对位置.它们的初值为0.这样,一个消费者和一个生产者共用容量为n的缓冲区时,可如下同步工作:
begin
B:array[0..(n-1)] of integer;
k,t:integer;
SP,SG:semaphore;
k:=0;t:=0;
SP:=n;SG:=0;
cobegin
process producer
begin L1:produce a product;
P(SP);
B[k] := product;
k := (k+1) mod n;………………①
v(SG);
go to L1
end;
process consumer
begin L2:P(SG);
take a product from B[t];
t := (t+1) mod n;………………②
V(SP);
consume;
go to L2;
end;
coend;
end;

已提交,审核后显示!提交回复

共1条回复
xienans 共回答了14个问题 | 采纳率92.9%
k := (k+1) mod n
下一个存的位置 由k 变成 k+1, 但当 k=n-1时, 即最后一个时, k变成0. 即第一个位置.
t也一样.
1年前

相关推荐

操作系统概论的LRU调度算法要访问的页号是:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2把最先三页装入内存
操作系统概论的lru调度算法
要访问的页号是:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2
把最先三页装入内存,然后lru调度情况如下:
7 0 1 2 2 3 0 4 2 2 0 3 3
0 1 2 0 3 0 4 2 3 0 3 2 1
1 2 0 3 0 4 2 3 0 3 2 1 2
总***生7次缺页中断
(打竖一组的,这里没有框架打,所以就这样了,
问:那些数字是如何用lru排列的
有良田美池桑竹1年前1
海言 共回答了18个问题 | 采纳率77.8%
LUR是最近最少使用调度算法.
刚开始三个内存单元都是空的,7,0,1直接装入内存;
当2要装入内存时,由于3个内存单元都已被暂用,必须先有一个页让出内存,根据最近最少使用调度算法的原则,最少使用的页号为7(最长时间未使用),所以7出去,2进来,形成0,1,2的布局(2取代了7的位置,所以实际的顺序是2,0,1,但是将其按照最长时间未使用的顺序排列便于理解和后面的运算)
0页面要装入内存,但是其实它本来已经就在内存中,所以无需调度,内存中页面不变,将其按照最长时间未使用的顺序排列为1,2,0(实际顺序还是2,0,1);
3要进入内存,将最长时间未用到的1替换出去,所以又变成了2,0,3(3替换原来1的位置,所以实际顺序为2,0,3)
依次类推可得结果.