当前位置: 技术问答>linux和unix
minix 文件系统的一点问题
来源: 互联网 发布时间:2015-09-18
本文导语: 我最近在看linux 0.11版本的文件系统,它采用的是minix文件系统。我现在有一个问题百思不得其解,望大家给我指点迷津。我不胜感激! 问题是:super.c中line 161-162为: s->s_imap[0]->b_data[0] |= 1; s...
我最近在看linux 0.11版本的文件系统,它采用的是minix文件系统。我现在有一个问题百思不得其解,望大家给我指点迷津。我不胜感激!
问题是:super.c中line 161-162为:
s->s_imap[0]->b_data[0] |= 1;
s->s_zmap[0]->b_data[0] |= 1;
linux kernel0.11完全注释上的解释是:对于申请空闲i节点的函数来讲,如果设备上所有的i节点已经全被使用,则查找函数会返回0值。因此0号i节点是不能用的,所以这里将位图中的最低位设置为1,以防止文件系统分配0号i节点。同样的道理,也将逻辑块位图的最低位设置为1。
但我还是不太明白,为什么因此0号i节点就不能用了呀?还有设置b_data[0] |=1到底设置的是什么?
请看过源代码的人给我解答一下,定的也有分送,分不够可以再加。
谢谢!
问题是:super.c中line 161-162为:
s->s_imap[0]->b_data[0] |= 1;
s->s_zmap[0]->b_data[0] |= 1;
linux kernel0.11完全注释上的解释是:对于申请空闲i节点的函数来讲,如果设备上所有的i节点已经全被使用,则查找函数会返回0值。因此0号i节点是不能用的,所以这里将位图中的最低位设置为1,以防止文件系统分配0号i节点。同样的道理,也将逻辑块位图的最低位设置为1。
但我还是不太明白,为什么因此0号i节点就不能用了呀?还有设置b_data[0] |=1到底设置的是什么?
请看过源代码的人给我解答一下,定的也有分送,分不够可以再加。
谢谢!
|
以下载自《MINIX:操作系统设计与实现》
逻辑上,在创建文件时,文件系统必须在位图块中查找第一个空闲i-节点,把它分配给这个新创建的文件。然而,超级块在内存的拷贝中有一个域指向第一个空闲 i-节点,因此不必进行查找,在该空闲i-节点分配使用后,就需要修改指针,使它指向下一个空闲i-节点,往往是下一个或者较近的一个节点。同样地, i-节点被释放后,检查这个i-节点是否位于第一个空闲i-节点的前面,若是,则需要修改指向第一个空闲i-节点的指针。如果磁盘上的所有i-节点全被使用,查找函数返回0,这也是0号i-节点未使用的原因(即它可以用于表明查找失败)(在mkfs创建新文件时,它把0号i-节点清零,并把位图中的最低位设置为1,防止文件系统分配0号i-节点)。上面所讲的同样也适用于区段位图。逻辑上,申请空间时,需要在区段位图中查找第一个空闲区段,但是超级块的内存拷贝保存了指向第一个空闲区段的指针,因而消除了很多顺序查找位图的麻烦。
仅仅是为了方便...我是这么认为
逻辑上,在创建文件时,文件系统必须在位图块中查找第一个空闲i-节点,把它分配给这个新创建的文件。然而,超级块在内存的拷贝中有一个域指向第一个空闲 i-节点,因此不必进行查找,在该空闲i-节点分配使用后,就需要修改指针,使它指向下一个空闲i-节点,往往是下一个或者较近的一个节点。同样地, i-节点被释放后,检查这个i-节点是否位于第一个空闲i-节点的前面,若是,则需要修改指向第一个空闲i-节点的指针。如果磁盘上的所有i-节点全被使用,查找函数返回0,这也是0号i-节点未使用的原因(即它可以用于表明查找失败)(在mkfs创建新文件时,它把0号i-节点清零,并把位图中的最低位设置为1,防止文件系统分配0号i-节点)。上面所讲的同样也适用于区段位图。逻辑上,申请空间时,需要在区段位图中查找第一个空闲区段,但是超级块的内存拷贝保存了指向第一个空闲区段的指针,因而消除了很多顺序查找位图的麻烦。
仅仅是为了方便...我是这么认为
|
inode号从1开始,1为bad_block_inode ,就是说这个inode所链接的数据块全部是已损坏的,不能正常使用的block
2为挂载点inode号。2-10都为保留用作特殊用途的
空闲inode没有域指向的,超级块中只有记录还有多少空闲inode
魔术字段是用来标示你的文件系统的,每一个文件系统按照它的名字以16进制进行转换得到它自己的魔术字段,所以字段如果错误,mount就会失败,文件系统也就使用不了了
这些是我看ext3得出的结论,和minix应该不会差太多
2为挂载点inode号。2-10都为保留用作特殊用途的
空闲inode没有域指向的,超级块中只有记录还有多少空闲inode
魔术字段是用来标示你的文件系统的,每一个文件系统按照它的名字以16进制进行转换得到它自己的魔术字段,所以字段如果错误,mount就会失败,文件系统也就使用不了了
这些是我看ext3得出的结论,和minix应该不会差太多
|
楼主多努力吧!
0号节点不能用就像0指针一样.至于把0号节点最低位置1是为了方便程序的其它部分处理.我没看过minix的源码, 这是我的猜测.
0号节点不能用就像0指针一样.至于把0号节点最低位置1是为了方便程序的其它部分处理.我没看过minix的源码, 这是我的猜测.
|
谢谢楼上所载!
我也有几个问题想请教一下。
1、在linux 0.11的超级块结构中哪个域是指向第一个空闲i-节点?
2、文件系统魔术字段有什么作用?
我也有几个问题想请教一下。
1、在linux 0.11的超级块结构中哪个域是指向第一个空闲i-节点?
2、文件系统魔术字段有什么作用?