某文件系统采用索引节点管理,其磁盘索引块和磁盘数据块大小均为1KB字节且每个文件索引节点有8个地址项i_addr[0]~i_addr[7],每个地址项大小为 4字节,其中i_addr[0]~i_addr[4]采用直接地址索引,i_addr[5]和i_addr[6]采用一级间接地址索引,i_addr[7]采用二级间接地址索引。若用户要访问文件 userA中逻辑块号为4和5的信息,则系统应分别采用(),该文件系统可表示的单个文件最大长度是()KB

问题1:

A 直接地址访问和直接地址访问

B 直接地址访问和一级间接地址访问

C 一级间接地址访问和一级间接地址访问

D 一级间接地址访问和二级间接地址访问

问题2:

A 517 B 1029 C 65797 D 66053

请先 登录 后评论

1 个回答

亚里士德
擅长:互联网

知识点:操作系统-文件的结构和组织

位于4.5.2章节。

关于题目中的这几级地址索引,软设书上好像只描述了一句话:“UNIX文件索引表项分4种寻址方式:直接寻址、一级间接寻址、二级间接寻址和三级间接寻址。”,没有计算方法。通过这一章节的其他文字描述,我们可以推测出计算方法。

2020、2018、2012考过几乎一样的题目。系统架构师也会考察此结构。

---

要读懂这个题目,首先是要理清索引块和数据块之间的区别。

我们简略的,根据范围从大到小的来说。

在操作系统管理的磁盘中,分为索引块数据块两种磁盘。

索引块中,存放指向数据块的地址(索引)。数据块中,存放数据。(题中给出这两种块,每一块的大小信息,都是相等的1KB)。

在一个索引块中,存放了多个索引节点。一个索引节点有8个地址项i0到i7,一个(4byte大小的)地址项指向一个数据块;因为每一个地址项都是4字节大小,所以我们可以推算,一个索引节点总共有8x4=32个字节;一个索引块可以存放1KB/32B=1024/32=32个索引结点,而且一个索引块可以指向1KB/4byte=256个数据块

题中说,i0到i4,这5个索引结点是直接指向数据块的,i5和i6,这两个节点指向一级间接索引(的索引块),一级间接地址索引存放在索引块中,由它再指向数据块。二级同理,中间隔两层。

题中说需要访问逻辑块号,逻辑块号可能是这样的:一个文件需要分别存储在不同的数据块中,把这些数据块排成一行依次编号(从0开始),这个编号就是逻辑块号(因为他们在物理上可能其实并不连续,所以叫逻辑?)。

---

解题:

要访问逻辑块号为4,那么在直接地址索引中i_addr[4]就可以直接指向这一块,所有第一个肯定有直接地址索引,排除CD选项。要访问逻辑块号为5,那么因为在i_addr[5]这个索引节点是一级间接索引,这个索引指向一个新的索引块,这个新的索引块中存放了256个指向数据块的地址(256的来源请看上面的计算推算,这里不重复)。分别可以指向一个文件的逻辑块号为5(因为直接地址已经指向了0-4了)到逻辑块号为5+255=260的数据块。这里面包含了逻辑块号为5的索引,所以这个5是一级间接地址索引,第一空选B。

第二空:求单个文件的最大长度,那就是一个文件把所有的直接、一级间接、二级间接索引都使用了,那么这个文件就是最大的文件。

因为上面已经计算了一个索引块能够装256个索引地址,i_addr[5]和i_addr[6]两个就是可以指向256x2个数据块。再加一个二级间接地址,二级索引块存放指向一级索引块(相当于,可能不这么叫)的节点地址,也就是i_addr[7]指向了一个存放256个一级地址索引的索引块,也就是它可以存放指向256x256个数据块的地址。把这几级的指向数据块的地址个数相加再乘以一个数据块的大小,就可以计算出一个文件最大的大小。

直接地址索引可以指向数据块的个数+一级间接地址索引可以指向数据块的个数+二级间接索引可以指向数据块的个数=

5+256x2+256x256 = 5+512+65536 = 66053 

再x每一个数据块的大小66053x1KB=66053KB

请先 登录 后评论