CN1963810A - 在Flash存储介质上的关于文件分配表的缓存实现方法 - Google Patents

在Flash存储介质上的关于文件分配表的缓存实现方法 Download PDF

Info

Publication number
CN1963810A
CN1963810A CNA2005101177387A CN200510117738A CN1963810A CN 1963810 A CN1963810 A CN 1963810A CN A2005101177387 A CNA2005101177387 A CN A2005101177387A CN 200510117738 A CN200510117738 A CN 200510117738A CN 1963810 A CN1963810 A CN 1963810A
Authority
CN
China
Prior art keywords
fat
item
value
fat item
fatcache
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.)
Granted
Application number
CNA2005101177387A
Other languages
English (en)
Other versions
CN100580669C (zh
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.)
Konka Group Co Ltd
Original Assignee
Konka Group 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 Konka Group Co Ltd filed Critical Konka Group Co Ltd
Priority to CN200510117738A priority Critical patent/CN100580669C/zh
Publication of CN1963810A publication Critical patent/CN1963810A/zh
Application granted granted Critical
Publication of CN100580669C publication Critical patent/CN100580669C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明在Flash存储介质上关于文件分配表的缓存实现方法发明的缓存针对单个的文件,当创建或打开文件时,就会创建一文件对象结构与之对应,在文件对象结构中有结构数组FatCache[FAT_CACHE_NUM]作为要修改的目录项的缓存,FatCache数组中的每一项对应文件的一个FAT项,其结构包含簇号、簇对应的FAT项的值以及FAT项的修改时间,当文件系统修改FAT项时,就在FatCache[]找一节点,将要修改的FAT项对的簇号、FAT值、时间写入对应的节点中,当关闭或刷新文件时,文件系统会将FatCache[]中的有效内容写入disk FAT区的对应位置。本发明所需RAM资源较少,简化了文件系统的掉电保护工作。

Description

在Flash存储介质上的关于文件分配表的缓存实现方法
技术领域
本发明为针对嵌入式设备FAT文件系统的一种FAT项缓存实现的方法。
背景技术
嵌入式设备多以Flash作为存贮媒体,其RAM等资源都比较有限,且往往对掉电保护有严格要求。Flash存贮媒体的写操作一般都比较耗时,且不能实现数据位由”0”->”1”的翻转,这就要求尽可能减少Flash上的写操作。因此嵌入式设备上的FAT文件系统在其实现上应具有一些特殊性。
对于FAT表,一般的文件系统实现方式是申请一块很大内存空间,作为FAT表的内存映象。实际上一个文件的操作过程中需修改的FAT项个数往往并不多,有一个FAT项只有2个或4个字节。这些方法内存空间消耗较大,且不利于文件系统的掉电保护。
嵌入式设备文件系统要求缓存不能占用较多的RAM资源,又要有较高的命中率,缓存效率较高。
发明内容
为了克服上述现有技术内存空间消耗较大、且不利于文件系统的掉电保护的缺点,提供一种在Flash存储介质上关于文件分配表的缓存实现方法。
本发明的技术方案是:提供一种在Flash存储介质上关于文件分配表的缓存实现方法,其缓存针对单个的文件,当创建或打开文件时,就会创建一文件对象结构与之对应,在文件对象结构中有一个结构数组FatCache[FAT_CACHE_NUM],该数组的一个元素为一个FAT项缓存节点,该节点是一个包含了如下字段的结构:
Age:修改时间,该值越小,表明该项修改时间越早;
ClusterNo:簇号,FAT项对应簇的簇号;
FatVal:FAT项的值;
在文件系统的Disk被打开时,会申请一个位图表,该表的每一位顺序对应FAT区中的FAT项,如对应的FAT项被使用,则该项被置为‘1’,否则为‘0’;
当文件系统修改FAT项时,就将要修改的FAT项对应的簇号、FAT项的值、当前时间写到数组FatCache[]的一个节点中;
如FatCache[]中没有对应节点或没有属性为NULL的节点,则找出FatCache[]中的LRU节点,将其值回写进Disk,再将要改写的FAT项对应的簇号、FAT项的值、当前时间写至LRU节点中,上述的LRU指最近最少使用的节点;
在写FAT项的值进入对应的FAT项缓存节点时,如FAT项的值不为FREE,则要置位图表中的对应位为‘1’,表示该FAT项已被占用;
在回写FAT项缓存节点中的FAT值到Disk中的FAT区的对应位置时,如FAT项的值为FREE,则要置位图表中的对应位为‘0’,表示该FAT项已被释放,处于FREE状态;
当关闭或刷新文件时,文件系统会将FatCache[]中的有效内容写入disk FAT区的对应位置。
所述的在Flash存储介质上关于文件分配表的缓存实现方法,其FAT项缓存的实施方法包含以下三部分内容:
第一:文件系统修改FAT项的实施方法;
第二:文件系统读FAT项的实施方法;
第三:将FAT项缓存节点的FAT值写入disk中FAT区的实施方法。
所述的在Flash存储介质上关于文件分配表的缓存实现方法,所述的文件系统修改FAT项的实施方法如下:
步骤一,先查找要修改的FAT项是否在结构数组FatCache中,如果命中,直将FAT项的值写入结构数组FatCache对应的FAT项缓存节点中;如果没有命中,转下一步;
步骤二,结构数组FatCache中是否有空闲项,如存在,则以空闲项作为要修改FAT项的缓存节点,并将位图中的对应位置为‘1’;如果不存在,转下一步;
步骤三,在结构数组FatCache中找LRU项,将该项的值回写入Disk,如回写的FAT值为Free,还应将回写项在位图中的对应位置为‘0’。然后将数组中的该项改为要修改FAT项的缓存节点,再将要修改的FAT项在位图中的对应位置为‘1’。
所述的在Flash存储介质上关于文件分配表的缓存实现方法,所述的文件系统读FAT项的实施方法如下:
查找要读的FAT项是否在结构数组FatCache中,如果命中,则从结构数组FatCache对应的中读出该FAT项的值;如果没有命中,则从Disk的FAT表中读出。
所述的在Flash存储介质上关于文件分配表的缓存实现方法,所述的将FAT项缓存节点的FAT值写入disk中FAT区的实施方法如下:
步骤一,找到缓存节点对应的FAT项所在的FAT区中扇区,为叙述方便,称该扇区为扇区A;
步骤二,将扇区A的内容读入扇区Buffer中;
步骤三,根据簇号将其要回写缓存节点的FAT值写入扇区缓冲区的对应位置中,如FAT值为FREE,则要将簇号记录在一数组DeletedLisk中;
步骤四,在FatCache[]中查找,是否还有缓存节点对应的目录扇区为扇区A,若存在,则根据簇号将其FAT值写入扇区缓冲区的对应位置中,如FAT值为FREE,则要将簇号记录在数组DeletedLisk中;
步骤五,将扇区缓冲区中的内容写入扇区A中;步骤六,在DeletedLisk中逐个查找有效簇号,根据簇号将位图中的对应位置为0,释放该簇。
本发明的有益效果是:本发明在Flash存储介质上关于文件分配表的缓存实现方法,其所需的RAM资源较少,但缓存的命中率较高,并使文件系统能较好、较容易地解决掉电问题。
附图说明
下面将参考附图进行详细的说明。
附图1为本发明在Flash存储介质上关于文件分配表的缓存实现方法的说明:文件系统修改FAT项的步骤。
附图2为本发明在Flash存储介质上关于文件分配表的缓存实现方法的说明:回写FAT项缓存节点的步骤。
具体实施方式
本发明在Flash存储介质上关于文件分配表的缓存实现方法的缓存针对单个的文件,当创建或打开文件时,就会创建一文件对象结构与之对应,在文件对象结构中有一个结构数组FatCache[FAT_CACHE_NUM],该数组的一个元素我们在此称之为一个FAT项缓存节点,该节点是一个包含了如下字段的结构:
Age:修改时间,该值越小,表明该项修改时间越早;
ClusterNo:簇号,FAT项对应簇的簇号;
FatVal:FAT项的值;
在文件系统的Disk被打开时,会申请一个位图表,该表的每一位顺序对应FAT区中的FAT项,如对应的FAT项被使用,则该项被置为‘1’,否则为‘0’;
当文件系统修改FAT项时,就将要修改的FAT项对应的簇号、FAT项的值、当前时间写到数组FatCache[]的一个节点中;
如FatCache[]中没有对应节点或没有属性为NULL的节点,则找出FatCache[]中的LRU节点,将其值回写进Disk,再将要改写的FAT项对应的簇号、FAT项的值、当前时间写到LRU节点中,上述的LRU指最近最少使用的节点集合;
在写FAT项的值进入对应的FAT项缓存节点时,如FAT项的值不为FREE,则要置位图表中的对应位为‘1’,表示该FAT项已被占用;
在回写FAT项缓存节点中的FAT值到Disk中的FAT区的对应位置时,如FAT项的值为FREE,则要置位图表中的对应位为‘0’,表示该FAT项已被释放,处于FREE状态;
当关闭或刷新文件时,文件系统会将FatCache[]中的有效内容写入disk FAT区的对应位置。
请一并参阅图1和图2,本发明在Flash存储介质上关于文件分配表的缓存实现方法包括以下步骤:
1.文件系统修改FAT项的实施方法(参阅附图1):
步骤一,先查找要修改的FAT项是否在结构数组FatCache中,如果命中,直将FAT项的值写入结构数组FatCache对应的FAT项缓存节点中;如果没有命中,转下一步;
步骤二,结构数组FatCache中是否有空闲项,如存在,则以空闲项作为要修改FAT项的缓存节点,并将位图中的对应位置为‘1’;如果不存在,转下一步;
步骤三,在结构数组FatCache中找LRU项,将该项的值回写入Disk,如回写的FAT值为Free,还应将回写项在位图中的对应位置为‘0’。然后将数组中的该项改为要修改FAT项的缓存节点,再将要修改的FAT项在位图中的对应位置置为‘1’。
2.文件系统读FAT项的实施方法:
查找要读的FAT项是否在结构数组FatCache中,如果命中,则从结构数组FatCache对应的中读出该FAT项的值;如果没有命中,则从Disk的FAT表中读出。
3.将FAT项缓存节点的FAT值写入disk中FAT区的实施方法(参阅附图2):
步骤一,根据缓存节点的簇号确定对应的FAT项所在的目录扇区及其在扇区中的位置(为叙述方便,称该扇区为扇区A);
步骤二,将扇区A的内容读入扇区Buffer中;
步骤三,根据簇号将其要回写缓存节点的FAT值写入扇区缓冲区的对应位置中。如FAT值为FREE,则要将簇号记录在一数组DeletedLisk中;
步骤四,在FatCache[]中查找,是否还有缓存节点对应的目录扇区为扇区A,若存在,则根据簇号将其FAT值写入扇区缓冲区的对应位置中,如FAT值为FREE,则要将簇号记录在数组DeletedLisk中;
步骤五,将扇区缓冲区中的内容写入扇区A中;
步骤六,在DeletedLisk中逐个查找有效簇号,根据簇号将位图中的对应位置为0,释放该簇。

Claims (5)

1、一种在Flash存储介质上关于文件分配表的缓存实现方法,其特征在于:其缓存针对单个的文件,当创建或打开文件时,就会创建一文件对象结构与之对应,在文件对象结构中有一个结构数组FatCache[FAT_CACHE_NUM],该数组的一个元素为一个FAT项缓存节点,该节点是一个包含了如下字段的结构:
Age:修改时间,该值越小,表明该项修改时间越早;
ClusterNo:簇号,FAT项对应簇的簇号;
FatVal:FAT项的值;
在文件系统的Disk被打开时,会申请一个位图表,该表的每一位顺序对应FAT区中的FAT项,如对应的FAT项被使用,则该项被置为‘1’,否则为‘0’;
当文件系统修改FAT项时,就将要修改的FAT项对应的簇号、FAT项的值、当前时间写到数组FatCache[]的一个节点中;
如FatCache[]中没有对应节点或没有属性为NULL的节点,则找出FatCache[]中的LRU节点,将其值回写进Disk,再将要改写的FAT项对应的簇号、FAT项的值、当前时间写到LRU节点中,上述的LRU指最近最少使用的节点;
在写FAT项的值进入对应的FAT项缓存节点时,如FAT项的值不为FREE,则要置位图表中的对应位为‘1’,表示该FAT项已被占用;
在回写FAT项缓存节点中的FAT值到Disk中的FAT区的对应位置时,如FAT项的值为FREE,则要置位图表中的对应位为‘0’,表示该FAT项已被释放,处于FREE状态;
当关闭或刷新文件时,文件系统会将FatCache[]中的有效内容写入disk FAT区的对应位置。
2、按照权利要求1所述的在Flash存储介质上关于文件分配表的缓存实现方法,其特征在于FAT项缓存的实施方法包含以下三部分内容:
第一:文件系统修改FAT项的实施方法;
第二:文件系统读FAT项的实施方法;
第三:将FAT项缓存节点的FAT值写入disk中FAT区的实施方法。
3、按照权利要求2所述的在Flash存储介质上关于文件分配表的缓存实现方法,其特征在于所述的文件系统修改FAT项的实施方法如下:
步骤一,先查找要修改的FAT项是否在结构数组FatCache中,如果命中,直将FAT项的值写入结构数组FatCache对应的FAT项缓存节点中;如果没有命中,转下一步;
步骤二,结构数组FatCache中是否有空闲项,如存在,则以空闲项作为要修改FAT项的缓存节点,并将位图中的对应位置置为‘1’;如果不存在,转下一步;
步骤三,在结构数组FatCache中找LRU项(Age最小),将该项的值回写入Disk,如回写的FAT值为Free,还应将回写项在位图中的对应位置为‘0’。然后将数组中的该项改为要修改FAT项的缓存节点,再将要修改的FAT项在位图中的对应位置为‘1’。
4、按照权利要求2所述的在Flash存储介质上关于文件分配表的缓存实现方法,其特征在于所述的文件系统读FAT项的实施方法如下:
查找要读的FAT项是否在结构数组FatCache中,如果命中,则从结构数组FatCache对应的中读出该FAT项的值;如果没有命中,则从Disk的FAT表中读出。
5、按照权利要求2所述的在Flash存储介质上关于文件分配表的缓存实现方法,其特征在于所述的将FAT项缓存节点的FAT值写入disk中FAT区的实施方法如下:
步骤一,根据缓存节点的簇号确定对应的FAT项所在的目录扇区及其在扇区中的位置,为叙述方便,称该扇区为扇区A;
步骤二,将扇区A的内容读入扇区Buffer中;
步骤三,根据簇号将其要回写缓存节点的FAT值写入扇区缓冲区的对应位置中,如FAT值为FREE,则要将簇号记录在一数组DeletedLisk中;
步骤四,在FatCache[]中查找,是否还有缓存节点对应的目录扇区为扇区A,若存在,则根据簇号将其FAT值写入扇区缓冲区的对应位置中,如FAT值为FREE,则要将簇号记录在数组DeletedLisk中;
步骤五,将扇区缓冲区中的内容写入扇区A中;
步骤六,在DeletedLisk中逐个查找有效簇号,根据簇号将位图中的对应位置为0,释放该簇。
CN200510117738A 2005-11-09 2005-11-09 在Flash存储介质上的关于文件分配表的缓存实现方法 Active CN100580669C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200510117738A CN100580669C (zh) 2005-11-09 2005-11-09 在Flash存储介质上的关于文件分配表的缓存实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200510117738A CN100580669C (zh) 2005-11-09 2005-11-09 在Flash存储介质上的关于文件分配表的缓存实现方法

Publications (2)

Publication Number Publication Date
CN1963810A true CN1963810A (zh) 2007-05-16
CN100580669C CN100580669C (zh) 2010-01-13

Family

ID=38082867

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200510117738A Active CN100580669C (zh) 2005-11-09 2005-11-09 在Flash存储介质上的关于文件分配表的缓存实现方法

Country Status (1)

Country Link
CN (1) CN100580669C (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102024060A (zh) * 2010-12-31 2011-04-20 山西奥克斯电子系统工程中心 存储文件及恢复误删除文件的方法
CN101471126B (zh) * 2007-12-28 2011-04-27 北京爱国者存储科技有限责任公司 电子录音设备掉电的数据保护的方法
CN101634997B (zh) * 2009-06-02 2011-10-05 福州思迈特数码科技有限公司 增强基于NAND Flash的FAT文件系统稳定性的方法
CN102622301A (zh) * 2011-01-28 2012-08-01 深圳兆日科技股份有限公司 一种闪存文件的读取和更新方法及系统
CN103020323A (zh) * 2013-01-15 2013-04-03 山东大学 一种基于未知长度二分查找的闪存数据检索存储的方法
CN103258044A (zh) * 2013-05-24 2013-08-21 北京航天自动控制研究所 一种面向dsp的二元组nandflash数据文件管理方法
CN103699613A (zh) * 2013-12-17 2014-04-02 迈普通信技术股份有限公司 一种嵌入式系统中文件系统的缓冲方法及系统

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101471126B (zh) * 2007-12-28 2011-04-27 北京爱国者存储科技有限责任公司 电子录音设备掉电的数据保护的方法
CN101634997B (zh) * 2009-06-02 2011-10-05 福州思迈特数码科技有限公司 增强基于NAND Flash的FAT文件系统稳定性的方法
CN102024060A (zh) * 2010-12-31 2011-04-20 山西奥克斯电子系统工程中心 存储文件及恢复误删除文件的方法
CN102024060B (zh) * 2010-12-31 2012-10-24 山西奥克斯电子系统工程中心 存储文件及恢复误删除文件的方法
CN102622301A (zh) * 2011-01-28 2012-08-01 深圳兆日科技股份有限公司 一种闪存文件的读取和更新方法及系统
CN103020323A (zh) * 2013-01-15 2013-04-03 山东大学 一种基于未知长度二分查找的闪存数据检索存储的方法
CN103020323B (zh) * 2013-01-15 2016-01-20 山东大学 一种基于未知长度二分查找的闪存数据检索存储的方法
CN103258044A (zh) * 2013-05-24 2013-08-21 北京航天自动控制研究所 一种面向dsp的二元组nandflash数据文件管理方法
CN103258044B (zh) * 2013-05-24 2017-01-18 北京航天自动控制研究所 一种面向dsp的二元组nandflash数据文件管理方法
CN103699613A (zh) * 2013-12-17 2014-04-02 迈普通信技术股份有限公司 一种嵌入式系统中文件系统的缓冲方法及系统

Also Published As

Publication number Publication date
CN100580669C (zh) 2010-01-13

Similar Documents

Publication Publication Date Title
CN102782683B (zh) 用于数据库服务器的缓冲池扩展
US9792227B2 (en) Heterogeneous unified memory
US8595451B2 (en) Managing a storage cache utilizing externally assigned cache priority tags
US8650379B2 (en) Data processing method for nonvolatile memory system
CN100580669C (zh) 在Flash存储介质上的关于文件分配表的缓存实现方法
CN102662856B (zh) 一种固态硬盘及其存取方法
US20100082537A1 (en) File system for storage device which uses different cluster sizes
CN104572478A (zh) 数据存取方法和数据存取装置
KR20090026296A (ko) 예측 데이터 로더
CN101727395A (zh) 闪存设备的管理系统、方法及闪存设备
CN104866428A (zh) 数据存取方法和数据存取装置
US9558124B2 (en) Data storage system with passive partitioning in a secondary memory
KR101374065B1 (ko) 칩 레벨 평행 플래시 메모리를 위한 정보 분별 방법 및 장치
US9875030B2 (en) Media write operation
US8429339B2 (en) Storage device utilizing free pages in compressed blocks
US20120144111A1 (en) Method and device for utilizing application-level prior knowledge for selectively storing data in higher performance media
CN103198021B (zh) 一种提高固态硬盘数据传输效率的方法
CN111796759A (zh) 多平面上的片段数据读取的计算机可读取存储介质及方法
JP2005222534A (ja) フラッシュメモリのデータ管理装置及び方法
CN114036079B (zh) 映射表压缩方法、系统、存储器控制器、固态硬盘及数据读取方法
CN108563586B (zh) 一种分离固态盘中垃圾回收数据与用户数据的方法
CN111459400B (zh) 在存储服务器中进行基于管线的存取管理的方法及设备
CN105138277A (zh) 一种固态盘阵列的缓存管理方法
KR20090007926A (ko) 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
CN102160038A (zh) 管理非易失性磁盘高速缓存的方法和设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant