[发明专利]一种文件系统中可配置的实时透明压缩方法有效
申请号: | 201010271788.1 | 申请日: | 2010-09-03 |
公开(公告)号: | CN101957836A | 公开(公告)日: | 2011-01-26 |
发明(设计)人: | 唐力;汪东升 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京清亦华知识产权代理事务所(普通合伙) 11201 | 代理人: | 罗文群 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种文件系统中可配置的实时透明压缩方法,属于计算机数据存储技术领域。在文件系统创建阶段,在配置文件中设定对各种不同类别的文件使用何种压缩算法(压缩配置信息将在文件系统挂载阶段读如计算机内存),并在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表;在文件系统使用阶段,通过文件系统驱动接收和响应应用程序对文件系统发起的操作命令,并根据配置要求对读、写的数据进行实时透明的压缩操作。本发明方法能够在文件系统中为各种类别的文件灵活配置适宜的压缩策略和压缩算法,从而既有效节省存储空间,又避免浪费计算资源,而且,由于本方法的压缩过程对应用程序和用户透明,因此不会影响读写文件的便捷性。 | ||
搜索关键词: | 一种 文件系统 配置 实时 透明 压缩 方法 | ||
【主权项】:
一种文件系统中可配置的实时透明压缩方法,其特征在于该方法包括以下步骤:(1)由用户根据文件的扩展名或文件的文件夹路径对文件进行分类,确定需压缩文件的种类及相应的压缩算法,并将需压缩文件的种类及相应的压缩算法存储到一个配置文件中;(2)当文件系统被挂载入计算机的操作系统时,从上述配置文件中读取需压缩文件的种类及相应的压缩算法,根据读取的需压缩文件种类及相应压缩算法,在计算机内存中构建两个哈希表:第一哈希表和第二哈希表,使第一哈希表的键为文件夹路径,值为与该文件夹路径表示的文件种类相对应的压缩算法,使第二哈希表的键为文件扩展名,值为与该文件扩展名表示的文件种类相对应的压缩算法;(3)在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表,用其中的文件元数据表记录上述文件系统中每个文件的元数据,包括文件标识、文件名、父文件夹标识、文件大小、文件类型、访问权限、文件的创建时间、修改时间、访问时间和文件的扩展名以及对该文件使用的压缩算法,用其中的数据块索引表记录上述文件系统中每个文件的数据块标识以及与该数据块标识相对应的数据块的引用次数,其中数据块标识为该数据块内容的哈希值;用其中的文件组成表记录组成上述文件系统中每个文件的数据块的信息,该信息包括该数据块所属文件的文件标识、数据块起始位置、数据块大小和数据块标识,数据块起始位置和数据块大小决定了该数据块在该数据块所属文件中覆盖的数据区域;(4)利用计算机中的文件系统驱动模块,接收和响应计算机应用程序对上述文件系统发起的操作命令,该操作命令包括创建新文件夹、创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件,具体过程如下:(4‑1)当文件系统驱动模块接收到来自计算机应用程序的创建新文件夹的操作命令时,进行以下操作:(4‑1‑1)根据操作命令中被创建文件夹的父文件夹标识,在上述文件元数据表中检索出该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则通过上述文件元数据表逐级向上递归检索,得到被创建文件夹的路径,并在上述第一哈希表中检索该被创建文件夹的路径,若检索到路径,则将该检索到的路径的压缩算法作为该被创建文件夹的压缩算法,若检索不到路径,则将该被创建文件夹的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将检索到的压缩算法作为被创建文件夹的压缩算法;(4‑1‑2)在上述文件元数据表中记录被创建文件夹的元数据;(4‑2)当文件系统的驱动模块接收到来自计算机应用程序的创建新文件的操作命令时,进行以下操作:(4‑2‑1)根据操作命令中被创建文件的文件名得到被创建文件的扩展名,在上述第二哈希表中检索该被创建文件的扩展名,若检索到被创建文件的扩展名,则将与检索得到的由被创建文件的扩展名表示的文件种类相对应的压缩算法作为被创建文件的压缩算法,若检索不到被创建文件的扩展名,则根据操作命令中该被创建文件的父文件夹标识,在上述文件元数据表中检索该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则将该被创建文件的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将该压缩算法作为被创建文件的压缩算法;(4‑2‑2)在上述文件元数据表中记录被创建文件的元数据;(4‑3)当文件系统的驱动模块接收到来自计算机应用程序的向已有文件写入数据的操作命令时,进行以下操作:(4‑3‑1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应的数据块为与被写入数据区域相互重叠的首、尾两个数据块,并根据该检索到的数据块标识,从存储设备中读取与该数据块标识相对应的数据块内容;(4‑3‑2)根据操作命令中被写文件的文件标识,从上述文件元数据表中检索出被写文件使用的压缩算法,若检索结果为未使用任何压缩算法,则进行步骤(4‑3‑3),若检索结果为使用了压缩算法,则使用该压缩算法对步骤(4‑3‑1)得到的数据块内容进行解压缩;(4‑3‑3)将上述步骤(4‑3‑1)的数据块内容中或步骤(4‑3‑1)经解压缩的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数据的两侧,得到拼接后的数据及数据区域;(4‑3‑4)从上述文件组成表中检索出属于该被写文件的数据块标识、且满足与该数据块标识相对应的数据块的起始位置位于上述步骤(4‑3‑3)数据区域之内;(4‑3‑5)将与上述数据块索引表中检索到的数据块标识相对应的数据块的引用次数减1,当引用次数不为0时,进行步骤(4‑3‑6),当引用次数成为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该数据块内容,进行步骤(4‑3‑6);(4‑3‑6)将上述步骤(4‑3‑3)拼接后的数据切分成一组新数据块,并根据步骤(4‑3‑2)中的检索结果对每个新数据块做如下处理:若步骤(4‑3‑2)中的检索结果为未使用任何压缩算法,则进行步骤(4‑3‑7),若检索结果为使用了压缩算法,则使用该压缩算法对每个新数据块的内容进行解压缩;(4‑3‑7)从上述数据块索引表中分别搜索与上述(4‑3‑6)的一组新数据块或经过压缩的数据块相对应的每个数据块标识:若检索到该数据块标识,则在数据块索引表中将与该数据块标识相对应的数据块的引用次数加1,若检索不到该数据块标识,则在数据块索引表中添加该数据块标识,将与该数据块标识相对应的数据块的引用次数设置为1,并将与上述数据块标识相对应的新数据块或经过压缩的数据块存储到计算机存储设备上,在上述文件组成表中记录被写文件的文件标识、上述数据块的起始位置、上述数据块的大小以及上述数据块的标识;(4‑3‑8)根据向已有文件写入数据的操作命令,更新上述文件元数据表中被写文件的元数据;(4‑4)当文件系统的驱动模块接收到来自计算机应用程序的从文件系统的已有文件中读取数据的操作命令时,进行以下操作:(4‑4‑1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空间,并将该内存空间初始化为空白;(4‑4‑2)根据操作命令中的被读文件的文件标识、读取位置和待读取数据的大小,计算出被读文件中的待读取数据区域;(4‑4‑3)根据上述操作命令中的被读文件的文件标识,从上述文件元数据表中检索该被读文件使用的压缩算法;(4‑4‑4)根据操作命令中的被读文件的文件标识和读取位置,从文件组成表中检索属于该被读文件的数据块标识,数据块标识满足:与该数据块标识相对应的数据块是起始位置处于上述读取位置之前的数据块中的最后一个数据块,若检索到该数据块标识,且该数据块区域与步骤(4‑4‑2)的待读取数据区域存在重叠,则读取该数据块内容,并根据步骤(4‑4‑3)的检索结果对该读取的数据块内容做如下处理:若步骤(4‑4‑3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容中与步骤(4‑4‑2)的待读取数据区域的重叠部分写入步骤(4‑4‑1)的内存空间的头部,进行步骤(4‑4‑5),若步骤(4‑4‑3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容中与步骤(4‑4‑2)的待读取数据区域的重叠部分写入步骤(4‑4‑1)的内存空间的头部,进行步骤(4‑4‑5);若检索不到该数据块标识,或者与检索到的数据标识相对应的数据块区域不存在与步骤(4‑4‑2)的待读取数据区域相重叠的部分,进行步骤(4‑4‑5);(4‑4‑5)根据操作命令中的被读文件的文件标识,从文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块的起始位置处于步骤(4‑4‑2)的待读取数据区域内,并读取与检索到的每个数据块标识相对应的数据块内容,根据步骤(4‑4‑3)的检索结果对该读取的数据块内容做如下处理:若步骤(4‑4‑3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容与步骤(4‑4‑2)的待读取数据区域的重叠部分写入步骤(4‑4‑1)的内存空间中,进行步骤(4‑4‑6),若步骤(4‑4‑3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容与步骤(4‑4‑2)的待读取数据区域的重叠部分写入步骤(4‑4‑1)的内存空间的头部,进行步骤(4‑4‑6);(4‑4‑6)根据操作命令,更新上述文件元数据表中被读文件的元数据;(4‑4‑7)将上述步骤(4‑4‑1)的内存空间中的数据通过文件系统的驱动模块返回给计算机应用程序;(4‑5)当文件系统的驱动模块接收到来自计算机应用程序的删除文件系统中已有文件的操作命令时,进行以下操作:(4‑5‑1)从上述文件组成表中检索出属于被删除文件的数据块标识,在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的引用次数减1,若引用次数变为0,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从计算机存储设备上删除该数据块内容,进行步骤(4‑5‑2),若引用次数不为0,进行步骤(4‑5‑2);(4‑5‑2)从上述文件组成表中删除被删除文件的所有记录;(4‑5‑3)从上述文件元数据表中删除被删除文件的元数据。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201010271788.1/,转载请声明来源钻瓜专利网。