|
发表于 2003-1-13 16:39:18
|
显示全部楼层
Re: 看到很多兄弟喜欢谈操作系统,我给大家出个难题,嘿嘿:-)
[quote:bc432742ee="cjacker"]
i-node,data block,indirect data block,double indirect data block,triple indirect data block这些概念都是怎么回事儿?
[/quote]
这个就不多解释了,翻译一下好了,i节点,直接块,一级间接块,二级间接块,三级间接块
这些就是linux文件系统高明的地方,使系统可以用固定大小且空间不大的索引存储大文件.
[quote:bc432742ee="cjacker"]
inode的数据结构是怎样的?
[/quote]
ext2 的i节点数据结构
{
__u32 i_data[15];
__u32 i_flags;
__u32 i_faddr;
__u8 i_frag_no;
__u8 i_frag_size
__u16 i_osync;
__u32 i_file_acl;
__u32 i_dir_acl;
__u32 i_dtime;
__u32 i_version;
__u32 i_block_group;
__u32 i_next_alloc_block;
__u32 i_next_alloc_goal;
__u32 i_prealloc_block;
__u32 i_prealloc_count;
__u32 i_high_size;
int i_new_inode:1;
}
[quote:bc432742ee="cjacker"]
一个inode对应一个文件,这个文件最大可以作到16G(还要加?k)
这个16G是怎么实现的,
[/quote]
在i节点结构中的i_data[15]这个成员就是用来记录数据块地址的,为32位的整数.包含15个指针,其中12个指向直接块,另外三个分别指向一级间接块,二级间接块和三级间接块.每个直接块指向的数据块,直接用来存储文件数据,每个块存1k数据,12个直接块就是12k的数据.一级间接块则指向一个存储直接块的地址,32为寻址的话,一个一级间接块就可记载256(1024/4)个直接块,这样一个间接块可存储256k的数据.同理,所谓的二级间接块存储的是一级间接块的地址,这样,一个二级间接块就可以存储64M(256*256k)的数据.一样,三级间接块存储的是二级间接块的地址,这样,一个三级间接块就可存储16G(256*64M)的数据,由于pc是32位寻址,最大值是4G,因此linux下一个文件最大也就只能是4G而达不到16G. |
|