在不断学习Linux的过程中,发现自己有很多的不懂, 把自己不懂的以问题的方式呈现,然后自己找出答案或者在网上发帖子寻求帮助.虽然《深入理解Linux内核》看了几遍,但是有的东西好像看完就忘了.功力尚浅,不能深谙此道.所以,总会不断的产生一些疑惑在脑海中.
下面是我的一些问题,会持续不断的更新.^_^,如果您觉得有不对的地方,欢迎指出,我将十分感谢您.
1. 内核中, 目录和子目录的关系是如何确定的?
答:每个文件系统有自己的目录的实现方式.譬如ext2中,目录是以一种特殊的文件形式表示的.目录的文件内容保存在磁盘上,内容包括目录包含的对象的inode号/目录项长度/文件名长度/文件类型/文件名.
对inode的解释,http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html.
参考:《深入理解Linux内核3th中文版》 Page 740.
2. inode索引号如何与磁盘上的inode进行匹配的?
答:inode索引号, 每个文件系统有自己的实现方式.譬如ext2文件系统,inode号是不存储在磁盘上的.inode号是由块组号,和inode在块组中的相对位置决定的.
例如:ext2文件系统中,每个block为4K.那么每个块组的inode数量就是4096个.对于inode号13021,就位于第三个块组中inode表中的第733个inode.<13021=3*4096+733,块组下标从0开始.>
参考:《深入理解Linux内核3th中文版》 Page 737.
3. linux文件系统如何挂载?
答:linux的文件系统挂载,是通过sys_mount系统调用实现的.sys_mount的调用路径为
sys_mount->do_mount->do_new_mount->do_kern_mount+do_add_mount.
do_mount接收的参数为文件系统所在设备文件路径名,文件系统将要挂载的安装点的路径名,文件系统类型.安装标志.
do_mount的流程为:
(1) 调用path_lookup对安装点路径进行查找
(2) 调用do_new_mount.
-> do_kern_mount,根据安装的文件类型, 查找系统是否支持该文件系统,并且返回文件系统在 file_system_type描述符.然后分配一个文件系统的描述符.调用文件系统的get_sb获取一个超级块,并返回文件描述符的地址.
-> do_add_mount,将do_kern_mount返回的文件系统描述符,加入系统的各种相关链表中.
参考:《深入理解Linux内核3th中文版》 Page 485-490.
4.
答:每个文件系统有自己的inode表,inode在自己的文件系统中,inode号是唯一的.不同的文件系统中,可以一样.
参考:http://www.cnblogs.com/sujz/archive/2011/12/14/2288050.html
5...未完待续
阅读(580) | 评论(0) | 转发(0) |