一种基于Flash的日志存储方法

文档序号:6443347阅读:479来源:国知局
专利名称:一种基于Flash的日志存储方法
技术领域
本发明涉及Flash存储技木,具体地说,是涉及ー种基于Flash的日志存储方法。
背景技术
日志可以记录操作发生的具体时间和相关的信息,以机顶盒为例,可以记录开机的全过程、用户的换台、按键、信号检测、搜台、设置、进入/退出某功能页面等操作。通过日志,可以为系统死机或者崩溃现场保留最后的有效记录,便于开发人员或者维护人员根据相关信息及时快速地分析、定位死机或崩溃的位置和原因,从而大大缩减开发和维护的时间,节省人力资源成本。但是,在机顶盒、手机等嵌入式设备的操作系统中,其存储器为Flash,在这些系统的Flash中没有存储上述的各种日志,因而对系统运行情况无记录可查,当系统出现死机甚至崩溃时,无法快速定位或者确认死机或崩溃的原因,技术人员需要耗费较大的精力找到故障原因和位置,从而导致软件开发和维护的成本较高。

发明内容
本发明的目的在于提供一种基于Flash的日志存储方法,通过在Flash中存储程序运行中必要的日志信息,在需要时将日志信息从Flash中读出,可以解决现有技术中嵌入式系统在发生死机或崩溃时无法快速定位的问题。为实现上述发明目的,本发明采用下述技术方案予以实现
一种基于Flash的日志存储方法,该方法以Flash的块或扇区为存储管理单元构成日志存储空间,将需存储的日志以日志记录的形式写入Flash的日志存储空间内。本发明通过将Flash的块或扇区作为存储管理单元构成连续的日志存储空间,将日志以记录的形式写入日志存储空间中,可充分利用Flash自身的特性,且日志记录信息连续存储,实现数据的紧缩存储,可以有效利用Flash的存储空间保存尽可能多的有效日志信息,为系统开发和维护提高更多、更可靠的现场保护,便于在系统死机或崩溃时为相关人员提供快速定位故障位置及原因的依据。如上所述的存储方法,所述日志记录包括记录头字段和记录长度字段,将当前日志记录写入Flash的日志存储空间的过程包括下述步骤
a、查找Flash的日志存储空间是否存在日志记录的记录头,并将查找到的第一条有效日志记录的记录头作为同步头;
b、在查找到同步头后,查找上一次日志记录存储时的写指针位置; C、判断剩余日志存储空间能否存放当前日志记录;
d、在剩余日志存储空间能够存放当前日志记录时根据写指针位置写入当前日志记录。如上所述的存储方法,为便于调整日志记录的写入速度、防止因大量无效或重复记录的写入而占用Flash存储空间及降低Flash读写速度,在所述步骤d中,将写入当前日志记录之前,判断日志记录的写入频率是否大于设定的采样频率,若写入频率大于采样频率,则丢弃部分日志记录,以调整写入频率。如上所述的存储方法,日志记录可根据随机数来选择性丢弃、以保证尽可能多地保存有用记录,具体来说,若日志记录的写入频率大于设定的采样频率,首先设置溢出标志,然后在一定取值范围内获取随机数,根据随机数与随机数的取值范围及采样频率的大小关系判断与随机数相对应的日志记录是否需要丢弃。如上所述的存储方法,为防止查找过程的误判,在所述步骤a中,采用下述过程查找同步头首先找到第一条日志记录的记录头,然后根据第一条日志记录的记录长度将读指针向后移动至该第一条日志记录结束后的下一个地址,读取下一个地址的数据并判断是否为记录头,若为记录头,则判断第一条日志记录为第一条有效记录,其记录头即为同步头。如上所述的存储方法,在所述步骤b中,若查找到同步头,则查找日志存储空间中已存储的最新日志记录,最新日志记录的下一个地址即为上一次日志记录存储时的写指针位置。如上所述的存储方法,为便于判断日志记录的先后順序,所述日志记录包括有版本号字段,且采用下述过程查找日志存储空间中已存储的最新日志记录
从所述同步头对应的日志记录开始,依次比较前、后两条相邻的日志记录的版本号,若版本号不连续,则前面的日志记录即为最新的日志记录。如上所述的存储方法,为充分利用Flash存储空间,在所述步骤b中,若未查找到同步头,则擦除整个日志存储空间,并将日志存储空间的首地址作为写指针位置。如上所述的存储方法,为最大限度地保留有效的日志记录信息,在所述步骤d中, 若剩余日志存储空间不能存放当前日志记录,擦除最早写入的日志记录所在的块或扇区, 将写指针移至擦除的块或扇区的首地址,然后根据写指针位置写入当前日志记录。如上所述的存储方法,为提高查找速度、减少对Flash的读写次数,在所述步骤b 中,在查找到同步头后,首先从同步头所在的日志记录开始,从Flash中读取一定字节数至缓存中,然后在缓存中查找上一次日志记录存储时的写指针位置。与现有技术相比,本发明的优点和积极效果是本发明通过将Flash的块或扇区作为存储管理单元构成连续的日志存储空间,将日志以记录的形式写入日志存储空间中, 可充分利用Flash自身的特性,且日志记录信息连续存储,实现数据的紧缩存储,可以有效利用Flash的存储空间保存尽可能多的有效日志信息,为系统开发和维护提供更多、更可靠的现场保护。而且,通过设置采样频率、采用最早覆盖策略等技术手段的处理,可以有效利用Flash的存储空间,减少对Flash的读写次数,提高Flash的读写速度,保证Flash能够最大限度地存储和保留有效日志记录,为相关人员提供更多系统死机或崩溃时快速定位故障位置及故障原因的依据。结合附图阅读本发明的具体实施方式
后,本发明的其他特点和优点将变得更加清赫疋。


图1是本发明基于Flash的日志存储方法一个实施例的基本流程图; 图2是图1实施例中查找同步头的具体流程图;图3是图1实施例中查找写指针的具体流程图; 图4是图1实施例中调整写入频率的ー个具体流程图。
具体实施例方式下面结合附图和具体实施方式
对本发明的技术方案作进ー步详细的说明。本发明针对现有技术中采用Flash存储器的嵌入式系统中不存在日志信息、不能对系统运行情况进行查看和參考的不足,提出了一种基于Flash的日志存储方法,该方法结合Flash的特点,以Flash的块或扇区为存储管理单元构成日志存储空间,将需存储的日志以日志记录的形式写入Flash的日志存储空间内,日志记录信息连续存储,实现数据的紧缩存储,可以有效利用Flash的存储空间保存尽可能多的有效日志信息,为系统开发和维护提高更多、更可靠的现场保护,便于在系统死机或崩溃时为相关人员提供快速定位故障位置及原因的依据。 请參考图1,该图1示出了本发明基于Flash的日志存储方法一个实施例的基本流程图。在该实施例中,日志以日志记录形式存储吋,日志记录包括有记录头字段和记录长度字段。其中,记录头作为日志记录的起始标志符,用来标志一条有效日志记录的开始,一般设置在日志记录的开头。而记录长度字段用来标志整个日志记录(包含记录头)的长度,一般是指日志记录所占的字节数。除记录头字段和记录长度字段之外,日志记录还包括有日志具体内容的字段,还可以包括记录日志发生时间的时间字段等。步骤11:流程开始。步骤12 查找Flash的日志存储空间是否存在日志记录的记录头,并将查找到的第一条有效日志记录的记录头作为同步头。同步头作为整个日志存储空间内所存储的日志记录的起始标志,在每次开机写入日志记录吋,均需要查找同步头。同步头的查找过程可采用各种不同的方法,其中ー种方法可參考图2流程图及下述对图2流程的描述。步骤13 判断是否找到同步头。若找到,执行步骤15 ;若未找到,执行步骤14。步骤14 若未找到同步头,则擦除整个日志存储空间,并将日志存储空间的首地址作为写指针位置。如果没有找到同步头,表明整个日志存储空间内不存在有效的日志记录,也就是说日志存储空间的日志记录数据已经被破坏,没有保留的意义,所以擦除整个日志存储空间,也即将预写入的数据位全部初始化为1,同时,将日志存储空间的首地址作为写指针位置,便于写入当前日志记录。步骤15 若找到同步头,则需要查找上一次日志记录存储时的写指针位置,以便于写入当前日志记录。若嵌入式系统未关机重开机,则很容易获得上一次的写指针位置。若是开机之后的重新写入,则需要进行查找,查找的方法可參考图3流程图及下述对图3流程的描述。步骤16 在写入当前日志记录之前,先判断剰余空间是否足够,也即判断剩余日志存储空间能否存放当前要写入的日志记录。若足够,执行步骤18 ;若不够,执行步骤17。可采用下述方法判断剰余空间是否足够计算当前要写入的日志记录的长度,其长度加上当前偏移地址是否大于当前块的结束地址,若大于,说明当前块不能存放当前日志记录。再查找是否还有其他空余块,若有,则需要将当前记录存入空余块内。步骤17 如果剩余存储空间不能存放当前要写入的日志记录,为最大限度地保留有效的日志记录信息,则擦除最早写入的日志记录所在的块或扇区,将写指针移至擦除的块或扇区的首地址,然后根据写指针位置写入当前日志记录。如果剩余存储空间不能存放当前要写入的日志记录,擦除最早写入的日志记录所在的块或扇区分下述几种情况第一,若日志存储空间仅分配了一个块或扇区,由于Flash 以块或扇区为擦除操作単元,所以,最早写入的日志记录所在的块或扇区即为当前块或扇区,直接擦除当前块或扇区,之后写指针移至该块或扇区的首地址;第二,日志存储空间分配了多个块,由于剩余空间不够,说明当前块是最后一块,则需要找到最早写入的日志记录,然后将最早写入的日志记录所在的块擦除,并将写指针移至擦除的块或扇区的首地址, 然后根据写指针位置写入当前日志记录。若日志记录中存在有时间字段,则可以根据时间字段查找最早写入的日志记录。 考虑到嵌入式系统的时间信息依赖于底层时间模块产生,若在嵌入式系统开机过程中还未及时提取到系统时间,而此时需要进行最早日志记录的判断,此时,单纯依赖时间字段并不能进行判断。因此,可以在日志记录中增设版本号字段,用来标志日志记录的先后順序。例如,设置日志记录中的其中ー个字节存放版本号,每写入一条日志信息,版本号会加1,ー个字节来说,其版本号的值将从1到255之间循环。从同步头对应的日志记录、也即第一条日志信息开始查找,依次比较前、后两条相邻的日志记录的版本号,若版本号不连续,则后面一条的日志记录即为最早写入的日志记录。特殊情况下,若找不到版本号不连续的两条相邻的日志记录,则将同步头所在的第一条日志记录作为最早写入的日志记录。步骤18 在剰余空间能够存放当前日志记录吋,直接根据写指针位置写入当前日志记录。这里的写指针位置是指上一次日志记录存储时的写指针位置。步骤19 流程结束。请參考图2,该图2所示为图1实施例中查找同步头的具体流程图。如图2所示,该实施例查找同步头的步骤如下 步骤121 找到第一条日志记录的记录头。步骤122 根据第一条日志记录的记录长度移动读指针至该记录结束后的下ー个地址。步骤123 读取该下一个地址的数据。步骤124 判断所读取的数据是否也为记录头。若是,执行步骤125 ;否则,转至步骤121继续查找。若所读取的数据也是记录头,说明存在两个连续的日志记录,此时,就认为所找到的第一条日志记录为有效的日志记录。该实施例采用两个连续日志记录的记录头来判定有效日志记录,可以有效防止因可能存在的其他数据与日志记录的记录头相同而导致的误判,提高同步头查找的准确性。若所读取的数据不是记录头,则认为所找到的第一条日志记录的记录头不是有效的记录头,则重新检索,直至找到两个连续的有效记录头为止。步骤125 在读取的数据是记录头吋,判定第一条日志记录为第一条有效记录,其记录头即为同步头。当然除了采用上述图2的方法查找同步头之外,也还可以采用其他方法来查找,
6该实施例对此不作限定。若查找到同步头,表明日志存储空间内存储有有效的日志记录,此时,查找日志存储空间中已存储的最新日志记录,则最新日志记录的下一个地址即为上一次日志记录存储时的写指针位置。因此,查找写指针位置的操作即转换为查找最新日志记录的操作。请參考图3,该图3示出了图1实施例中根据最新日志记录确定写指针的具体流程图。具体流程如下
步骤151 从同步头所在的日志记录开始。步骤152 读取一定字节数至缓存中。为提高查找速度、减少对Flash的读写次数,在查找到同步头后,首先从同步头所在的日志记录开始,从Flash中读取一定字节数至缓存中,然后在缓存中执行查找的操作。 从Flash中一次读取的字节数可根据Flash的速度进行确定,既要满足需求,又要尽量减少读取次数,以减少对整个系统运行时间的影响,例如,可以每次读取2048个字节。步骤153 在缓存的日志记录中查找最新日志记录。最新日志记录的查找方法可參考上述最早日志记录的查找过程,具体来说,在日志记录中增设版本号字段,用来标志日志记录的先后順序。从同步头对应的日志记录开始, 依次比较前、后两条相邻的日志记录的版本号,若版本号不连续,则前面一条日志记录即为最新的日志记录。步骤154 判断是否找到最新记录。若找到,执行步骤155 ;否则,转至步骤152,继续读取新的字节数到缓存中进行查找。步骤155 若找到最新记录,则最新日志记录的下ー个地址即为写指针位置。此外,在查找最新记录的过程中,若遇到有效的空闲区域,则将空闲区域的起始地址作为上次关机时的写指针位置;而若遇到不完整或者出错的记录,则忽略而直接跳过,将紧随其后的空闲区域或者记录头作为写指针位置。考虑到某些情况下,可能会大量往Flash中写入无效或重复的日志记录,因而大量占用Flash存储空间及降低Flash读写速度。由于Flash存储空间有限,不能存放大量的日志记录信息,且Flash的写入次数也是有限的,不能过于频繁的进行擦写,而且若过快过多地写入日志信息,极容易冲掉了本来有用的信息,而存放的是ー些重复或无效的信息, 从而失去了记录有效信息的目的。基于上述原因,为兼顾信息的存储量和写入的有效性,避免上述情形下系统性能的下降,可在存储日志记录时预设采样频率,用来限定単位时间内可写入的最大记录数。在将日志记录写入Flash吋,随时计算记录的写入频率,并将写入频率与采样频率进行比较,若写入频率大于了采样频率,则丢弃部分日志记录,以调整写入频率,也即调整日志记录的写入速度,以确保Flash的性能。请參考图4,该图4示出了图1实施例中调整写入频率的ー个具体流程图。该流程图同时示出了如何丢弃日志记录,以保证写入频率满足要求的方法。在该流程执行之前,在存储日志的初始化过程中,预设ー个采样频率。如图4所示,调整写入频率的具体步骤如下 步骤21 统计写入的日志记录数量。系统内部会设置ー个对应采样周期的定时器,在定时时间内,每写入一条新记录, 计数器会加1,当到达定时时间后,计数器的计数值即为采样周期内写入的日志记录数量,将该计数值与预设的写入频率进行比较。同时,计数器清零,重新开始计数。步骤22 判断写入频率是否大于采样频率。若是,执行步骤23 ;若否,转至步骤对。步骤23 在写入频率大于采样频率吋,设置溢出标志,以便于根据该标志对写入频率进行相应的调整。步骤M 判断是否存在溢出标志,并在存在溢出标志时执行步骤25,而在不存在溢出标志时执行步骤27。步骤25 若存在溢出标志,说明写入频率大于采样频率,此时,需要通过丢弃部分记录的手段来减少写入频率。在该实施例中,为保证尽可能多地保存有用记录,采用随机数的选择方式来选择性丢弃记录数据。首先,在一定取值范围内获取ー个随机数。例如,获取 0-100以内的随机数。步骤沈判断随机数是否大于等于取值范围减去采样频率。若是,执行步骤观;若否,执行步骤27。步骤27 若写入频率不大于采样频率,或者虽然写入频率大于采样频率,但待写入的日志记录对应的随机数小于取值范围减去采样频率的值,则直接写入日志记录。在写入频率大于采样频率吋,通过随机数的获取及上述计算,在其所对应的随机数小于取值范围减去采样频率的值时,认为该随机数对应的日志记录不能丢弃,因此将其写入至Flash中。步骤28 若待写人的日志记录对应的随机数大于等于取值范围减去采样频率的值,则判定该日志记录不再写入至Flash中,因此,丢弃该日志记录,从而实现调整写入频率的目的。当然,除了采样上述通过随机数的选择及计算判断要丢弃的日志记录之外,也还可以采用其他可行的方法来判断,例如,采用固定间隔丢弃ー个记录的方式等。以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管參照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不便相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。
权利要求
1.一种基于Flash的日志存储方法,其特征在于,以Flash的块或扇区为存储管理単元构成日志存储空间,将需存储的日志以日志记录的形式写入Flash的日志存储空间内。
2.根据权利要求1所述的存储方法,其特征在干,所述日志记录包括记录头字段和记录长度字段,将当前日志记录写入Flash的日志存储空间的过程包括下述步骤a、查找Flash的日志存储空间是否存在日志记录的记录头,并将查找到的第一条有效日志记录的记录头作为同步头;b、在查找到同步头后,查找上一次日志记录存储时的写指针位置;C、判断剩余日志存储空间能否存放当前日志记录;d、在剩余日志存储空间能够存放当前日志记录时根据写指针位置写入当前日志记录。
3.根据权利要求2所述的存储方法,其特征在干,在所述步骤d中,将写入当前日志记录之前,判断日志记录的写入频率是否大于设定的采样频率,若写入频率大于采样频率,则丢弃部分日志记录,以调整写入频率。
4.根据权利要求3所述的存储方法,其特征在干,若日志记录的写入频率大于设定的采样频率,首先设置溢出标志,然后在一定取值范围内获取随机数,根据随机数与随机数的取值范围及采样频率的大小关系判断与随机数相对应的日志记录是否需要丢弃。
5.根据权利要求2至4中任一项所述的存储方法,其特征在干,在所述步骤a中,采用下述过程查找同步头首先找到第一条日志记录的记录头,然后根据第一条日志记录的记录长度将读指针向后移动至该第一条日志记录结束后的下一个地址,读取下一个地址的数据并判断是否为记录头,若为记录头,则判断第一条日志记录为第一条有效记录,其记录头即为同步头。
6.根据权利要求5所述的存储方法,其特征在干,在所述步骤b中,若查找到同步头,则查找日志存储空间中已存储的最新日志记录,最新日志记录的下一个地址即为上一次日志记录存储时的写指针位置。
7.根据权利要求6所述的存储方法,其特征在干,所述日志记录包括有版本号字段,采用下述过程查找日志存储空间中已存储的最新日志记录从所述同步头对应的日志记录开始,依次比较前、后两条相邻的日志记录的版本号,若版本号不连续,则前面的日志记录即为最新的日志记录。
8.根据权利要求2至4中任一项所述的存储方法,其特征在干,在所述步骤b中,若未查找到同步头,则擦除整个日志存储空间,并将日志存储空间的首地址作为写指针位置。
9.根据权利要求2至4中任一项所述的存储方法,其特征在干,在所述步骤d中,若剩余日志存储空间不能存放当前日志记录,擦除最早写入的日志记录所在的块或扇区,将写指针移至擦除的块或扇区的首地址,然后根据写指针位置写入当前日志记录。
10.根据权利要求2至4中任一项所述的存储方法,其特征在干,在所述步骤b中,在查找到同步头后,首先从同步头所在的日志记录开始,从Flash中读取一定字节数至缓存中, 然后在缓存中查找上一次日志记录存储时的写指针位置。
全文摘要
本发明公开了一种基于Flash的日志存储方法,该方法以Flash的块或扇区为存储管理单元构成日志存储空间,将需存储的日志以日志记录的形式写入Flash的日志存储空间内。本发明通过在Flash中存储程序运行中必要的日志信息,在需要时将日志信息从Flash中读出,可以解决现有技术中嵌入式系统在发生死机或崩溃时无法快速定位的问题。
文档编号G06F12/02GK102567184SQ201110442999
公开日2012年7月11日 申请日期2011年12月27日 优先权日2011年12月27日
发明者张淑岩 申请人:青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1