return(item); } { count=0; in=0; out=0; } 进程:
producer,consumer producer(生产者进程); Item_Type item; {
while(true) {
produce(&item); buffer.enter( ); buffer.deposit(item); buffer.leave( ); } }
consumer(消费者进程); Item_Type item; {
while(true) {
buffer.enter( ); item=buffer.fetch( ); buffer.leave( ); consume(&item); }
}
六、在一个页式存储管理系统中,页表内容如下所示: 页号 块号 0 2 1 1 2 6 3 3 4 7 若页的大小为2K,则地址转换机构将逻辑地址4116转换成的物理地址是什么。(请写明计算过程)。 答:
页号p=INT(0/2048)=0… 页内偏移w=mod(0/2048)…0
以页号为索引搜索页表得到0号页面所在的物理块号为2 物理地址=物理块号*块大小+页内偏移=2*(2*1024)+0=4096
七、写出使用记录型信号量的wait(s)和signal(s)操作的实现,说明与使用整型信号量相比,使用记录型信号量有什么优点。 procedure wait(s) var s:semaphore begin
s.value:=s.value-1; if s.value<0 then block(s.L) end.
procedure signal(s) var s:semaphore begin
s.value:=s.value+1; if s.value<=0 then wakeup(s.L)
end.
记录型信号量解决生产者-消费者同步问题的算法:
设置一个互斥信号量,mutex用于实现对公共缓冲池的互斥访问,初值为1。 设置两个同步信号量,分别表示可用资源数。 empty:表示空缓冲区数,初值为n
full:表示装有产品的缓冲区数,初值为0,(一个缓冲区中放一个产品)
Producer: begin repeat ? produce an item in nextp; wait(empty); wait(mutex); buffer(in):=nextp; in:=(in+1)mod n
signal(mutex); signal(full); until false(3分)
Consumer: begin repeat … wait(full); wait(mutex); nextc:=buffer(out); out:=(out+1)mod n; signal(mutex);
signal(empty); consume item in nextc; until false;