TpsFs目录索引

1.低版本TpsFs的目录索引算法

文件系统中,一个目录由一个inode节点(记录文件属性)及众多目录项(entry)组成,目录项用于对该目录下各个子文件进行索引,通常目录项中会记录如下信息。

  • 子目录的文件名称;
  • 文件名称的长度;
  • 子目录inode节点所在位置。

当查找一个文件时,通常是先找到该文件的inode节点,inode节点是根据其父目录内对应的目录项所记录的inode节点位置进行查找的。因此目录项的索引效率的高低对文件查找有着很大的影响。

以前的TpsFs版本中,一个文件夹下目录项的存储通常是顺序存储,当我们去查找一个文件夹下面的子文件时,会将众多目录项从磁盘内逐一读出,并用目录项下的文件名称进行比较。查找目录项算法如图1.1所示。

图1.1 依次遍历目录项

这种算法的缺点是当一个文件夹内的目录项数目很多,并且待查找的目录项又在文件夹末尾时,则需要将这些目录项全部从磁盘内读出,磁盘访问次数急剧增加,从而影响了目录索引的效率。

2.高版本TpsFs的目录索引算法

在3.2.5 SylixOS内核版本以后,TpsFs为了提高目录索引效率,采用了B+树方式对目录内的目录项进行存储。当TpsFs新建一个目录时,不仅仅只是建立该目录的inode节点,同时还会建立B+树根节点并初始化。当需要向该目录内增加子文件时,该算法先通过murmurhash哈希算法算出该子文件对应的Hash值,并将该Hash值做为B+树的键值,该B+树的叶子结点的键值用于存储目录项的位置。

下面举例说明这种算法的存储过程,TpsFs在根目录下分别建立a.txt、b.txt、c.txt文件,其过程如下:

  • TpsFs通过Murmurhash算法算出a.txt的Hash值为10,该值做为B+树键值;为a.txt目录项分配空间,该空间的位置由B+树键值索引。
  • TpsFs通过Murmurhash算法算出b.txt的Hash值为20,该值作为B+树键值;为b.txt目录项分配空间,该空间的位置由B+树键值索引。
  • TpsFs通过Murmurhash算法算出c.txt的Hash值为30,该值作为B+树键值;为c.txt目录项分配空间,该空间的位置由该B+树键值索引。

创建成功后,各个子文件对应的目录项的位置如图1- 2所示。

图1- 2 各个子文件对应目录项位置

根据B+树的特点,当采用上述这种算法时,查找某目录下的一个子文件所需要访问的磁盘次数即为整个B+树的深度,TpsFs中的B+树一个节点可以存储几百个键值,也就是说当一个文件夹内存在几百个文件时,其B+树深度也还是1,这比低版本的依次遍历算法的效率明显高出很多。B+树的深度通常由B+树一个节点所能容纳的最大键值数和总的键值数决定,这里不多做讨论,可自行了解B+树的基本定义,TpsFs中最大节点数定义在libsylixos\SylixOS\fs\tpsFs\tpsfs_btree.h文件内。

2.1Murmurhash算法特点

Murmurhash算法是一种非加密型哈希函数,适用于一般的哈希检索操作,其特点为速度快、实现32位、238位Hash键值,具有较高的平衡性和低碰撞率,也就是说,不同文件名对应的Hash值相同的概率很低。

虽热不同文件名Hash值重复的概率较低,但也是有可能发生的,当出现不同文件名对应相同的Hash值时,TpsFs会将Hash值重复的子文件的目录项保存到低版本时所采用的数据区,即还是采用如图1- 2所示的算法对子文件的目录项进行查找。

3.总结

目录索引算法的好坏对文件系统查找效率有着很大的影响,TpsFs在多处索引算法上都采用B+树,其查找、修改、插入都有着较为稳定的时间复杂度。

原文地址:http://blog.51cto.com/11624185/2054552

时间: 2024-10-12 11:56:08

TpsFs目录索引的相关文章

算法录 目录索引。

(注:本文持续更新中.) 忙完了九月的一系列比赛之后,十月初收拾了一下也该准备写点入门的东西了,顺便给许久不更新(太懒了)的博客拉拉访问量.不过限于个人水平的原因写的不好请别打我... 至于算法是啥这些思想性的东西就不多说了,几乎每本入门书都会提及到.而且这类哲学问题还是要大家自己去想去理解... 这一篇文章主要是目录索引,接下来的话算法录这个分类里面应该会慢慢更新三种类型的文章,分别是 算法录,数据结构录,ACM录,这三种也算是相互联系的... 算法录: 内容:主要说的是对一些算法的学习和讲解

让博客园博客自动生成章节目录索引

一个好的博文除了博文的质量要好以外,好的组织结构也能让读者阅读的更加舒服与方便,我看园子里面有一些园友的博文都是分章节的,并且在博文的前面都带有章节的目录索引,点击索引之后会跳转到相应的章节阅读,并且还可以回到目录顶端,其中 Fish Li 的博文就是这种组织,当然这种结构如果是在写博文的时候人工设置那是非常麻烦的,无疑是增加了写作人的工作量.如果能自动生成章节索引岂不是节省了一大堆工作量.本来想通过FireBug看看Fish Li源码是怎么实现的,但是好像js是加密过的.那我就自己动手了,其实

最好的NoSQL数据库目录索引

http://nosql-database.org 是当前对NoSQL数据库收录最完善的目录索引,它的站长是第一本NoSQL书的作者.

PHP 禁止显示目录索引

apache禁止显示目录索引 apache显示目录索引很不安全,下面是操作方法. 在httpd.conf文件搜索关键字"Indexes ".     Options Indexes FollowSymLinks     AllowOverride None     Order allow,deny     Allow from all 出掉Indexes关键字,修改如下:   Options  FollowSymLinks MultiViews     AllowOverride No

【无私分享:ASP.NET CORE 项目实战】目录索引

简介 首先,我们的  [无私分享:从入门到精通ASP.NET MVC]   系列已经接近尾声,还有个项目管理系统就基本完工,完工之后整套项目的源码(包括UI)和数据库都会分享给大家,希望大家在这个过程中学到了一些思路和方法,而不仅仅是拿到源码. 因为是第一次写博客,我感觉还是比较混乱的,其中很多东西没有讲明白,还有很多帮助类有的过时了,有的只是分享并没有详细解释.今天,我们用Asp.net Core 重新开发这个项目,这是个新的东西,我也是刚刚接触,还是有很多东西没有理解,我们这次从UI到后端源

《BI那点儿事—数据的艺术》目录索引

转自:http://www.cnblogs.com/Bobby0322/p/4052495.html 原创·<BI那点儿事—数据的艺术>教程免费发布 各位园友,大家好,我是Bobby,在学习BI和开发的项目的过程中有一些感悟和想法,整理和编写了一些学习资料,本来只是内部学习使用,但为了方便更多的BI开发者,推动BI企业级应用开发,决定整理成一部教程,并在网络上免费发布该教程,希望为BI时代贡献绵薄之力! 本教程是由Bobby参考官方文档,综合市面相关书籍,经过充分的吸收消化,结合开发实践的而创

反骨仔的全文目录索引(持续整理中...)

反骨仔的全文目录索引 目录 C# 基础回顾 .NET 相关 SQL 基础梳理 其它 - 暂无分类 C# 基础回顾 C# 知识回顾 - 序列化 C# 知识回顾 - 表达式树 Expression Trees C# 知识回顾 - 特性 Attribute 走进 LINQ 的世界 进阶 - LINQ 标准查询操作概述 Linq To Objects - 如何操作文件目录 Linq To Objects - 如何操作字符串 C# 知识回顾 - 特性 Attribute 剖析 AssemblyInfo.c

Linux C编程学习5---参考《那年,一步一步学linux c》全系列(目录索引)

漫无目的的搜索一些东西,发现的一个很好的资源,所以就一定要收藏下来,方便自己学习Linux C 的时候也能够去参考一下别人的学习之路,来更加促进我的学习和思考 说明 转载请注明出处:谢谢:http://blog.csdn.net/muge0913/article/details/7342977 博主的邮箱是:[email protected] 文章中若有不对或某些功能更好的实现方法,请指出或直接留言. 该系列文章中所用结构数据代码均来自linux2.6.39. 1.那年,一步一步学linux c

反骨仔的全文目录索引

反骨仔的全文目录索引 目录 C# 基础回顾 .NET 相关 SQL 基础梳理 其它 - 暂无分类 C# 基础回顾 C# 知识回顾 - 序列化 C# 知识回顾 - 表达式树 Expression Trees C# 知识回顾 - 特性 Attribute 走进 LINQ 的世界 进阶 - LINQ 标准查询操作概述 Linq To Objects - 如何操作文件目录 Linq To Objects - 如何操作字符串 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute 走