CN109857718A - 一种应用于嵌入式系统的日志式文件系统 - Google Patents

一种应用于嵌入式系统的日志式文件系统 Download PDF

Info

Publication number
CN109857718A
CN109857718A CN201910103129.8A CN201910103129A CN109857718A CN 109857718 A CN109857718 A CN 109857718A CN 201910103129 A CN201910103129 A CN 201910103129A CN 109857718 A CN109857718 A CN 109857718A
Authority
CN
China
Prior art keywords
file
data block
data
state
header
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910103129.8A
Other languages
English (en)
Inventor
赵伟航
江勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Yamei Information Science & Technology Co Ltd
Original Assignee
Guangzhou Yamei Information Science & Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Yamei Information Science & Technology Co Ltd filed Critical Guangzhou Yamei Information Science & Technology Co Ltd
Priority to CN201910103129.8A priority Critical patent/CN109857718A/zh
Publication of CN109857718A publication Critical patent/CN109857718A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种应用于嵌入式系统的日志式文件系统。本发明的应用于嵌入式系统的日志式文件系统,包括多个相互独立的分区;其中每个分区包括两个数据块,每个数据块包括存储所述数据块的状态信息的位置和存储多个文件的位置,其中每个文件采用id进行标识;所述文件系统通过日志信息记录所述多个文件的写入过程;所述两个数据块的状态随着所述文件的读写变化而相应转变。本发明提供的技术方案,能更适合资源受限的嵌入式系统使用。

Description

一种应用于嵌入式系统的日志式文件系统
技术领域
本发明涉及计算机存储技术领域,具体涉及一种应用于嵌入式系统的日志式文件系统。
背景技术
嵌入式系统,是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统一般受到性能和资源的限制,需要为其开发专用的软件才能够正常工作,嵌入式系统需要为软件提供相应的数据存储空间。而Flash(闪存)是目前嵌入式系统中最为主要的存储介质,其以体积小、容量大、成本低、掉电数据不丢失等一系列优点,成为了嵌入式系统中储存数据的最主要载体。闪存在结构和操作方式上与硬盘、EEROM(Electrically Erasable Programmableread only memory,带电可擦可编程只读存储器)等其他存储介质有较大区别,闪存的数据删除不是以单个的字节为单位而是以固定的数据块为单位。
为了管理闪存,通常需要使用文件系统。文件系统是对存储介质的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取等。
目前常用的文件系统有很多,例如FAT32(分区格式的一种,采用32位的文件分配表)、NTFS(New Technology File System,新技术文件系统),EXT2/3/4(第2/3/4代扩展文件系统)、JFFS2(JournallingFlashFileSystemVersion2,闪存日志型文件系统第2版)、YAFFS(Yet Another Flash File System,是一种适用于大容量的存储设备的嵌入式文件系统)和UBIFS(Unsorted Block Image File System,无序区块镜像文件系统),这些现有的文件系统,大多都是应用Linux或Windows这种类型的大系统。FAT32、NTFS和EXT2/3/4这些文件系统通常用于传统的硬盘,而JFFS2、YAFFS和UBIFS这些文件系统通常用于闪存芯片。上述这些文件系统为了满足复杂的系统需求,需要庞大的代码实现,臃肿的代码,不仅影响文件系统的性能,且需占用许多的容量空间,此外,文件系统作为操作系统的基本功能,通常依赖系统环境,并且高度性能优化,进一步加深文件系统复杂性。这些原因导致上述这些文件系统无法应用于资源受限的嵌入式系统的闪存管理中。此外,对于FAT32、NTFS和EXT2这类非日志式的文件系统,在系统意外断电的情况下,很容易导致文件系统的损坏,可能造成不可挽回的数据丢失。
可以发现,现有技术中的文件系统,通常面向通用的文件存储要求,因此文件系统的功能相对全面,支持多种应用环境,但同时使其变得庞大,复杂,性能降低,非常不利于资源受限的嵌入式系统使用。例如,在可移植性方面,文件系统依赖于操作系统的运行环境,与操作系统紧密耦合,要移植到其他的操作系统上相当困难;在性能方面,为了满足复杂的系统需求,导致文件系统设计复杂,需要庞大的代码实现,影响了文件系统的性能;在可靠性方面,部分传统的文件系统,在系统意外断电的情况下,可能会导致数据丢失,影响系统的数据安全。
因此,现有技术的文件系统,并不适合资源受限的嵌入式系统使用。
发明内容
有鉴于此,本发明的目的在于提出一种应用于嵌入式系统的日志式文件系统,能更适合资源受限的嵌入式系统使用。
本发明提供一种应用于嵌入式系统的日志式文件系统:
所述文件系统包括多个相互独立的分区;
其中每个分区包括两个数据块,每个数据块包括存储所述数据块的状态信息的位置和存储多个文件的位置,其中每个文件采用id进行标识;
所述文件系统通过日志信息记录所述多个文件的写入过程;
所述两个数据块的状态随着所述文件的读写变化而相应转变。
优选的,所述文件系统在读写文件过程中发现出现错误时,通过记录的所述日志信息进行恢复。
优选的,其中每个文件采用4个字节的数据结构进行管理。
优选的,所述存储数据块的状态信息的位置为所述数据块的起始4个字节位置;
所述存储多个文件的位置为除所述数据块的起始4个字节位置之外的其他位置。
优选的,所述数据块的状态包括用于表示当前数据块处于空白状态的空闲状态、用于表示当前数据块处于文件存储状态的活动状态和用于表示当前数据块处于存储交换状态的交换状态;
所述两个数据块中的其中一个数据块处于活动状态时,另一个数据块处于空闲状态。
优选的,当处于活动状态的数据块的使用空间达到预设阈值时,所述数据块从活动状态变为交换状态,将文件数据转移到另一个处于空闲状态的数据块中;
当文件数据转移完成后,所述原处于空闲状态的数据块变为活动状态,所述原处于交换状态的数据块变为空闲状态。
优选的,其中每个文件包括文件正文和文件头;
所述文件正文用于存储文件的数据,所述文件正文的起始地址对齐4个字节;
所述文件头用于存储文件管理的数据,所述文件头的起始地址对齐4个字节,所述文件头的大小为4个字节。
优选的,所述文件头中包括id信息和文件长度信息;
所述id信息中包括id有效性的标识位;
所述文件长度信息中包括长度有效性的标识位。
优选的,所述文件头的id信息中,bit[15]是id有效性的标识位,bit[14-0]是文件的标识;
所述文件头的文件长度信息中,bit[15]是长度有效性的标识位,bit[14-0]是文件的长度信息。
优选的,其中所述每个文件的文件正文位于所述文件头的前面位置;
所述文件系统在写文件时,在文件指针起始位置偏移所述文件正文的长度后,写入所述文件头,再在文件指针起始位置写入所述文件正文。
通过上述内容可以发现,本发明实施例所提供的应用于嵌入式系统的日志式文件系统,包括多个相互独立的分区;其中每个分区包括两个数据块,每个数据块包括存储所述数据块的状态信息的位置和存储多个文件的位置,其中每个文件采用id进行标识;所述文件系统通过日志信息记录所述多个文件的写入过程;所述两个数据块的状态随着所述文件的读写变化而相应转变。因为本发明的文件系统是采用日志式文件系统的思想设计,在文件写入中,每个步骤的写入都被记录到日志信息中,即使遇到意外终止,文件系统也可以根据日志信息进行恢复,从而避免文件系统损坏,提高了文件系统的可靠性;另外,本发明的文件系统放弃采用文件名标识一个文件,而是采用数值id来标识文件,不需支持目录操作,因此代码实现非常简单,可以提高性能。所以,本发明的提供的应用于嵌入式系统的日志式文件系统,能更适合资源受限的嵌入式系统使用。
进一步的,本发明的文件系统采用4个字节(4Byte)的数据结构管理一个文件,管理更加简洁有效,也可以减少代码,代码实现也简单,因此可以进一步提升系统性能。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1是本发明实施例的一种应用于嵌入式系统的日志式文件系统的结构框架的一示意图;
图2是本发明实施例的一种应用于嵌入式系统的日志式文件系统的结构框架的另一示意图;
图3是本发明实施例的一种应用于嵌入式系统的日志式文件系统中的文件组成部分的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本发明提供一种应用于嵌入式系统的日志式文件系统,能更适合资源受限的嵌入式系统使用。
以下结合附图详细描述本发明实施例的技术方案。
图1是本发明实施例的一种应用于嵌入式系统的日志式文件系统的结构框架的一示意图。
参照图1,本发明提供的应用于嵌入式系统的日志式文件系统,包括多个相互独立的分区20、21…2N。
其中每个分区包括两个数据块30和31,每个数据块包括存储所述数据块的状态信息的位置40和存储多个文件的位置41,其中每个文件采用id进行标识;
所述文件系统通过日志信息记录所述多个文件的写入过程;
所述两个数据块的状态随着所述文件的读写变化而相应转变。
其中,每个文件采用4个字节的数据结构进行管理。
其中,所述存储数据块的状态信息的位置为所述数据块的起始4个字节位置;所述存储多个文件的位置为除所述数据块的起始4个字节位置之外的其他位置。
其中,所述数据块的状态包括用于表示当前数据块处于空白状态的空闲状态、用于表示当前数据块处于文件存储状态的活动状态和用于表示当前数据块处于存储交换状态的交换状态;数据块起始地址的4个字节存放着状态信息,通过改写这4个字节,可以改变数据块的状态。通常情况下,所述两个数据块中的其中一个数据块处于活动状态时,另一个数据块处于空闲状态(在短暂的数据转移时,活动状态的数据块会变为交换状态)。例如,当处于活动状态的数据块的使用空间达到预设阈值时,所述数据块从活动状态变为交换状态,将文件数据转移到另一个处于空闲状态的数据块中;当文件数据转移完成后,所述原处于空闲状态的数据块变为活动状态,所述原处于交换状态的数据块被执行数据擦除操作,变为空闲状态。这样,又恢复到一个数据块处于空闲状态,另一个数据块处于活动状态。
其中,每个文件包括文件正文和文件头;所述文件正文用于存储文件的数据,所述文件正文的起始地址对齐4个字节;所述文件头用于存储文件管理的数据,所述文件头的起始地址对齐4个字节,所述文件头的大小为4个字节。
从该实施例可以发现,本发明实施例所提供的应用于嵌入式系统的日志式文件系统,包括多个相互独立的分区;其中每个分区包括两个数据块,每个数据块包括存储所述数据块的状态信息的位置和存储多个文件的位置,其中每个文件采用id进行标识;所述文件系统通过日志信息记录所述多个文件的写入过程;所述两个数据块的状态随着所述文件的读写变化而相应转变。因为本发明的文件系统是采用日志式文件系统的思想设计,在文件写入中,每个步骤的写入都被记录到日志信息中,即使遇到意外终止,文件系统也可以根据日志信息进行恢复,从而避免文件系统损坏,提高了文件系统的可靠性;另外,本发明的文件系统放弃采用文件名标识一个文件,而是采用数值id来标识文件,不需支持目录操作,因此代码实现非常简单,可以提高性能。所以,本发明的提供的应用于嵌入式系统的日志式文件系统,能更适合资源受限的嵌入式系统使用。
以下进一步详细介绍本发明的应用于嵌入式系统的日志式文件系统。
本发明提出了一种简易、可靠和高效的应用于嵌入式系统的日志式文件系统,利用极其简单和高效的方式,管理闪存的数据,非常适合资源紧缺、性能较低的嵌入式系统。本发明提出的文件系统属于应用于嵌入式系统的日志式文件系统,对文件写入的每一个步骤进行记录,可以确保数据写入的完整性。即使在写入过程的任何一个步骤出现意外掉电,在系统启动以后依然可以检查日志,将文件恢复到前一次的有效状态,从而确保文件系统的可靠安全。
本发明的应用于嵌入式系统的日志式文件系统可以分别在可靠性、性能和可移植性方面得到比较好的效果:
1)可靠性方面:本发明的文件系统采用日志式文件系统的思想设计,在文件写入中,每个步骤的写入,都会在文件管理的数据结构中留下日志信息。因此,在写入操作时,即使遇到意外终止,文件系统也可以根据日志信息,将文件恢复到前一次的有效状态中,从而避免文件系统损坏。
2)性能方面:本发明的文件系统管理简洁有效,采用4个字节(4Byte)的数据结构管理一个文件,文件系统放弃采用文件名标识一个文件,而是采用数值id来标识文件,不需支持目录操作,代码实现非常简单,因此可以获得良好的性能。
3)可移植性方面:本发明的文件系统采用C语言编写,包含注释等内容在内的代码行数仍然不足1000行,因此文件系统的设计非常简单,在移植到不同的系统中时,仅仅需要重新编写几个闪存的操作接口,如:读、写、擦除等接口,即可完成移植。
图2是本发明实施例的一种应用于嵌入式系统的日志式文件系统的结构框架的另一示意图。
参照图2,图2展示在一块闪存中,本发明文件系统可以配置多个分区,各个分区可以独立使用互不干扰。例如,图2中包括文件系统分区1、文件系统分区2等。
其中,本发明文件系统的每个分区由两个数据块组成,分别是数据块A(简称块A),数据块B(简称块B)。两个数据块的空间大小相同,数据块的起始地址与闪存的可擦除扇区对齐,数据块的大小是闪存可擦除扇区的整数倍,使得两个数据块可以单独擦除。本发明的文件可以储存在闪存中,一个数据块上可以存放多个文件,每个文件按写入的顺序,依次储存在连续空间中,可以方便文件的读写操作。
本发明文件系统中,数据块的起始位置存储当前数据块的状态信息,由4B(Byte,字节)组成,数据块的状态可以包括三种状态:空闲状态(0xFFFFFFFF)、活动状态(0x152A152A)和交换状态(0x00000000)。其中,空闲状态表示当前数据块处于空白状态,未有任何文件写入;活动状态表示当前数据块处于文件存储状态,读写文件都在当前数据块执行;交换状态表示当前数据块处于存储交换状态,将转移数据到另一个数据块上。
本发明文件系统在一个分区中,处于活动状态的数据块,也可以简称为活动块;处于空闲状态的数据块,也可以简称为空闲块;处于交换状态的数据块,也可以简称为交换块。分区中的两个数据块(块A和块B)的起始地址都有记录各自的状态信息,一个数据块一个时刻只有一种状态,随着文件系统的读写变化,数据块的状态相应会转变。一般文件读写都在活动块(处于活动状态的数据块)上完成,当活动块的使用空间达到预设阈值时(例如使用了90%),活动块将变为交换块(处于交换状态的数据块),接着将交换块的文件数据转移到空闲块(处于空闲状态的数据块)中;当文件数据转移完成后,空闲块变为活动块,而交换块变为空闲块,这就是数据块状态的转变过程。也就是说,当处于活动状态的数据块的使用空间达到预设阈值时,所述数据块从活动状态变为交换状态,将文件数据转移到另一个处于空闲状态的数据块中;当文件数据转移完成后,所述原处于空闲状态的数据块变为活动状态,所述原处于交换状态的数据块变为空闲状态。
本发明文件系统分区中,除了数据块的起始4B(4字节)空间用于存储数据块的状态,其余空间一般都用于存储文件,每个文件可以按写入的顺序,依次储存在连续空间中,可以方便文件的读写操作。其中,每个文件的起始地址都对齐4字节。所谓地址对齐4字节,就是起始地址只会在0、4、8、12、16...这些地方开始,这样的设置是为了提升读写效率而设计。现代计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是字节对齐。
本发明的文件系统分区中可以存储多个文件,例如图2中的文件系统分区1,对于数据块A,除了数据块A的起始4B地址用于存储数据块A的状态信息,其余空间位置都用于存储文件1、文件2、文件3、文件4等。
图3是本发明实施例的一种应用于嵌入式系统的日志式文件系统中的文件组成部分的示意图。参见图3,可以看到文件由两部分组成,分别是文件正文和文件头。
文件正文:用于实际存储文件的数据,长度不定,地址对齐4字节。
文件头:用于存储文件管理的数据,地址对齐4字节,结构体的大小为4字节。
本发明文件系统中的文件头的定义可以如下:
typedef struct
{
uint16_t id;
uint16_t len;
}file_header_typedef;
其中:
成员id:bit[15]是id有效性的标识位,1表示无效,0表示有效;bit[14-0]是文件的标识,文件系统通过该信息读写文件。
成员len:bit[15]是len有效性的标识位,1表示无效,0表示有效;bit[14-0]是文件的长度信息,文件系统通过该信息获取文件长度。
从上述定义可以知道,文件的id的有效数值范围是1~32767(0保留,用于表示文件被删除);文件的len的有效数值范围是0~32767。因此,在文件系统的一个分区中,可以最多支持32767个文件,文件最长支持32767B。
其中,成员len和成员id位于结构体中的位置,可以按照结构体写入的实际起始地址而定,例如:结构体的写入地址为0x10,那么成员id的地址就是0x10,而成员len的地址就是0x12。
以下内容描述了本发明文件系统的文件写入的整个步骤,步骤顺序一般按以下所描述顺序进行。
各步骤中,file_id表示写入的文件的id,file_len表示写入的文件的长度,file_text表示希尔文件的数据缓冲。
本发明文件系统的文件写入具体步骤顺序可以如下:
步骤1):定义一个file_header_typedef的结构体file_header,文件指针指向文件写入的起始位置
步骤2):设置file_header.id=0xFFFF;
设置file_header.len=0x8000|file_len;
在文件指针起始位置偏移file_len,并将文件头file_head写入闪存
步骤3):设置file_header.id=0xFFFF;
设置file_header.len=file_len;
在文件指针起始位置偏移file_len,并将文件头file_head写入闪存
步骤4):设置file_header.id=0x8000|file_id;
设置file_header.len=file_len;
在文件指针起始位置偏移file_len,并将文件头file_head写入闪存
步骤5):在文件指针起始位置,将file_text文件数据写入到闪存
步骤6):设置file_header.id=file_id;
设置file_header.len=file_len;
在文件指针起始位置偏移file_len,并将文件头file_head写入闪存,设置文件指针偏移到当前文件头后面,准备写入下一个文件。
其中,关于偏移file_len,参见图3,在写入的时候,文件指针起始位置指向图3的最左侧(低地址),本发明设计的文件系统中,文件的结构体的前面位置是文件正文,后面位置是文件头,即每个文件的文件正文位于所述文件头的前面位置;在实际写入的时候,是先写入文件头,再写入文件正文。为了先写入文件头信息,所以在文件指针起始位置,偏移文件正文的长度file_len(也就是跳过数据正文的区域,才是文件头的写入位置)。也就是说,文件系统在写文件时,在文件指针起始位置偏移所述文件正文的长度后,写入所述文件头,再在文件指针起始位置写入所述文件正文。
其中,关于步骤2)和步骤3),参照上面file_header_typedef结构体的len成员,长度为2字节,bit[15]是标识位,而bit[14-0]是实际文件长度。关于步骤2)和步骤3),步骤2)是预写入,就是长度和无效的标识(0x8000)一起写入,表示长度信息未生效。而步骤3)写入,是清除无效的标识(0x8000),表示长度信息已生效。因为写入file_len的操作有可能先写bit[7-0],再写bit[15-8],为了确保数据的完整性,需要步骤2)和步骤3)。
其中,关于步骤4)和步骤5),与步骤2)和步骤3)中的关系描述的原理是类似,所不同的是,先在步骤4)进行file_id的预写入,表示当前文件正文数据未生效;接着是步骤5)写入文件正文数据;最后,通过步骤6)清除步骤4)中写入的无效标识(0x8000),使文件正文数据生效。
可以发现,上述步骤中,步骤2)和步骤3)是写入文件的长度,分两步是为了保证数据完整性;步骤4)、步骤5)和步骤6)是写入文件的id和数据,分三步同样是为了保证数据的完整性。
其中步骤2)、步骤3)与步骤4)、步骤5)、步骤6的思路相似,都是逐步记录写入的每一个动作,这样会在后续检验文件是否有效和查找文件时,提供非常有用的信息。例如,如果在步骤3)出现了问题,那么,文件系统可以通过标识位,知道当前长度是无效的,就不能通过这个长度信息快速跳过这段不完整的数据,而要通过其他方式慢慢找到下一个文件头。
如果在步骤4)、步骤5)和步骤6)中某一步出了问题,那么文件系统可以知道,虽然这是一段不完整的数据,但是长度信息是有效的,就可以按照长度信息,直接跳过这段不完整的数据。
本发明执行完上述6个步骤以后,就可以完全写入一个文件。其中每个步骤都通过标识位,记录写入动作的日志,这样无论哪个动作出现了问题,文件系统都能识别出来,并在读文件时跳过不完整的写入记录。关于标识位,参考file_header_typedef的定义说明,成员变量id和len的bit15(也就是0x8000)都是有效性的标识位。
本发明方案中,对文件进行读取的步骤比较简单,只需要在当前的文件指针开始,向前搜索文件头,然后根据文件头的长度信息,跳转到下一个文件头,直到找到第一个匹配的文件id,然后读出文件数据。
本发明方案中,一个处于活动状态的数据块可以存在多个id相同的文件,而文件搜索是从后往前,文件读取操作会把搜索到的第一个id匹配的文件读出,而其余相同id的文件都属于历史记录。因此,如果在文件写入的时候出现了意外情况,那么文件读取时,将读到该文件的前一次历史记录。所以,本发明的文件系统的读写数据是安全可靠的。
本发明方案中,当文件写入长度超过处于活动状态的数据块的大小时,在处于活动状态的数据块的起始地址写入0x00000000,处于活动状态的数据块变为交换状态。此时,文件系统将搜索交换状态下的数据块的所有有效文件,并将文件拷贝到另一处于空闲状态的数据块,而交换状态下的数据块的文件的历史记录不会被拷贝到处于空闲状态的数据块,因此可以节省很多的存储空间。拷贝完毕后,处于空闲状态的数据块的起始地址写入0x152A152A,处于空闲状态的数据块变成活动状态,而交换状态下的数据块执行擦除操作,变为空闲状态的数据块。整个数据交换过程,无论哪个步骤出错,文件系统初始化的时候,都可以识别出来,并继续把数据交换完成。因此,本发明的文件系统的数据交换也是安全可靠的。
从上述实施例可以看出,本发明提供的应用于嵌入式系统的文件系统,具有如下有益效果:
本发明方案中,文件系统是采用日志式文件系统的思想设计,在文件写入中,每个步骤的写入都被记录到日志信息中,即使遇到意外终止,文件系统也可以根据日志信息进行恢复,从而避免文件系统损坏,提高了文件系统的可靠性。本发明的文件系统也没有在原有的常用文件系统进行裁剪和优化,而是直接针对嵌入式系统的应用需求,设计出最简洁的文件系统功能。本发明的文件系统对于常用文件系统中所包括的字符文件名、目录、读写权限,大容量文件支持、复杂的磨损平衡等都不再需要,而只需要使用一个文件id作为标识,可以正常读写文件数据,且确保文件数据的安全可靠就可以。此外,本发明的文件系统的代码量极少,非常方便移植和维护;文件管理的设计也简洁高效,可以为嵌入式系统节省大量的存储资源和CPU资源。本发明方案中关于交换块的设计,也简单地实现了磨损平衡的效果。
上文中已经参考附图详细描述了根据本发明的技术方案。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑数据块、模数据块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模数据块、程序段或代码的一部分,所述模数据块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (10)

1.一种应用于嵌入式系统的日志式文件系统,其特征在于:
所述文件系统包括多个相互独立的分区;
其中每个分区包括两个数据块,每个数据块包括存储所述数据块的状态信息的位置和存储多个文件的位置,其中每个文件采用id进行标识;
所述文件系统通过日志信息记录所述多个文件的写入过程;
所述两个数据块的状态随着所述文件的读写变化而相应转变。
2.根据权利要求1所述的系统,其特征在于:
所述文件系统在读写文件过程中发现出现错误时,通过记录的所述日志信息进行恢复。
3.根据权利要求1所述的系统,其特征在于:
其中每个文件采用4个字节的数据结构进行管理。
4.根据权利要求1所述的系统,其特征在于:
所述存储数据块的状态信息的位置为所述数据块的起始4个字节位置;
所述存储多个文件的位置为除所述数据块的起始4个字节位置之外的其他位置。
5.根据权利要求4所述的系统,其特征在于:
所述数据块的状态包括用于表示当前数据块处于空白状态的空闲状态、用于表示当前数据块处于文件存储状态的活动状态和用于表示当前数据块处于存储交换状态的交换状态;
所述两个数据块中的其中一个数据块处于活动状态时,另一个数据块处于空闲状态。
6.根据权利要求5所述的系统,其特征在于:
当处于活动状态的数据块的使用空间达到预设阈值时,所述数据块从活动状态变为交换状态,将文件数据转移到另一个处于空闲状态的数据块中;
当文件数据转移完成后,所述原处于空闲状态的数据块变为活动状态,所述原处于交换状态的数据块变为空闲状态。
7.根据权利要求1至6任一项所述的系统,其特征在于:
其中每个文件包括文件正文和文件头;
所述文件正文用于存储文件的数据,所述文件正文的起始地址对齐4个字节;
所述文件头用于存储文件管理的数据,所述文件头的起始地址对齐4个字节,所述文件头的大小为4个字节。
8.根据权利要求7所述的系统,其特征在于:
所述文件头中包括id信息和文件长度信息;
所述id信息中包括id有效性的标识位;
所述文件长度信息中包括长度有效性的标识位。
9.根据权利要求8所述的系统,其特征在于:
所述文件头的id信息中,bit[15]是id有效性的标识位,bit[14-0]是文件的标识;
所述文件头的文件长度信息中,bit[15]是长度有效性的标识位,bit[14-0]是文件的长度信息。
10.根据权利要求7所述的系统,其特征在于:
其中所述每个文件的文件正文位于所述文件头的前面位置;
所述文件系统在写文件时,在文件指针起始位置偏移所述文件正文的长度后,写入所述文件头,再在文件指针起始位置写入所述文件正文。
CN201910103129.8A 2019-02-01 2019-02-01 一种应用于嵌入式系统的日志式文件系统 Pending CN109857718A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910103129.8A CN109857718A (zh) 2019-02-01 2019-02-01 一种应用于嵌入式系统的日志式文件系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910103129.8A CN109857718A (zh) 2019-02-01 2019-02-01 一种应用于嵌入式系统的日志式文件系统

Publications (1)

Publication Number Publication Date
CN109857718A true CN109857718A (zh) 2019-06-07

Family

ID=66897310

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910103129.8A Pending CN109857718A (zh) 2019-02-01 2019-02-01 一种应用于嵌入式系统的日志式文件系统

Country Status (1)

Country Link
CN (1) CN109857718A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112286893A (zh) * 2020-09-23 2021-01-29 宁波水表(集团)股份有限公司 一种应用于嵌入式终端的日志处理方法以及设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1506852A (zh) * 2002-12-06 2004-06-23 联想(北京)有限公司 基于硬盘保护区的非保护区文件选择性安全保护方法
CN1851672A (zh) * 2006-04-05 2006-10-25 北京飞天诚信科技有限公司 一种闪存的安全读写方法
CN102103596A (zh) * 2009-12-18 2011-06-22 康佳集团股份有限公司 在嵌入式系统中实现文件系统的方法
US8612722B2 (en) * 2009-09-25 2013-12-17 International Business Machines Corporation Determining an end of valid log in a log of write records
CN103577574A (zh) * 2013-11-05 2014-02-12 中船重工(武汉)凌久电子有限责任公司 一种基于nand flash的高可靠线性文件系统
EP3260993A1 (en) * 2015-12-25 2017-12-27 Baidu Online Network Technology (Beijing) Co., Ltd. File operation method and device

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1506852A (zh) * 2002-12-06 2004-06-23 联想(北京)有限公司 基于硬盘保护区的非保护区文件选择性安全保护方法
CN1851672A (zh) * 2006-04-05 2006-10-25 北京飞天诚信科技有限公司 一种闪存的安全读写方法
US8612722B2 (en) * 2009-09-25 2013-12-17 International Business Machines Corporation Determining an end of valid log in a log of write records
CN102103596A (zh) * 2009-12-18 2011-06-22 康佳集团股份有限公司 在嵌入式系统中实现文件系统的方法
CN103577574A (zh) * 2013-11-05 2014-02-12 中船重工(武汉)凌久电子有限责任公司 一种基于nand flash的高可靠线性文件系统
EP3260993A1 (en) * 2015-12-25 2017-12-27 Baidu Online Network Technology (Beijing) Co., Ltd. File operation method and device

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112286893A (zh) * 2020-09-23 2021-01-29 宁波水表(集团)股份有限公司 一种应用于嵌入式终端的日志处理方法以及设备
CN112286893B (zh) * 2020-09-23 2023-02-24 宁波水表(集团)股份有限公司 一种应用于嵌入式终端的日志处理方法以及设备

Similar Documents

Publication Publication Date Title
US8738845B2 (en) Transaction-safe fat file system improvements
CN102693283B (zh) 一种嵌入式系统的数据分区存储方法及系统引导启动方法
CN100426259C (zh) 一种存储器文件数据虚拟存取方法
CN103207883A (zh) 用于元数据持久存储的方法
US20090037646A1 (en) Method of using a flash memory for a circular buffer
CN110673789B (zh) 固态硬盘的元数据存储管理方法、装置、设备及存储介质
CN101321341A (zh) 智能卡断电保护方法
CN110134645B (zh) 文件系统存储管理方法、读取方法、管理装置和读取装置
CN103514249A (zh) 一种数据自精简方法和系统及存储装置
CN112631950B (zh) 一种l2p表的保存方法、系统、设备以及介质
CN112463724A (zh) 一种轻量级文件系统的数据处理方法和系统
CN102096561A (zh) 分层数据存储处理方法、装置以及存储设备
CN104978154A (zh) 一种基于缓存操作的flash快速读写方法及系统
CN111159114A (zh) 文件存储方法、装置及服务器
CN105302665A (zh) 一种改进的写时拷贝快照方法及系统
CN115292266A (zh) 一种基于存储器的高可靠日志存储方法
CN111291022B (zh) 一种基于区块链的数据存储系统
CN112558868A (zh) 一种配置数据存储的方法和装置及设备
CN109445987A (zh) 一种基于block生长记录的SSD异常掉电恢复方法及其系统
CN102981975A (zh) 闪存数据的管理方法和系统
CN109857718A (zh) 一种应用于嵌入式系统的日志式文件系统
US10339020B2 (en) Object storage system, controller and storage medium
CN110262980B (zh) 基于有限寿命存储介质的高速存储系统
CN116339643B (zh) 一种磁盘阵列的格式化方法、装置、设备和介质
CN110286859B (zh) 基于fat文件系统的数据存储方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190607

RJ01 Rejection of invention patent application after publication