一种基于文件系统缓存的自适应预读取方法,包括以下步骤:(1)建立预读取扇区使用记录;(2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数;(3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数;(4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。
【技术实现步骤摘要】
本专利技术涉及一种对磁盘进行读写搮作的方法,尤其是一种在读写过程 中,基于文件系统緩存的预读取方法。
技术介绍
无论是读操作还是写操作,磁盘驱动器存取通常比内存存取慢得多。 对于一般的设备操作,当用户需要进行读写操作时,直接对磁盘进行数据 读写,这种磁盘操作方式非常慢,因此容易阻塞应用程序,同时由于没有 优化磁头,需要频繁的移动磁头,效率也很低。文件系统緩存层就是为了解决这个问题而设计的。它的基本思想是在上层用户的磁盘操作与实际 的设备操作之间添加了 一个数据緩冲区,利用这个緩冲区来实现磁盘操作 性能的优化。文件系统緩存层的主要功能有三个保存最近使用的数据块, 减少读取块设备的次数;优化写操作,减少磁头移动次数;提供预读取功能。由于上层文件系统组织文件时尽量把同 一个文件安排在连续的空间 中,因此应用程序从块设备中读取当前扇区时,邻接扇区的内容也有很大 可能下次被使用到。使用预读取功能,可以在获取当前扇区的数据时,把 邻接的指定个数的扇区数据也获取并存放在緩存区中,以免下次需要使用 这些数据时再把硬盘磁头移动到指定位置进行获取,以减少磁头移动次 数。这个功能在緩存足够大的情况下,对于多任务访问不同的连续文件时 性能有很大提高。但是,如果预读取算法使用不当,则会对性能有一定负面影响。因为 被预读取的数据并不一定^皮使用到,此时预读取的这些无用数据反而会增 加上层应用等待从磁盘获取数据的时间。并且緩存区的大小并不是无限大 的,在緩存满的情况下,需要淘汰緩存中的其它数据来存放预取的数据,因此可能发生预取的址圾数据替换了緩存中的有用数据的情况。在嵌入式文件系统中,预取操作实现得比较简单,通常是按照预先分 配的緩存区大小来确定预读取区的大小,每次进行预取搡作时从磁盘中读 取的扇区数在初始化时就已经确定好了 。这种预取操作没有复杂的算法设 计,在读取连续文件时效率很高,但是当文件比较零散时,有可能预读取 到过多的垃圾数据。
技术实现思路
本专利技术的目的在于提供一种基于文件系统緩存的自适应预读取管理 用以减少预读取的垃圾扇区数。本专利技术的技术方案包括一种基于文件系统緩存的自适应预读取方法,包括以下步骤(1) 建立预读取扇区使用记录;(2) 每次执行预读取操作时,在所述预读取扇区使用记录中,记录 预读取的扇区数;(3) 使用预读取的扇区时,在所述预读取扇区使用记录中,记录使 用的预读取扇区数;(4) 根据以前的预读取扇区数和预读取扇区的使用数,计算出以前 预读取扇区的使用率,并才艮据该使用率来确定当前预读取操作中预读取的 扇区数。进一步,上述步骤(l)中,建立N个预读取扇区使用记录,分别记 录最接近当前预读取操作的以前N次预读取操作的预读取扇区的使用情 况。进一步,所述每个记录至少包括预读取扇区数和预读取扇区使用数两 个字段,并且所述步骤(2)中,在预读取扇区数字段中,记录某次预读 取操作预读取的扇区数量;所述步骤(3)中,在预读取扇区使用数字段 中,记录对该次预读取扇区的使用数量。进一步,所述步骤(2)包括预先设定预读取扇区数的最大值,首 次执行预读取操:作时预读取的扇区数不大于该最大值。进一步,所述步骤(2)还包括将每次预读取的扇区存放在一个緩 存块中,并在緩存块控制结构中,给每个存放预读取扇区的緩存块赋予一 个索引值,记录该緩存块存放的扇区是通过哪次预读取操作预读取的;所 述步骤(3)包括在使用存放预读取扇区的緩存块时,根据所述索引值 确定所使用的扇区是通过哪次预读取操作预读取的,并在记录该次预读取 操作预读取的扇区数的记录中,记录使用的预读取扇区数。进一步,上述方法包括所述步骤(4)中,计算出每个记录中预读 取扇区使用数和预读取扇区数的比值,作为一次预读取操作预读取的扇区 的使用率;计算出N次预读取操作预读取的扇区的平均使用率,再乘以 所述预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇 区数。上述方法中,所述步骤(1)进一步可包括每个记录还有一个权值 字段,并为每个记录分配一个权值,权值的分配原则是离当前预读取操作 越近的记录的权值越大,并且使所有权值的和为100%。进一步,所述步骤(4)中,计算出每个记录中预读取扇区使用数和 预读取扇区数的比值,并乘以该记录对应的权值,得出每次预读取操作预 读取的扇区的加权使用率;将N次预读取的扇区的加权使用率相加,并 乘以预先设定的预读取扇区数的最大值,得出当前预读取操作的预读取扇 区数。本专利技术所提供的方法,由于在每次预读取时都会通过前面多次预读取 数据的使用比率来确定本次预读取数据的大小,因此相比现有技术使用一 个固定预取值的算法,减少了垃圾扇区数的读取。而且本专利技术记录的历史 信息内叙艮少,计算逻辑简单,比较适合嵌入式系统中文件系统緩存的管 理。附困说明图l是预读取扇区使用记录的数据结构示意图; 图2是文件系统緩存块控制结构示意图; 图3是采用本专利技术方法的读写搡作流程图; 图4是一种离散文件的分布示意图。具体实施方式以下结合附图及较佳实施例,对本专利技术的实施方式进行较为详细的说明。本专利技术的方法能对基于文件系统緩存的预读取数据大小进行自适应 调整,其包括以下基本处理步骤建立预读取扇区使用记录;每次执行预读取操作时,在所述预读取数据使用记录中,记录预读取 的扇区数;使用预读取的扇区时,在所述预读取数据使用记录中,记录使用的预 读取扇区数;根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取 扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。本专利技术的预读取扇区使用记录的数据结构至少包括预读取扇区数和 预读取扇区使用数两个字段。图l是预读取扇区使用记录的数据结构示意图,其中有预读取的扇区字段。图l所示的实施例中,数据结构还包括有权值(adcPreReadPower)字段。adcPreReadBlocks表示每次执行预读取操作时预读取的扇区数, adcPreReadUsedBlocks表示adcPreReadBlocks个扇区中被使用的扇区数, adcPreReadUsedBlocks与adcPreReadBlocks的比值就是预读取扇区的使用率。本专利技术为了使预读取的扇区数尽可能接近实际使用的扇区数量,可记 录并统计多次以前的预读取操作的预读取扇区的使用率。附图说明图1所示的实施例中,设定预读取扇区使用记录的个数共有N个,分别记录最接近当前 预读取操作的以前N次预读取操作的预读取扇区的使用情况。上层用户创建块设备时,对块设备的控制结构进行初始化,同时对预 读取扇区使用记录的数据结构进行初始化。当有N个记录时,首先对N 个记录的数据结构进行初始化。预读取扇区4吏用记录初始化时,将adcPreReadBlocks和 adcPrcReadUsedBlocks的值都i殳置为1,即历史的预读取扇区使用率为 100%。可以为每个记录分配一个权值来表示其在总的使用率中占的比重, 权值的分配原则是离当前预取操作越近的记录的权值越大,并且N个权 值的和应为100%。如图l所示,权值共有N个,从权值l、权值2到权 值N按递减的顺序排列,指针l总是指向权值l,表示最近一次预读取操 作预读取的扇区的使用率的权值。根据文件系统緩存区的大小,设定一个 预读取的最大值M本文档来自技高网...
【技术保护点】
一种基于文件系统缓存的自适应预读取方法,包括以下步骤: (1)建立预读取扇区使用记录; (2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数; (3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数; (4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。
【技术特征摘要】
1. 一种基于文件系统缓存的自适应预读取方法,包括以下步骤(1)建立预读取扇区使用记录;(2)每次执行预读取操作时,在所述预读取扇区使用记录中,记录预读取的扇区数;(3)使用预读取的扇区时,在所述预读取扇区使用记录中,记录使用的预读取扇区数;(4)根据以前的预读取扇区数和预读取扇区的使用数,计算出以前预读取扇区的使用率,并根据该使用率来确定当前预读取操作中预读取的扇区数。2. 如权利要求l所述的方法,其特征在于所述步骤(l)中,建立 N个预读取扇区使用记录,分别记录最接近当前预读取操作的以前N次 预读取操作的预读取扇区的使用情况。3. 如权利要求2所述的方法,其特征在于所述每个记录至少包括 预读取扇区数和预读取扇区使用数两个字段。4. 如权利要求3所述的方法,其特征在于所述步骤(2)中,在预 读取扇区数字段中,记录某次预读取操作预读取的扇区数量;所述步骤(3 ) 中,在预读取扇区使用数字段中,记录对该次预读取扇区的使用数量。5. 如权利要求4所述的方法,其特征在于所述步骤(2)进一步包 括,预先设定预读取扇区数的最大值,首次执行预读取操作时预读取的扇 区数不大于该最大值。6. 如权利要求4所述的方法,其特征在于所述步骤(2)进一步包 括,将每次预读取的扇区存放在一个緩存块中,并在緩存块控制结构中, 给每...
【专利技术属性】
技术研发人员:黄文伟,童小九,陆小飞,周立超,
申请(专利权)人:中兴通讯股份有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。