一种嵌入式系统中文件系统的缓冲方法及系统的制作方法

文档序号:6524129阅读:193来源:国知局
一种嵌入式系统中文件系统的缓冲方法及系统的制作方法
【专利摘要】本发明公开了一种嵌入式系统中文件系统的缓冲方法及系统,该方法主要包括:设置文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量PA;将磁盘内的缓冲区设为两个区域,分别为第一缓冲区BufA和第二缓冲区BufB,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区;嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,判断此次磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区。本发明通过建立独立的文件分配表FAT缓冲区,避免了因文件数据区的访问竞争过大造成文件分配表的访问失败,提高了系统的吞吐能力。
【专利说明】一种嵌入式系统中文件系统的缓冲方法及系统
【技术领域】
[0001]本发明属于数据通信【技术领域】,涉及一种文件系统的缓冲方法及系统,具体是一种嵌入式系统中文件系统的缓冲方法及系统的设计。
【背景技术】
[0002]操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
[0003]在嵌入式系统的文件系统中,包括FAT16、FAT32在内的大多数磁盘系统,其磁盘内部的分布形式基本上是:根目录区+文件分配表+文件数据区这种结构,其中文件分配表和文件数据区统称为系统区,但是文件分配表占用磁盘空间的比例很小,大部分是文件数据区。为了提高性能,文件系统基本上都会分配一小段内存,作为磁盘的缓冲,缓冲区以扇区为单位进行缓冲,并按照一定的算法,在缓冲和磁盘间调度。磁盘缓冲看作为整个磁盘,是一个一个扇区,并不区分哪里是数据区,哪里是文件分配表,对整个磁盘的所有扇区统一缓冲。文件分配表部分的扇区访问特点是:访问频繁、每次访问数据量少,访问有连续性、就近性、重复性;数据区部分扇区访问特点是:单次访问数据量大,数据较少且,具且很少重复访问。由于嵌入式系统磁盘缓冲区大小有限,常常有文件分配表给数据区让路的情况,而文件分配表全部恰恰是需要频繁访问的,因而它频繁的失效,需要频繁的从磁盘刷新。对于SD卡或flash磁盘系统,文件分配表碎片化的访问会带来大量的扇区擦除和搬移动作;对于硬盘光盘这样的磁盘,会让机械磁头在文件分配表和数据区间频繁移动,对磁盘的总体性能有很大影响。

【发明内容】

[0004]本发明所要解决的技术问题是针对现有的嵌入式系统中的文件系统中文件分配表的访问与数据区的访问存在冲突的缺点,提供一种嵌入式系统中文件系统的缓冲方法及缓冲系统。
[0005]本发明解决其技术问题采用的技术方案是:一种嵌入式系统中文件系统的缓冲方法,具体包括:
[0006]S1、设置文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa ;
[0007]S2、将磁盘内的缓冲区cache划分为第一缓冲区和第二缓冲区两个区域,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区;
[0008]S3、嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,判断此次磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于或等于文件分配表FAT在磁盘内的结束位置,所述文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa,则访问请求传递到第一缓冲区,否则访问请求传递到第二缓冲区。
[0009]进一步的,所述步骤SI具体为:读取磁盘内的引导扇区,根据引导扇区中文件分配表FAT的数目和每个文件分配表FAT的大小,计算出文件分配表FAT在磁盘内的结束位置。
[0010]进一步的,所述第二缓冲区的区域大小大于第一缓冲区的区域大小。
[0011]进一步的,所述步骤S2还包括:修改磁盘驱动的描述句柄,将磁盘描述句柄的数据成员的缓冲修改为两个数据成员,分别为DiskCacheFat和DiskCacheDat,并在cache初始化时分别对DiskCacheFat和DiskCacheDat两个数据成员进行初始化,使其缓冲指针分别指向第一缓冲区和第二缓冲区,缓冲大小分别设置为第一缓冲区和第二缓冲区的大小。
[0012]进一步的,在进行所述步骤S3之前,还包括:将底层磁盘扇区的读写函数参数增加一个cache指针参数,所述cache指针参数用于指明文件系统输入输出请求向哪个cache发起。
[0013]进一步的,所述步骤S3具体为:嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,请求参数中包含有起始需要访问的磁盘扇区号,记为Secld,如果SecId小于或等于Pa,则用DiskCacheFat作为参数,调用读写函数向文件分配表FAT缓冲区第一缓冲区发起读写请求;如果SecId大于Pa,则用DiskCacheDat作为参数,调用读写函数向文件数据的缓冲区第二缓冲区发起读写请求。
[0014]更进一步的,所述cache收到上层的读写请求后,DiskCacheFat参数与DiskCacheDat参数按照磁盘缓冲调度策略进行调度,从缓冲区中直接返回数据给上层软件;当cache中没有读写请求需要访问的数据,则直接从磁盘中读取数据返回给上层软件,并缓冲到cache中。
[0015]本发明为了解决技术问题还提供了一种嵌入式系统中文件系统的缓冲系统,该系统具体包括:磁盘访问判断模块、文件分配表FAT缓冲区和文件数据缓冲区;所述文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa ;磁盘内的缓冲区分两个区域,分别为第一缓冲区和第二缓冲区,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区;所述磁盘访问判断模块用于根据磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于Pa,则访问请求传递到第一缓缓冲区,否则访问请求传递到第二缓缓冲区。
[0016]进一步的,所述第二缓冲区的区域大小大于第一缓冲区的区域大小。
[0017]进一步的,底层磁盘扇区的读写函数参数还包括一个cache指针参数,所述cache指针参数用于指明文件系统输入输出请求向哪个cache发起。
[0018]本发明的有益效果是:本发明一种嵌入式系统中文件系统的缓冲方法及系统通过在磁盘缓冲区建立独立的文件分配表缓冲区和文件数据缓冲区,将文件分配表与数据区的访问分隔开,由请求访问的扇区号判断需要访问的是文件分配表或者文件数据区,从而避免了因文件数据区的访问竞争过大造成文件分配表的访问失败,提高了系统的吞吐能力。
【专利附图】

【附图说明】
[0019]图1为本发明实施例的一种嵌入式系统中文件系统的缓冲方法的流程框图;[0020]图2为本发明实施例的FAT32引导扇区的结构示意图;
[0021]图3为本发明实施例的一种嵌入式系统中文件系统的缓冲系统的系统框图。
【具体实施方式】
[0022]下面结合附图和具体的实施例对本发明作进一步的阐述。
[0023]如图1所示为本发明实施例的一种嵌入式系统中文件系统的缓冲方法的流程框图,具体包括:
[0024]S1、设置文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa ;
[0025]其具体为:读取磁盘内的引导扇区,根据引导扇区中文件分配表FAT的数目和每个文件分配表FAT的大小,计算出文件分配表FAT在磁盘内的结束位置,其结束位置在磁盘内设为内存变量Pa。
[0026]例如:所述引导扇区以FAT32为例,其结构如图2所示,其中偏移16处number ofFATs,偏移36处sectors per FAT,根据这两个参数可以计算出FAT区大小SizeFAT,加上I扇区引导扇区即为文件分配表FAT缓冲区的结束位置,我们在磁盘的内存变量中保存为Pa;
[0027]S2、将磁盘内的缓冲区设为两个区域,分别为第一缓冲区和第二缓冲区,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区,所述第一缓冲区记为BufA,所述第二缓冲区记为BufB ;
[0028]由于文件分配表占用的内存通常较小,所以在本发明实施例中所述第二缓冲区的区域大小大于第一缓冲区的区域大小。
[0029]对两个独立的缓冲区设置完成之后,还包括:修改磁盘驱动的描述句柄Disk_Info数据成员DiskCache,将原来的数据成员DiskCache修改为两个数据成员,分别为DiskCacheFat和DiskCacheDat,并在磁盘缓冲cache初始化时分别对DiskCacheFat和DiskCacheDat两个数据成员进行初始化。
[0030]S3、嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,判断此次磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于Pa,则访问请求传递到第一缓冲区,否则访问请求传递到第二缓冲区;
[0031]具体为:嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,请求参数中包含有起始需要访问的磁盘扇区号SecId,如果SecId小于或等于Pa,则用DiskCacheFat作为参数,调用读写函数向文件分配表FAT缓冲区第一缓冲区发起读写请求;如果SecId大于Pa,则用DiskCacheDat作为参数,调用读写函数向文件数据的缓冲区第二缓冲区发起读写请求;所述磁盘缓冲cache收到上层的读写请求后,DiskCacheFat参数与DiskCacheDat参数按照磁盘缓冲调度策略进行调度,从缓冲区中直接返回数据给上层软件;当磁盘缓冲cache中没有读写请求需要访问的数据,则直接从磁盘中读取数据返回给上层软件,并缓冲到磁盘缓冲cache中。
[0032]在进行所述步骤S3之前,还包括:将底层磁盘扇区的读写函数参数增加一个cache指针参数,其中底层磁盘扇区的读写函数可以为:void WriteSec (uint8Drive, uint32Index), cache指针参数可以为:void WriteSec (PCache*pCache, uint8Drive, uint32Index),所述cache指针参数用于指明文件系统输入输出请求向哪个cache发起。[0033]同时,本发明还提供了一种嵌入式系统中文件系统的缓冲系统,如图3所示为该系统的结构框图,具体包括:磁盘访问判断模块、文件分配表FAT缓冲区和文件数据缓冲区;所述文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa ;磁盘内的缓冲区分两个区域,分别为第一缓冲区和第二缓冲区,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区;所述磁盘访问判断模块用于根据磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于Pa,则访问请求传递到第一缓冲区,否则访问请求传递到第二缓冲区。
[0034]其中,所述第二缓冲区的区域大小大于第一缓冲区的区域大小。底层磁盘扇区的读写函数参数还包括一个cache指针参数,所述cache指针参数用于指明文件系统输入输出请求向哪个磁盘缓冲cache发起。
[0035]通过本发明申请方案一种嵌入式系统中文件系统的缓冲方法及系统,文件分配表区域可以独立的缓冲,不会因于数据区访问磁盘时的调度需要,将文件分配表缓冲的内容频繁的被调度出缓冲区,从而保证FAT的缓冲区的内容只在FAT区域内部做刷新调度,被刷出缓冲区的频率大大减少了,在总体上提高了系统的磁盘性能。
[0036]本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
【权利要求】
1.一种嵌入式系统中文件系统的缓冲方法,其特征在于,具体包括: 51、设置文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa; 52、将磁盘内的缓冲区cache划分为第一缓冲区和第二缓冲区两个区域,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区; 53、嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,判断此次磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于或等于文件分配表FAT在磁盘内的结束位置,所述文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa,则访问请求传递到第一缓冲区,否则访问请求传递到第二缓冲区。
2.如权利要求1所述的方法,其特征在于,所述步骤SI具体为:读取磁盘内的引导扇区,根据引导扇区中文件分配表FAT的数目和每个文件分配表FAT的大小,计算出文件分配表FAT在磁盘内的结束位置。
3.如权利要求1所述的方法,其特征在于,所述第二缓冲区的区域大小大于第一缓冲区的区域大小。
4.如权利要求3所述的方法,其特征在于,所述步骤S2还包括:修改磁盘驱动的描述句柄,将磁盘描述句柄的数据成员的缓冲修改为两个数据成员,分别为DiskCacheFat和DiskCacheDat,并在cache初始化时分别对DiskCacheFat和DiskCacheDat两个数据成员进行初始化,使其缓冲指针分别指向第一缓冲区和第二缓冲区,缓冲大小分别设置为第一缓冲区和第二缓冲区的大小。
5.如权利要求1 所述的方法,其特征在于,在进行所述步骤S3之前,还包括:将底层磁盘扇区的读写函数参数增加一个cache指针参数,所述cache指针参数用于指明文件系统输入输出请求向哪个cache发起。
6.如权利要求3至5任一项所述的方法,其特征在于,所述步骤S3具体为:嵌入式文件系统向磁盘内的缓冲区发起一次磁盘调用,请求参数中包含有起始需要访问的磁盘扇区号,记为SecId,如果SecId小于或等于Pa,则用DiskCacheFat作为参数,调用读写函数向文件分配表FAT缓冲区第一缓冲区发起读写请求;如果SecId大于Pa,则用DiskCacheDat作为参数,调用读写函数向文件数据的缓冲区第二缓冲区发起读写请求。
7.如权利要求6所述的方法,其特征在于,所述cache收到上层的读写请求后,DiskCacheFat参数与DiskCacheDat参数按照磁盘缓冲调度策略进行调度,从缓冲区中直接返回数据给上层软件;当cache中没有读写请求需要访问的数据,则直接从磁盘中读取数据返回给上层软件,并缓冲到cache中。
8.一种嵌入式系统中文件系统的缓冲系统,其特征在于,该系统具体包括:磁盘访问判断模块、文件分配表FAT缓冲区和文件数据缓冲区;所述文件分配表FAT缓冲区在磁盘内的结束位置在磁盘内设为内存变量Pa ;磁盘内缓冲区cache划分为两个区域,分别为第一缓冲区和第二缓冲区,所述第一缓冲区和第二缓冲区分别作为文件分配表FAT的缓冲区和文件数据的缓冲区;所述磁盘访问判断模块用于根据磁盘调用的扇区号落在哪个缓冲区,并将访问请求传递到对应的缓冲区,如果请求中的磁盘扇区号小于PA,则访问请求传递到第一缓冲区,否则访问请求传递到第二缓冲区。
9.如权利要求8所述的系统,其特征在于,所述第二缓冲区的区域大小大于第一缓冲区的区域大小。
10.如权利要求8所述的系统,其特征在于,底层磁盘扇区的读写函数参数还包括一个cache指针参数,所述cache指针参数用于指明文件系统输入输出请求向哪个cache发起。
【文档编号】G06F17/30GK103699613SQ201310692885
【公开日】2014年4月2日 申请日期:2013年12月17日 优先权日:2013年12月17日
【发明者】张德强 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1