自分类自存储文件系统
摘要文件系统是操作系统中的一个重要组成部分,传统系统采用路径的方式查找文件,但面对越来越多的文件这种文件查找方式不堪复用,因此需要提出一种新的文件查找方式。不需要人工干预就可以完成对文件的存储分类和查找。本文基于linux0.12内核分析实验,代码量适中且没有其他文件子系统。
【关键词】操作系统 文件系统 数据结构
文件系统是操作系统中的一个重要组成部分,传统系统采用路径的方式查找文件,但面对越来越多的文件这种文件查找方式不堪复用,因此需要提出一种新的文件查找方式。不需要人工干预就可以完成对文件的存储分类和查找。本文基于linux0.12内核分析实验,代码量适中且没有其他文件子系统。
1 理论说明
Linux文件系统中在查找文件时,需要用户提供路径,系统根据路径找到文件的i节点,通过i节点号找到文件由于软连接的存在,因此一个文件允许存在多个i节点号但一个节点号只对应一个文件,因此记录文件的任意i节点号就可以找到文件。
主要思路:通过为每个文件建立一套权限区分体系,使文件按照类别以及所属的应用程序进行区分,操作系统借助这个体系不使用繁杂的拓展名对文件分类的方式就可以完成对同类型文件的分类管理。
2 具体实现
2.1 前期的准备工作
(1)在file_table.c中的fs.h下数据结构dir_entry 写入两个变量分别为
i_right
i_app (application)
定义如下:i_right表示文件的调用权限,并做出规定,1为文本文件,2为图像,以此类推,0被认为是所有类型文件。
I_app表示文件所属的应用程序,0代表所有程序都允许调用,否则写入每个应用程序的唯一编码。
(2)创建哈希表,分别对应i_right 和对应类型的文件的上一层(父一层)i 节点号,从而可以通过不同的分类直接进入到本类型文件的存储位置之中。
创建哈希表,分别对应 i_right和目录的 filepath 。为了尽量少的对原有文件系统的修改而增加的一张表,linux中的查找操作都是基于路径间接查找,为了利用原有代码而不需要做大幅度改动原有结构因此增加这一张表,在文件系统中系统通过路径找到i节点号再找到文件,并因为路径具有唯一对应的文件,而每一个i节点也可以找到唯一对应的文件且与路径存在一一对应关系(详见fs.h下dir_entry结构体),因此在实际试验中某些需要传入路径作为参数的函数不再进行修改,使用路径近似代替i节点号。
建立一个二级列表,第一级可以通过i_app找到第二级的列表,第二级中的列表可以通过i_right找到对应文件的文件名,i节点号
2.2 文件存入的过程
文件在存入时需要两个参数,先传入i_right,系统查找哈希表获得对应文件的上一层i节点,并将文件存入这个位置,这样就实现了文件的自动存储,构成物理曾。再传入i_app,系统将参数写入二级列表,实现文件的集中管理,构成逻辑层。
2.3 查询文件的过程
在内核open.c的open函数中增加2.1中的两个参数,应用程序在读出文件时需要提供目标文件的i_app,系统会返回属于应用程序的所有文件列表,再传入一个i_right就可以返回同时满足两个条件的文件,也就是当前应用程序可以调用的并且满足分类要求的文件。
2.4 对第二部分的总结
在文件查询部分的描述中我们基本能够得到结论,对于文件系统的修改基于原有文件系统并不复杂但是可以有效屏蔽中间路径。在应用程序保存文件时用户可以直接选择文件类型找到文件的上一层目录,调用函数如下
open.cint sys_close (unsigned int fd)
{return sys_open(pathname,o_creat|o_trunc,mode)}
对其进行修改或重载,本文将路径与i节点号建立一张表来完成转换。因此当文件存入时只要有完整的i_right和i_app就可以实现文件的自动存储,i_app可以通过应用程序自动写入,而i_right需要用户判断或者应用程序的干预。
3 进一步设想
在这一部分中不提供具体试验内容。提供一个新的思路,即新文件系统。目的:为统一各种设备并能够实现文件的完全分类。实现一种跨平台的文件传输以及自动分类存储。
3.1 主要思路
创造一个完整,半封闭的文件管理体系,文件在被建立时就已经完成了对文件的分类和从属的设置,当这个文件被其他设备拷贝时,这些参数随着文件被保留下来,成为其他设备进行自动分类,自动存储,快速查找的依据。这就成为新系统的主要的结构。
3.2 实现
在第二部分的基础上进行进一步的修改。在应用程序创建文件时,通过自动或者用户输入的方式完成对文件参数的写入过程。
(1)在用户调用时,不再使用原有的文件资源管理程序,用户调用文件时需要通过应用程序进行调用,这样就可以有效利用程序的不同编码完成对文件的基本定位甚至精确查找。
(2)在应用程序删除时,将二级列表下的每一个项目均级联删除。
(3)在文件被传输时,只允许i_app相同的两个应用程序之间进行传输,传输中所有的信息被一同输送,在目标端依照既定原则进行自动存储以及写入对应表。
4 应用价值
(1)家用设备以及移动设备。在使用同一个文件系统的各个设备上,文件被自动分类存放,用户只需要提供概略的分类就可以找到文件所在的概略位置而且通过应用程序可以更加快速找到文件,避免卸载。
(2)云存储。在云存储中,可以将参数i_app作为用户的身份识别,可以利用文件系统的逻辑层完成对用户数据的管理。
参考文献
[1]赵炯.linux内核完全剖析-基于0.12内核[M].北京:机械工业出版社,2009(11).
[2]博韦.深入理解LINUX内核[M].北京: 中国电力出版社,2004(6).
[3]Brian W.Kernighan,Dennis M.Ritchie,徐宝文,李志译.The C Programming Language[M].北京:机械工业出版社,2003(11).
作者单位
中国石油大学(华东)山东省青岛市257061