共需读磁盘多少次? (3分) 解:
(1)在Unix的索引结点中,iaddr(0)到iaddr(9)是直接地址方式,可存放10个数据块的地址(盘块号)。iaddr(10)指向一级索引,该索引块中可存放256个数据块的地址(盘块号)。本题共有250个数据块,混合索引分配图如下图所示:
iaddr(0)…iaddr(9)iaddr(10)iaddr(11)iaddr(12)data0…data9data10………data249(7分)
(2)总共需要读盘21次。其中需要读一级索引块(一次间址块)1次,读数据块20次。(注意,由于存储块的长度时512个字节,且每两个字节可存放一个物理块号,所以一个用于索引的存储块能够存放256个物理块号。本题中的文件除了10个数据块使用直接地址外,只有240个数据块的物理块号放在一级索引块中,因此只用一个索引块就够了。) (3分)
5. 桌上有一个空的水果盘,盘中一次只能放入一个水果,服务员、男顾客和女顾客共用这个盘子。服务员可向盘中放苹果,也可向盘中放香蕉,男顾客专等吃盘中的苹果,女顾客专等吃盘中的香蕉。规定每次当盘子空时只能放一个水果供顾客取用。请用信号量机制实现服务员、男顾客和女顾客三个进程的同步。(要求说明用到的信号量的含义,并给出初值)(10分) 解:为了实现服务员、男顾客和女顾客三个进程的同步,可设置三个信号量:empty表示盘子中的水果是否被取走,apple表示盘中是否放入了苹果;banana则表示盘中是否放入了香蕉。相应的同步算法可描述如下: Var empty,apple,banana:semaphore:=1,0,0; (2分) Begin
Parbegin
Process Waiter: //服务员进程 Begin
Repeat
wait(empty); IF 放入苹果
第 6 页 共 7 页
signal(apple);
ELSE
signal(banana); Until false; End
Process Mister: Begin
Repeat
wait(apple); 取走苹果;
signal(empty); Until False; End
Process Miss: Begin
Repeat
wait(banana); 取走香蕉;
signal(empty); Until False; End Parend End
//男顾客进程
//女顾客进程
第 7 页 共 7 页
(4分)
(2分)
(2分)