在文件系统中访问硬盘任意扇区的方法

文档序号:6586198阅读:346来源:国知局
专利名称:在文件系统中访问硬盘任意扇区的方法
技术领域
本发明属于在存储器系统或体系结构内存取、寻址或分配方法技术领域,尤其是一种在文件系统中访问硬盘任意扇区的方法。
背景技术
计算机系统中的文件是数据的逻辑组织和表现形式,通常要访问一个文件中的数据时,要通过文件系统的定位和组织,才能将文件按可识别的逻辑形式表现出来。文件系统在带来高效访问和合理抽象的同时,也带来了对数据访问的种种限制。在一个确定的文件系统下,用户可访问的文件存储位置会受到限制,这不但与文件系统的结构有关,也与操作系统提供的底层函数接口有关。在文件系统中访问硬盘任意扇区,仅通过文件系统是不行的。若直接由硬盘的驱动程序访问硬盘任意扇区,则修改硬盘的驱动程序将涉及到许多兼容性问题,危险性较大,而且由硬盘驱动直接提供这样的接口对上层用户程序,将会破坏硬件的封装性。

发明内容
为克服上述不足,本发明的目的在于提供一种在文件系统中访问硬盘任意扇区的方法,它可实现对指定硬盘任意扇区的非受限访问。
为完成上述发明目的,本发明采取的技术方案是一种在文件系统中访问硬盘任意扇区的方法,包括把硬盘划分为多个由确定物理位置表示的区域,对文件系统中的设备文件的访问请求用映射算法处理,激活获得当前映射因子,当访问地址处于当前可操作区时计算在此操作区中的偏移量,进行访问,如果访问地址不处于当前可操作区,则调用映射加载过程重设可操作区,更新映射因子,并根据计算后的新的可操作区中的偏移量进行访问的步骤。
区域的划分尺寸小于当前使用的文件系统可允许访问文件的最大尺寸;所说的激活方法指的是由映射算法确定一个映射因子,该映射因子作为参数传给处于操作系统内核的加载函数,由加载函数将系统中的用于表示读或写可操作区的块设备文件与该映射因子表示的硬盘上的一段用于存储数据的物理位置之间的硬盘空间联系起来;所说的映射因子指的是用一个数字表示硬盘上事先划分好的等待操作区;所说的加载函数指的是将系统中的用于表示读或写可操作区的块设备文件与当前系统维护的映射因子表示的硬盘上的一段用于存储数据的物理位置之间的硬盘空间联系起来的一段计算机程序方法;动态加载函数的加载方法包括对比计算出的映射因子与当前系统维护的映射因子,如果相同,不进行加载操作,如果不同,通过向自己添加的系统调用提出加载请求,并由该系统调用在操作系统内核态完成将系统中的用于表示读或写可操作区的块设备文件与当前系统维护的映射因子表示的硬盘上的一段物理位置之间的空间联系起来的步骤;映射算法负责计算要求访问的扇区是处于哪一个等待操作区中,并计算出对应的映射因子以及在此操作区中的位置偏移量;任意时刻硬盘上只存在一个激活的读可操作区和一个激活的写可操作区;利用处于操作系统核心态的映射加载函数动态地加载某一等待操作区到一个事先确定的文件系统中的块设备文件,通过对该文件的访问实现对硬盘上任意位置的扇区进行访问。
本发明采用增加操作系统内核提供的接口并结合现有文件系统特点实现的底层接口方案,具有显著的技术效果,它既利用了成熟操作系统与文件系统在文件访问操作上的高效性,又避免了硬盘访问空间受文件系统限制,对于在用户态的程序访问不在文件系统可操作范围内的硬盘空间提供了一种良好的解决方案,这尤其是在类似嵌入式系统的操作环境中具有很好的可应用性。


图1是本发明的硬盘操作区结构图;图2是本发明接口的操作流程图;图3是本发明等待操作区动态加载过程示意图。
具体实施例方式
一嵌入式Linux系统(一种可免费使用的多用户计算机操作系统),用硬盘作为存储设备,在其上实现系统的备份与恢复功能。为了实现备份时数据状态与恢复后数据状态的完全一致性,就要对保存在硬盘上的任意位置的所有数据实现可读写功能,但这无法仅依靠文件系统已有的对文件的操作实现。运用本发明的访问方式,使用两个Linux下的块设备文件,分别用于读数据和写数据,读和写的数据位置通过硬盘的逻辑块扇区地址来区别,通过对请求访问的逻辑块扇区地址的映射,计算把读和写的数据请求分别映射到可随时运用映射加载函数动态加载的两个设备文件上,这两个设备文件分别对应事先确定的硬盘上的物理等待操作区,从而通过对这两个设备文件不断重映射而实现对指定的任意扇区的访问机制,结果就实现了对硬盘上的任何一个扇区的数据可读写功能。
参阅图1,把硬盘的整个逻辑块地址空间划分为一个个确定大小的等待操作区1、2、3......x+1,每个等待操作区的尺寸是事先确定的。
参阅图2,上层程序请求访问系统上某一硬盘上的某一确定位置的扇区内容;该硬盘由当前系统中的硬盘编号表示,该扇区由其逻辑块地址表示,这些都作为参数传给底层接口,判断该进程的访问许可权限以及访问地址的许可限制,不同的进程具有不同的可访问地址限制,这增加了该接口的灵活性并增加了接口以及访问过程的安全性,防止未授权的恶意进程非法读写受保护的数据,访问请求得到许可后,利用映射算法对传进接口的逻辑块地址扇区地址作映射处理,得到该扇区位于哪一块等待操作区中,映射算法可以称为投影算法,其原理为根据事先确定的等待操作区的物理位置边界来确定要求访问的具体逻辑扇区位置处于哪一个等待操作区,获得表示该等待操作区的。
映射算法采用投影的原理,假设事先确定的硬盘上的等待操作区的大小为pG,现在需要访问硬盘逻辑块编号为a的扇区中的内容,则a/(p*1024*1024*1024/512)整除得b,求余得m,其中1024*1024*1024表示1G字节数,除以512表示把字节数化成扇区数,得到的b,这个数就表示当前要求访问的扇区所处的等待操作区的编号即映射因子,它从0开始,得到的m即为在此等待操作区中的偏移量。即映射因子b=取整a/(p*1024*1024*1024/512)偏移量m=求余a/(p*1024*1024*1024/512)其中a为要求访问的扇区的编号,p为事先确定的硬盘上的等待操作区的大小。
同时,利用映射算法得到表示该扇区位于哪一块等待操作区中的映射因子,判断系统是否有正在维护的映射因子,如没有,表示当前系统中没有被激活的操作区,这时应根据映射算法计算出的映射因子调用处于操作系统内核心态的动态加载函数,将计算出的映射因子表示的等待操作区与系统中用于可读或可写操作区的块设备文件联系起来,即完成一次动态加载。动态加载函数的加载方法是对比计算出的映射因子与当前系统维护的映射因子,如果相同,不进行加载操作,如果不同,通过向自己添加的系统调用提出加载请求,并由该系统调用在操作系统内核态完成将系统中的用于表示读或写可操作区的块设备文件与当前系统维护的映射因子表示的硬盘上的一段物理位置之间的空间联系起来的功能,由于这些操作步骤由计算出的映射因子的比较结果驱动,不需上层程序的干涉,所以对于调用接口的程序而言是透明的自动完成的,可以称为动态加载。假设传入操作系统内核态的映射因子为x,事先确定的硬盘上的等待操作区的大小为pG,事先确定的用于动态加载读可操作区的块设备文件为/dev/hda15,则在内核态的系统调用函数体中用hd->part数组的第16(15+1)元素指定/dev/hda15表示硬盘上起始位置为逻辑块扇区编号x*p*1024*1024*1024/512,大小为p*1024*1024*1024/512扇区,即hd->part[15].start_sect=x*p*1024*1024*1024/512(块设备文件/dev/hda15表示的哪一段硬盘存储空间的起始地址,用扇区为单位)hd->part[15].nr_sects=p*1024*1024*1024/512,(块设备文件/dev/hda15表示的哪一段硬盘存储空间所占的大小,用扇区为单位)此时就把映射因子(从0开始)X表示的等待操作区加载为当前读可操作区,至此一个加载过程结束,该读可操作区现在可以通过/dev/hda15访问。同时,此时用于表示当前系统中可读或可写操作区的映射因子即为系统维护的激活映射因子;判断系统是否有正在维护的映射因子,如有,表示当前系统中已经存在被激活的操作区,这时将根据映射算法计算出的映射因子与当前系统维护的映射因子相比较,如果相同,表明当前指定要访问的扇区正好处于当前系统中的可读或可写操作区中,这时不需动态加载函数作处理,只要根据这次映射算法得到的偏移量访问即可,如果这次计算出的映射因子与系统当前维护的映射因子不同,表明此次要求访问的扇区位于系统中当前没有被激活的等待操作区中,此时,调用处于操作系统内核态的动态加载函数,重新将计算出的新的映射因子表示的等待操作区与系统中用于可读或可写操作区的块设备文件联系起来,即完成一次动态加载,同时,此时用于表示当前系统中可读或可写操作区的映射因子即为系统维护的激活映射因子,即以前的激活映射因子被现在这次计算出的新的映射因子替换,经过上述步骤,此时根据映射算法得到的偏移量地址就可访问该指定扇区。
任意时刻硬盘上只存在一个激活的读可操作区和一个激活的写可操作区,物理上的等待操作区激活后就成为可操作区,可操作区对应系统中的一个确定的设备文件。参阅图3,激活的物理等待操作区即可操作区由一个映射因子表示,动态加载前读映射因子n,动态加载前写映射因子m,动态加载后读映射因子x,动态加载后写映射因子y,每一个物理等待操作区的位置在硬盘上是不变的,但映射因子是随激活的物理等待操作区而变化的,通过对请求访问的扇区位置进行映射计算使打开设备文件时的请求访问均处于可操作区之内,这是通过变化映射因子重新对应激活的物理等待操作区来实现的。利用处于操作系统核心态的映射加载函数动态的加载该等待操作区到一个事先确定的设备文件,通过对该文件的访问实现对硬盘上任意位置的扇区进行访问。
权利要求
1.一种在文件系统中访问硬盘任意扇区的方法,其特征在于它包括以下步骤(a)把硬盘划分为多个由确定物理位置表示的区域;(b)对文件系统中的设备文件的访问请求用映射算法处理,激活获得当前映射因子,当访问地址处于当前可操作区时计算在此操作区中的偏移量,进行访问;(c)如果访问地址不处于当前可操作区,则调用映射加载过程重设可操作区,更新映射因子,并根据计算后的新的可操作区中的偏移量进行访问。
2.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于区域的划分尺寸小于当前使用的文件系统可允许访问文件的最大尺寸。
3.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于所说的激活方法指的是由映射算法确定一个映射因子,该映射因子作为参数传给处于操作系统内核的加载函数,由加载函数将系统中的用于表示读或写可操作区的块设备文件与该映射因子表示的硬盘上的一段用于存储数据的物理位置之间的硬盘空间联系起来。
4.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于所说的映射因子指的是用一个数字表示硬盘上事先划分好的等待操作区。
5.根据权利要求3所述的在文件系统中访问硬盘任意扇区的方法,其特征在于所说的加载函数指的是将系统中的用于表示读或写可操作区的块设备文件与当前系统维护的映射因子表示的硬盘上的一段用于存储数据的物理位置之间的硬盘空间联系起来的一段计算机程序方法。
6.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于映射算法负责计算要求访问的扇区是处于哪一个等待操作区中,并计算出对应的映射因子以及在此操作区中的位置偏移量。
7.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于任意时刻硬盘上只存在一个激活的读可操作区和一个激活的写可操作区。
8.根据权利要求1所述的在文件系统中访问硬盘任意扇区的方法,其特征在于利用处于操作系统核心态的加载函数动态地加载某一等待操作区到一个事先确定的文件系统中的块设备文件,通过对该文件的访问实现对硬盘上任意位置的扇区进行访问。
9.根据权利要求5所述的在文件系统中访问硬盘任意扇区的方法,其特征在于所说的动态加载函数的加载方法进一步包括以下步骤对比计算出的映射因子与当前系统维护的映射因子,如果相同,不进行加载操作,如果不同,通过向自己添加的系统调用提出加载请求,并由该系统调用在操作系统内核态完成将系统中的用于表示读或写可操作区的块设备文件与当前系统维护的映射因子表示的硬盘上的一段物理位置之间的空间联系起来。
全文摘要
本发明属于在存储器系统或体系结构内存取、寻址或分配方法技术领域。包括把硬盘划分为多个由确定物理位置表示的区域,对文件系统中的设备文件的访问请求用映射算法处理,激活获得当前映射因子,当访问地址处于当前可操作区时计算在此操作区中的偏移量,进行访问,若访问地址不处于当前可操作区,则调用映射加载过程重设可操作区,更新映射因子,根据计算后的新可操作区中的偏移量进行访问的步骤。它可解决数据访问受限、仅通过文件系统不能访问硬盘任意扇区、由硬盘驱动程序访问硬盘任意扇区存在改写驱动程序接口带来安全性等问题,具有很好的可应用性,尤其适用于类似嵌入式系统的操作环境。
文档编号G06F12/06GK1480849SQ0212938
公开日2004年3月10日 申请日期2002年9月6日 优先权日2002年9月6日
发明者张鹏, 柯克, 张 鹏 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1