一种操作系统及其文件缓存定位方法

文档序号:6385575阅读:187来源:国知局
专利名称:一种操作系统及其文件缓存定位方法
技术领域
本发明涉及虚拟文件系统领域,尤其涉及一种操作系统及其文件缓存定位方法。
背景技术
在对各个操作系统进行操作时,经常需要对文件缓存进行定位,而对文件缓存定位方法的设计直接影响着操作系统在文件访问方面的性能表现,是加速文件访问,减少磁盘I/o操作的关键设计。在现有技术中,Linux等其它开源操作系统在各自虚拟文件系统的缓存设计中采用了其它有效的文件缓存定位方法。例如Linux操作系统中针对文件节点设计了哈希表,并利用哈希算法定位具体的节点缓存。经过发明人反复仔细的研究,提出了一种新的文件缓存定位方法,该方法实现了对文件缓存的定位,并且具有加速文件访问,减少磁盘I/o操作等优点。

发明内容
本发明所要解决的技术问题之一是需要提供一种加速文件访问的新的文件缓存定位方法。为了解决上述技术问题,本发明提供了一种文件缓存定位方法,该方法包括在访问文件时,获取该文件的文件索引,其中,所述文件索引是利用二进制序列来表示的该文件中当前所要访问的位置;将所述文件索引转换为转换表访问标识;判断该文件的转换表中是否存在与所述转换表访问标识对应的表项,若存在,则基于所述表项来获取缓存块访问地址;其中,所述转换表用于存储与转换表访问标识对应的表项,所述表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。根据本发明另一方面的文件缓存定位方法,将所述文件索引的二进制序列划分为三个以上字段,并将所述三个以上字段作为转换表访问标识,其中,至少包括缓存块偏移字段、缓存块索引字段和缓存表索引字段。根据本发明另一方面的文件缓存定位方法,根据缓存块的大小来确定所述缓存块偏移字段所占的比特位数。根据本发明另一方面的文件缓存定位方法,根据文件的缓存块个数来确定所述缓存块索弓I字段所占的比特位数。根据本发明另一方面的文件缓存定位方法,在该文件的转换表中不存在与所述转换表访问标识对应的表项时,则进一步包括根据所述转换表访问标识,在所述转换表中创建与各个字段对应的各级表,其中,各级表被定义为结构体,且各级表指向下一级表;从空闲缓存区内选取一缓存块,将该缓存块与所述转换表访问标识相关联,其中所述空闲缓存区是一个存放可用空闲缓存的栈结构;将该缓存块的地址存入相应的表的表项中。根据本发明另一方面的文件缓存定位方法,在将所述文件索引的二进制序列划分为三个字段,并将所述三个字段作为转换表访问标识时,将在所述转换表中创建的各级表,按照由高到低的级别依次设定为与缓存表索引字段对应的二级表、与缓存块索引字段对应的一级表和与缓存块偏移字段对应的零级表,其中,在所述二级表的各个表项中存放一级表的起始地址,在所述一级表的各个表项中存放缓存块的地址,与所述零级表所对应的缓存块偏移字段表示缓存块内偏移地址;进一步将缓存块的地址存入一级表的表项中。根据本发明另一方面的文件缓存定位方法,若没有空闲缓存区,则利用内核中的回收线程来回收缓存块,再从回收后的缓存块中选取一缓存区,将该缓存块与所述转换表访问标识相关联。根据本发明另一方面,还提供了一种操作系统,执行以下步骤来对文件缓存进行定位在访问文件时,获取该文件的文件索引,其中,所述文件索引是利用二进制序列来表示的该文件中当前所要访问的位置;将所述文件索引转换为转换表访问标识;判断该文件的转换表中是否存在与所述转换表访问标识对应的表项,若存在,则基于所述表项来获取缓存块访问地址;其中,所述转换表用于存储与转换表访问标识对应的表项,所述表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。根据本发明另一方面的操作系统,在该文件的转换表中不存在与所述转换表访问标识对应的表项时,则进一步包括根据所述转换表访问标识,在所述转换表中创建与各个字段对应的各级表,其中,各级表被定义为结构体,且各级表指向下一级表;从空闲缓存区内选取一缓存块,将该缓存块与所述转换表访问标识相关联,其中所述空闲缓存区是一个存放可用空闲缓存的栈结构;将该缓存块的地址存入相应的表的表项中。根据本发明另一方面的操作系统,在将所述文件索引的二进制序列划分为三个字段,并将所述三个字段作为转换表访问标识时,将在所述转换表中创建的各级表,按照由高到低的级别依次设定为与缓存表索引字段对应的二级表、与缓存块索引字段对应的一级表和与缓存块偏移字段对应的零级表,其中,在所述二级表的各个表项中存放一级表的起始地址,在所述一级表的各个表项中存放缓存块的地址,与所述零级表所对应的缓存块偏移字段表示缓存块内偏移地址;进一步将缓存块的地址存入一级表的表项中。与现有技术相比,本发明的一个或多个实施例可以具有如下优点本发明方法根据用户访问文件时提供的文件索弓I,结合转换表(也称多级转换表),将文件索引转换为多级转换表访问标识,从而快速定位到对应的文件缓存。利用多级转换表能快速、准确的定位文件缓存,进一步加快了文件访问,减少磁盘I/o操作。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。


附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中图1是根据本发明实施例的文件缓存定位方法的流程示意图;图2是根据本发明实施例的多级转换表的结构示意图;图3是根据本发明实施例的创建三级转换表的流程示意图。
具体实施例方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1是根据本发明实施例的文件缓存定位方法的流程示意图,下面参考图1来详细说明本实施例的各个步骤。步骤S110,在用户访问文件时,获取该文件的文件索引,并将该文件索引转换为多级转换表访问标识(简称转换表访问标识),其中,文件索引是利用二进制序列来表示的该文件中当前所要访问的位置。需要说明的是,文件索引是在用户打开文件时自动获取的。这个索引一般存放在于文件相关的数据结构中,其值由根据实际运行状况更新。一般情况下,初次打开文件时,文件索引默认为在文件中的起始位置。当然,文件索引还可以为在文件中的终止位置或上一次关闭文件时文件中的位置。在将文件索引转换为多级转换表访问标识时,具体地,将文件索引的二进制序列划分为三个以上字段,并将三个以上字段作为转换表访问标识,其中,至少包括缓存块偏移字段、缓存块索引字段和缓存表索引字段。这三个字段具体设置如下缓存块内偏移字段,该字段用于定位缓存块内偏移,该字段的值是根据文件索引以及缓存块大小计算出来的。该字段所占的比特位数由缓存块大小决定,对于一个256KB大小的缓存块,该字段占18位。缓存块索引字段,该字段用于定位对应的文件缓存块,该字段的值也需要根据文件索引计算,但和缓存块大小无关,而是和文件缓存个数有关,比如定位1024个文件缓存,则该字段占10位,定位2048个文件缓存,则该字段占11位。缓存表索引字段,该字段用于定位存放缓存块的表。需要说明的是,如果转换表内的字段无法满足更多的缓存块需求,可以增加新的索引字段,可以增加到四个或五个字段。一般情况下,在32位系统中,假设缓存块索引字段固定为10位,如果缓存块大小为256K,那么缓存表索引字段、缓存块索引字段和缓存块偏移字段的字节长度分别为4位、10位和18位;如果在64位系统中,那么缓存表索引字段、缓存块索引字段和缓存块偏移字段的字节长度分别为10位、10位和18位,但此时只用了 64位中的38位,所以可以选择增加第四个字段、第五个字段、第六个字段以满足访问需求。可见索引字段个数受系统、缓存块索引字段大小和缓存块大小的影响。举例而言,当所要访问文件中的位置是起始位置时,则该位置的文件索引是“1”,若操作系统此时是32位的,则表示“I”的二进制序列为“00000000000000000000000000000001”,如果缓存块大小为256K,则十六进制为0x40000,那么下面看如何将文件索引转为访问结构的转换表访问标识。首先计算缓存块偏移字段,用“文件索引& (256K-1)”就能计算出偏移字段为I ;其次计算缓存块索引字段,由于32位系统中缓存块索引字段占18位到27位,所以将32位文件索引右移18位后取10位,那缓存块索引字段就为O ;最后计算缓存表索引字段,由于32位系统中缓存表索引字段占高4位,即28位到31位,所以将32位文件索引右移28位后取4位,那缓存表索引字段就为O。需要说明的是,在确定了多级转换表标识后,能够从多级转换表中快速定位缓存块(所要访问位置的文件的缓存)。步骤S120,判断该文件的转换表(也称多级转换表)中是否存在与转换表访问标识对应的表项,若存在,则基于表项来获取该缓存块访问地址,否则,进入步骤S130。其中,转换表用于存储与转换表访问标识对应的表项,表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。需要说明的是,文件中的多级转换表并不一定是一个完整的转换表,也就是说,该多级转换表中并非存储了与文件中的所有位置对应的缓存块地址。对于文件的多级转换表的补充,是在每次用户访问文件中不同的位置时进行的,随着用户访问了文件中所有位置,文件的多级转换表最终会被完善。举例而言,用户在系统内初次访问A文件时,从A文件中的Xl位置处读取文件内容,而Xl位置处的文件数据对应于多级转表内的Yl缓存块,此时对A文件内的多级转换表相关表项进行初始化,并设置Yl缓存块的地址到多级转换表中。下次用户再从Xl位置处访问该文件时,就不必再初始化Yl缓存块相关的转换表项。当用户从文件中的X2位置处读取文件内容时,多级转换表为X2位置处的文件数据分配Y2缓存块,并初始化相关的转换表项,下次用户再从X2位置处访问该文件时,就不必再初始化Y2缓存块相关的转换表项。随着系统的运行以及对A文件访问次数的增加,文件A相关的多级转换表表项逐渐初始化完毕。由此可见,多级转换表的初始化过程并不是一蹴而就的。然而,一般文件中的访问位置被设置在文件中的起始位置,因此,一般仅对该位置创建了相应的表项,就可以在二次访问时,不需要从硬件中读取文件内容,能够提高访问速度。具体地,在多级转换表中,为各个级别的表定义了结构体,并且每级结构体中存有下一级表结构体的指针,所以根据最高级表结构体能依次找到下一级表。通过上述各级表之间的联系,能够形成针对每一个转换表访问标识对应的一系列表项。如图2所不,其表不的是一个32位系统,如果缓存块大小为256K,且I级表设置为10位,那么转换表访问结构中的O级表、I级表和2级表这3个字段各自所占比特数分别是18、10和4位。如该表所示,2级表用来定位I级表的地址,I级表用来定位缓存块的地址,即在I级表的各个表项中存储有缓存块的地址,与O级表对应的缓存块内偏移字段表示缓存块内偏移地址。通过该表可以细粒化地查找到所要访问位置的文件缓存地址。例如,转换表访问标识为步骤SllO中的例子,即32位文件索引换算为多级转换表访问字段后,2级表、I级表和O级表的十进制分别为0、0和1,从图2的表中查找是与该标识对应的表项,即,依次查找2级表项O、2级表项O所指向的I级表项O、I级表项O所指向的缓存块地址,O级表中该缓存块的块内偏移地址(为I)。因此,通过上述操作可以得到文件索引为“I”的文件中访问位置的文件缓存,利用多级转换表来定位缓存块,不仅能够获取缓存块的地址,而且还能得到块内偏移,使得能够更加精确地定位文件缓存。步骤S130,在多级转换表中创建与多级转换表标识对应的表项。在多级转换表中创建与多级转换表标识对应的表项时,首先根据转换表访问标识,在转换表中创建与各个字段对应的各级表,其中,各级表被定义为结构体,且各级表指向下一级表;然后,从空闲缓存区内选取一缓存块,将该缓存块与转换表访问标识相关联,其中空闲缓存区是一个存放可用空闲缓存的栈结构;最后将该缓存块的地址存入相应的表的表项中。在将文件索引按照不同比特位数划分为由三个字段表示的转换表访问标识时,将在转换表中创建各级表,按照由高到低的级别依次设定为与缓存表索弓I字段对应的二级表、与缓存块索引字段对应的一级表和与缓存块偏移字段对应的零级表,其中,在二级表的各个表项中存放一级表的起始地址,在一级表的各个表项中存放缓存块的地址,与零级表所对应的缓存块偏移字段表示缓存块内偏移地址;进一步将缓存块的地址存入一级表的表项中。需要说明的是,在从空闲缓存区内分配缓存块时,如果没有空闲的缓存块,则唤醒内核中的回收线程回收缓存块,然后再分配缓存块。需要说明的是,空闲缓存区表示的是可被直接用作文件缓存的缓存,空闲缓存区实际上就是一个存放可用空闲缓存的栈结构,系统内的空闲缓存都由这个空闲缓存栈管理,任何空闲缓存的分配都来自于此。如果空闲缓存栈为空,表示系统内无可用空闲缓存。空闲缓存栈的具体数据结构可由数组实现,这是一种较简单的实现方法。图3是根据本发明实施例的创建三级转换表的流程示意图,参考图3来说明三级转换表的创建流程。S310,获取文件索引。S320,将文件索引转换为转换表访问标识。S330,创建最高一级转换表(即2级表),并初始化最高一级转换表。S340,创建下一级转换表(即I级表),也就是缓存块索引表。S350,将缓存块索引表的地址存入最高一级表中,初始化缓存索引表。S360,分配缓存块。S370,将缓存块地址存入缓存块索引表中,初始化完毕。本发明实施例中涉及到的多级转换表的相应表项构建和文件访问过程中定位缓存的流程是结合在一起的,并不是完成多级转换表中所有表项的初始化工作才开始使用转换表标识定位文件缓存的。多级转换表相应表项的构建是在用户访问文件时触发的,初始化过程和文件缓存定位密切相关,并且只要系统不出现异常,就能够正确定位到文件缓存。当用户再次访问该文件中的位置时,直接利用该位置的文件索引从多级转换表中获取到相应缓存块,最终定位缓存块访问位置,加快了文件缓存定位。另外,本发明还涉及一种通过执行上述步骤来实现文件缓存定位的操作系统。需要说明的是,本发明方法可以作为一个模块应用在现有操作系统中,实现文件缓存定位功能。本发明实现的文件缓存定位方法并不是在虚拟文件系统缓存区中定位缓存,而是在与文件对应的多级转换表中定位缓存,即从缓存区中分配缓存,并将缓存地址存入表内,然后利用文件索引在多级转换表中定位文件缓存。另外,构建与访问位置对应的多级表的表项是在用户访问文件时触发的,并且不是一次初始化就完成整个多级转换表。用户访问同一文件对象的同一文件缓存时,如果是第一次访问,则会执行构建与访问位置对应的多级表的表项的流程,但后续的访问则不需要再重复执行,直接从多级转换表中获取文件缓存即可。不过需要注意的是,如果该文件长期不被访问,则多级转换表内的文件缓存可能被线程回收,这样再访问该文件时仍然要进行多级转换表的初始化流程。本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
权利要求
1.一种文件缓存定位方法,其特征在于,包括: 在访问文件时,获取该文件的文件索引,其中,所述文件索引是利用二进制序列来表示的该文件中当前所要访问的位置; 将所述文件索引转换为转换表访问标识; 判断该文件的转换表中是否存在与所述转换表访问标识对应的表项,若存在,则基于所述表项来获取缓存块访问地址; 其中,所述转换表用于存储与转换表访问标识对应的表项,所述表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。
2.根据权利要求1所述的文件缓存定位方法,其特征在于, 将所述文件索引的二进制序列划分为三个以上字段,并将所述三个以上字段作为转换表访问标识,其中, 至少包括缓存块偏移字段、缓存块索引字段和缓存表索引字段。
3.根据权利要求2所述的文件缓存定位方法,其特征在于, 根据缓存块的大小来确定所述缓存块偏移字段所占的比特位数。
4.根据权利要求3所述的文件缓存定位方法,其特征在于, 根据文件的缓存块个数来确定所述缓存块索引字段所占的比特位数。
5.根据权利要求2所述的文件缓存定位方法,其特征在于,在该文件的转换表中不存在与所述转换表访问标识 对应的表项时,则进一步包括: 根据所述转换表访问标识,在所述转换表中创建与各个字段对应的各级表,其中,各级表被定义为结构体,且各级表指向下一级表; 从空闲缓存区内选取一缓存块,将该缓存块与所述转换表访问标识相关联,其中所述空闲缓存区是一个存放可用空闲缓存的栈结构; 将该缓存块的地址存入相应的表的表项中。
6.根据权利要求5所述的文件缓存定位方法,其特征在于,在将所述文件索引的二进制序列划分为三个字段,并将所述三个字段作为转换表访问标识时, 将在所述转换表中创建的各级表,按照由高到低的级别依次设定为与缓存表索引字段对应的二级表、与缓存块索引字段对应的一级表和与缓存块偏移字段对应的零级表,其中,在所述二级表的各个表项中存放一级表的起始地址,在所述一级表的各个表项中存放缓存块的地址,与所述零级表所对应的缓存块偏移字段表示缓存块内偏移地址; 进一步将缓存块的地址存入一级表的表项中。
7.根据权利要求5所述的文件缓存定位方法,其特征在于, 若没有空闲缓存区,则利用内核中的回收线程来回收缓存块,再从回收后的缓存块中选取一缓存区,将该缓存块与所述转换表访问标识相关联。
8.一种操作系统,其特征在于,执行以下步骤来对文件缓存进行定位: 在访问文件时,获取该文件的文件索引,其中,所述文件索引是利用二进制序列来表示的该文件中当前所要访问的位置; 将所述文件索引转换为转换表访问标识; 判断该文件的转换表中是否存在与所述转换表访问标识对应的表项,若存在,则基于所述表项来获取缓存块访问地址;其中,所述转换表用于存储与转换表访问标识对应的表项,所述表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。
9.根据权利要求8所述的操作系统,其特征在于,在该文件的转换表中不存在与所述转换表访问标识对应的表项时,则进一步包括: 根据所述转换表访问标识,在所述转换表中创建与各个字段对应的各级表,其中,各级表被定义为结构体,且各级表指向下一级表; 从空闲缓存区内选取一缓存块,将该缓存块与所述转换表访问标识相关联,其中所述空闲缓存区是一个存放可用空闲缓存的栈结构; 将该缓存块的地址存入相应的表的表项中。
10.根据权利要求9所述的操作系统,其特征在于,在将所述文件索引的二进制序列划分为三个字段,并将所述三个字段作为转换表访问标识时, 将在所述转换表中创建的各级表,按照由高到低的级别依次设定为与缓存表索引字段对应的二级表、与缓存块索引字段对应的一级表和与缓存块偏移字段对应的零级表,其中,在所述二级表的各个表项中存放一级表的起始地址,在所述一级表的各个表项中存放缓存块的地址,与所述零级表所对应的缓存块偏移字段表示缓存块内偏移地址; 进一步将缓存块的地址存入一级表的表项中。
全文摘要
本发明公开了一种操作系统及其文件缓存定位方法,该方法包括在访问文件时,获取该文件的文件索引;将所述文件索引转换为转换表访问标识;判断该文件的转换表中是否存在与所述转换表访问标识对应的表项,若存在,则基于所述表项来获取缓存块访问地址;否则,在转换表中创建与多级转换表标识对应的表项。其中,转换表用于存储与转换表访问标识对应的表项,所述表项用于指向与该文件的不同访问位置相对应的缓存块访问地址。本发明方法根据用户访问文件时提供的文件索引,结合转换表,将文件索引转换为多级转换表访问标识,从而快速定位到对应的文件缓存。利用转换表能快速、准确定位文件缓存,进一步加快文件访问,减少磁盘I/O操作。
文档编号G06F17/30GK103077198SQ20121057572
公开日2013年5月1日 申请日期2012年12月26日 优先权日2012年12月26日
发明者赵羽 申请人:中标软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1