《操作系统》课程综合练习题 及答案 下载本文

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;