CN1300982A - 随机改变存储器根目录区和文件分配表储存位置的方法 - Google Patents
随机改变存储器根目录区和文件分配表储存位置的方法 Download PDFInfo
- Publication number
- CN1300982A CN1300982A CN 00130864 CN00130864A CN1300982A CN 1300982 A CN1300982 A CN 1300982A CN 00130864 CN00130864 CN 00130864 CN 00130864 A CN00130864 A CN 00130864A CN 1300982 A CN1300982 A CN 1300982A
- Authority
- CN
- China
- Prior art keywords
- root directory
- directory area
- bunch
- file
- allocation table
- 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
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种能最大限度延长可擦写非易失存储器使用寿命,全面利用存储器可利用空间的随机改变可擦写非易失存储器根目录区和文件分配表储存位置的方法。该方法的主要思想是在每次格式化过程中采用随机分配根目录区和文件分配表到一个完好簇驻的办法,以避免由于某一固定簇损坏而使格式化无法进行,最后导致存储器无法使用的情况。
Description
本发明涉及计算机存储器,尤其涉及通过随机改变根目录区和文件分配表在存储器中的存储位置从而延长存储器使用寿命的方法。
目前电子设备的可擦写型非易失性存储器大体上有硬盘,软盘,EEPROM,FLASH等种类。这些存储器提供了文件存储的功能,除了一小部分极简单的使用之外,一般这些存储可存储多个文件,需要一个文件管理系统,目前小容量存储器的文件管理一般是仿照微软的DOS文件管理系统。如硬盘和软盘上的FAT结构,SSFDC的SMART MEDIACARD的DOS.FAT文件结构。
DOS文件管理的一般结构:
A.文件的组织:树形目录结构,涉及目录项;
B.文件的存储:以存储器的簇为单位给文件分配存储器存储空间,涉及文件分配表(FAT);
C.根目录区:存储器上每个文件都有一个目录项,它登记了文件的名字、属性、建立或最后修改的日期、时间以及文件在存储器上的起始位置;每一存储器都只有一个根目录区,它包含一个根目录区的特征值和若干目录项;目录项可以是文件,也可以是子目录。根目录区占一个簇。
D.文件分配表(FAT):FAT(File Allocation Table)是DOS文件系统中保存文件存储空间的数据结构。
这几种可擦写型非易失存储器的特点是容易部分损坏,从而有不可用的部分。所以在FAT表中,需要登记坏的簇的位置。
已有技术的缺点:
DOS文件管理的缺点:
主要缺点是根目录区和文件分配表(FAT)的物理位置是固定的。对于固定式电子设备而言,由于工作环境稳定,根目录区和文件分配表(FAT)的物理簇发生损坏的可能性不大,没有成为一个重要的问题。
但对于便携式电子设备而言,体积重量的限制,不会有较好的防护功能,而且由于工作环境较差(振动,温度,电磁干扰),造成存储器损坏的可能性大大增加,这样一来,根目录区和文件分配表(FAT)的物理位置固定会使存储器根本无法使用,即使存储器还有较多的部分可以正常存储,也会由于软件的问题而无法使用。
我们委托国家知识产权局专利局检索咨询中心进行全球范围的查新检索,结果表明,目前仍没有人提出解决上述问题的方法。
本发明的目的在于克服现有技术的不足之处而提出一种能延长可擦写型非易失性存储器使用寿命,全面利用存储器可用空间的随机改变可擦写非易失存储器根目录区和文件分配表储存位置的方法。
本发明的目的可通过采取如下的技术措施来实现:在每次格式化的过程中,采用随机分配根目录区和文件分配表到一个完好簇的的办法,以避免由于某一固定的簇损坏而使格式化无法进行,最后导致存储器无法使用的情况。也即是设计一种随机改变可擦写非易失存储器根目录区和文件分配表储存位置的方法,该方法包括如下过程:
(1)、定义3个变量:
unsigned long ulRootPosition,
unsigned long ulFATPosition,
ucRootIdentify[20]=″一字符串″,
其中:
ulRootPosition指向根目录区的物理位置,
u1FATPosition指向文件分配表的物理位置,
常数字符串ucRootIdentify存储根目录区物理位置的起始部分,用于识别根目录区和其他簇,该字符串应较长,使得误判的可能性很小;
(2)、格式化过程如下:
A、产生一个小于存储器总簇数的一个随机正整数N;
B、检查随机数N对应簇是否完好,
C、如果损坏,回到A,
D、分配文件分配表到第N簇,
E、产生一个小于存储器总簇数的一个随机正整数M
F、检查随机数M对应簇是否完好,
G、如果损坏,回到E,
H、分配根目录区到第M簇;
I、将FAT表的簇号填写在根目录区的固定位置;
J、检查其他所有簇的情况,在FAT表中记录存储器各簇是否损坏;
K、退出。
(3)、程序启动的初始化过程如下:
A、对变量NUM赋初值1,即令NUM=1
B、读第NUM簇中信息,比较起始部分与原先定义的ucRootIdentify是否相同;
C、不相同,NUM=NUM+1,返回B;
D、将簇号NUM填入ulRootPosition;
E、读根目录区对应的FAT的簇号,填入ulFATPosition;
F、初始化过程结束。
当进行文件读写操作时,用ulRootPosition和ulFATPosition寻找对应的根目录区和FAT,对其进行操作。
附图的图面说明如下:
图1是本发明随机改变可擦写非易失存储器根目录区和文件分配表储存位置的方法格式化流程图;
图2是完成图1所述的格式化过程后每一次访问存储器时的初始化流程图。
下面结合附图对本发明的最佳实施例作进一步详细说明。
本发明的基本思路是,如果由于某种原因造成存储器某一固定的簇损坏而无法使用时,采用随机分配根目录区和文件分配表到一个完好簇的的办法对存储器重新格式化,以避免由于某一固定的簇损坏而使格式化无法进行,最后导致存储器无法使用的情况。图1是本发明所述的格式化过程:在描述格式化过程之前,先用C语言定义3个变量:
unsigned long ulRootPosition,
unsigned long ulFATPosition,
ucRootIdentify [20]=″一字符串″,
其中:
ulRootPosition指向根目录区的物理位置,
ulFATPosition指向文件分配表的物理位置,
常数字符串ucRootIdentify存储根目录区物理位置的起始部分,用于识别根目录区和其他簇,该字符串应较长,使得误判的可能性很小;
格式化过程如下:
A、产生一个小于存储器总簇数的一个随机正整数N;
B、检查随机数N对应簇是否完好,
C、如果损坏,回到A,
D、分配文件分配表到第N簇,
E、产生一个小于存储器总簇数的一个随机正整数M
F、检查随机数M对应簇是否完好,
G、如果损坏,回到E,
H、分配根目录区到第M簇;
I、将FAT表的簇号填写在根目录区的固定位置;
J、检查其他所有簇的情况,在FAT表中记录存储器各簇是否损坏;
K、退出。
经过上述的格式化过程后,存储器根目录区和文件分配表的存储位置已被改变,而且保证了根目录区和文件分配表分别被存放在存储器一个完好的簇中。此后,每一次开始使用存储器需要执行图2的初始化程序。
程序启动的初始化过程如下:
A、对变量NUM赋初值1,即令NUM=1
B、读第NUM簇中信息,比较起始部分与原先定义的ucRootIdentify是否相同;
C、不相同,NUM=NUM+1,返回B;
D、将簇号NUM填入ulRootPosition;
E、读根目录区对应的FAT的簇号,填入ulFATPosition;
F、初始化过程结束。
当进行文件读写操作时,用ulRootPosition和ulFATPosition寻找对应的根目录区和FAT,然后对其进行操作。
下面利用一个实施例来介绍如何使用本发明方法:
此实施例在深圳海尔信息科技有限公司的MP3播放器中实现对SMART MEDIA CARD的文件管理。数据结构:FS_CATALOG定义如下:
typedef struct os_fs_catalog{
unsigned char FileName[FS_FILE_NAME_LENGTH];
∥文件名,目前为26BYTE(FS_FILE_NAME_LENGTH)
unsigned char ExtendedName[FS_FILE_DEDNAME_LENGTH];
∥扩展名,3BYTE.
unsigned char AttributeReadOnly:1;
∥只读属性
unsigned char AttributeHidden:1;
∥隐藏属性
unsigned char AttributeSystem:1;
∥系统文件属性
unsigned char AttributeVoulme:1;
∥卷标属性
unsigned char AttributeSubDir:1;
∥是否子目录
unsigned char AttributeArchive:1;
∥归档属性
unsigned char AttributeNotUsed:2;
∥保留
∥the time file create.
∥创建时间
unsigned short TimeDSecond:5;∥two seocnds
unsigned short TimeMinute:6;
unsigned short TimeHour:5;
∥the date file create
unsigned short DateDay:5;
unsigned short DateMonth:4;
unsigned short DateYear:7; ∥from 1980 0ˉ199
unsigned short StartBlock;
∥第一个BLOCK号
unsigned long FileLength;
∥文件长度
}FS_CATALOG;
FS_CATALOG定义了文件的一些信息,操作系统中的文件管理部分使用到FS_CATALOG,应用程序创建新文件时,需要填上文件名等信息。
FS_ROOT_CATALOGS;
typedef struct os_fs_root_catalogs{
unsigned char cRootCharacter[FS_ROOT_CHAR_LENGTH];
unsigned long FATBlock[FS_ROOT_FAT_NUMBER];
unsigned char NotUsed[FS_ROOT_NOTUSED_NUM];
FS_CATALOG FSCatalog[FS_ROOT_MAX_FSCATALOGS];
}FS_ROOT_CATALOGS;
FS_ROOT_CATALOGS 定义根目录区的结构,cRootCharacter是一个特殊的字符串,将根目录区所在的BLOCK与其它BLOCK区分开。
FATBlock[FS_ROOT_FAT_NUMBER]指向FAT表所在的BLOCK.
目录层次结构:
FLASH上每个文件都有一个目录项,它登记了文件的名字、属性、建立或最后修改的日期、时间以及文件在FLASH上的起始位置。每一组FLASH都只有一个根目录区,它包含一个根目录区的特征值和若干目录项。目录项可以是文件,也可以是子目录。
根目录区占一个BLOCK。
根目录区的结构(定义在OS_FS.H中):
0Hˉ3FH:根目录区特征区,用于区分根目录区和其它BLOCK。
40Hˉ4FH:4个FAT表的BLOCK位置。0xFFFD为未用。
50HˉBFH:保留未用。
COHˉ1FFFH:200个目录项。
一个目录项为40个BYTE。
目录项的结构(定义在OS_PUBLIC.H中):
00Hˉ41H(26 BYTE):文件名。
注:如果文件名前两个BYTE为:0XFFFF,表示该目录项空闲。
42Hˉ44H(3BYTE):扩展名。
45H(8位):文件属性,各位意义如下:
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
保留 保留 档案 子目录卷标 系统 隐含 只读
46Hˉ47H(16位):文件建立或修改的最后时间。
B15ˉB11(小时,0ˉ23)。B10ˉB5:(分:0ˉ59);B4ˉB0(两秒0ˉ29)。
48Hˉ49H(16位):文件建立或修改的最后日期。
B15ˉB9(年,1980年为佳。0ˉ119)。B8ˉB5:(月:0ˉ12);B4ˉB0(日1ˉ31)。
4AHˉ4BH(16位):文件起始BLOCK号。
4CHˉ4FH(32位):文件长度。
子目录项表是一种特殊文件,它的内容由一些目录项组成。子目录的文件长度为0,但实际长度不为0。
不管子目录项表有多少项,它至少要有两项,名为(.)的目录项和(..)的目录项。
(.)的目录项的文件起始BLOCK号是此子目录项表文件起始BLOCK号。
(..)的目录项的文件起始BLOCK号是此子目录的父目录的目录项表文件起始BLOCK号。
文件分配表(FAT):
占一个BLOCK,每个表项目16BIT,其值代表一个BLOCK,共有4096个。如果该值没有特殊意义,则表示同一文件的下一个BLOCK.
可以代表32MB的FLASH。如果用64MBFLASH,再多一个BLOCK作文件分配表(FAT)即可。
几个特殊值意义如下(定义在OS-FS.H中):
文件最后的BLOCK:0xFFFF;
坏BLOCK:0xFFFE;
空闲BLOCK:0xFFFD;
系统用BLOCK:0xFFFC;
文件操作描述:
格式化(FSFormat()):如果系统开始运行时没有找到有根目录区特征区的BLOCK,则认为需格式化。
首先确定FLASH的大小,然后随机产生一个BLOCK值,测试是否坏BLOCK,是则再随机产生一个BLOCK值,直到有好BLOCK为止。这个好BLOCK做为文件分配表。将随后的坏BLOCK记录在文件分配表中。随FLASH的大小不同,可能需要几个BLOCK作为文件分配表。所有BLOCK测试完成之后,再随机产生一个BLOCK值,作为根目录区。将各类值填入根目录区中。为了使系统开始运行时搜索根目录区特征区的时间不致过长,可以将根目录区在起始的若干个BLOCK中选择.
增加一个文件(FSCreateFile()):(1)调用FSFileInfo()),在根目录区寻找空闲的目录项(文件名起始为0xFFFF)(2)然后修改根目录区,填入文件名,时间等信息(调用UpdateFileRootCatalog());
删除一个文件(FSDeleteFile()):(1)判断文件是否已删除,如果已删除,返回错误信息。(2)修改根目录区(调用UpdateFileRootCatalog()),将文件名前两个BYTE该为:OXFFFF,表示空闲。(3)修改文件分配表(ReadFAT()和UpdateFAT()),将其所有的BLOCK置为空闲。
打开文件(FSOpenFile()):(1)判断是否有stCurrentFile结构可用,如果没有,返回错误信息。(2)判断是否有stFsBuffer结均可用,如果没有,返回错误信息。(3)判断文件是否还未创建(对应的目录项空闲),如果没有创建,返回错误信息。(4)将文件的各项信息填入stCurrentFile中。将对应的缓冲区设置状态位,表示占用。(5)如果是写文件,读FAT到内存中(ReadFAT()),以便修改.此时占用较大的内存空间(8KBˉ32KB)(6)返回一个值表示文件在stCurrentFile中的位置.以后的文件读写和关闭均使用这个值来代表被打开的文件。
关闭文件(FSCloseFile()):(1)如果文件打开是写,则将缓冲区的剩余数据全部写到FALSH中。(FSUpdateWriteFileInformation())(2)更新文件FAT(UpdateFAT)(3)更新文件的时间,长度等信息(UpdateFileRootCatalog())(4)释放占用的缓冲区。
读文件(FSReadFile()):(1)判断所需的数据是否在缓冲区中.是则到(4)(2)判断需要读的页是否在新的BLOCK中,需要则调用FSFindNextFileBlock寻找文件所属的下一个BLOCK。(3)如果需要读新页,则读。(4)COPY最多不超过一页的数据到指定的缓冲区中。(5)如果还需要读数据,到(1)(6)返回
写文件(FSWriteFile()):(1)判断文件缓冲区是否已满,没有则到(4)(2)判断是否需要写在新的BLOCK中。是则寻找新的空闲BLOCK。(FSFindNextFreeBlock)(3)将原来的BLCOK在FAT表中的值设为新的空闲BLOCK的值,此时FAT已读在内存中..如果没有空闲BLOCK,设为FS_LAST_BLOCK,返回。(4)写一页。(5)如果还有数据要写,到(1)(6)返回。
存储器剩余空间(FSFreeSpace()):
返回存储器的剩余空间。(以BLOCK为单位)
本发明随机改变存储器根目录区和文件分配表储存位置的方法具有如下优点:存储器根目录区和文件分配表的储存位置不固定,从而能延长可擦写型非易失性存储器的使用寿命。
Claims (2)
1.一种随机改变存储器根目录区和文件分配表储存位置的方法,其特征在于该方法包括如下过程:
(1)、定义3个变量:
unsigned long ulRootPosition,
unsigned long ulFATPosition,
ucRootIdentify[20]=″一字符串″,
其中:
ulRootPosition指向根目录区的物理位置,
ulFATPosition指向文件分配表的物理位置,
常数字符串ucRootIdentify存储根目录区物理位置的起始部分,用于识别根目录区和其他簇,该字符串应较长,使得误判的可能性很小;
(2)、格式化过程如下:
A、产生一个小于存储器总簇数的一个随机正整数N;
B、检查随机数N对应簇是否完好,
C、如果损坏,回到A,
D、分配文件分配表到第N簇,
E、产生一个小于存储器总簇数的一个随机正整数M
F、检查随机数M对应簇是否完好,
G、如果损坏,回到E,
H、分配根目录区到第M簇;
I、将FAT表的簇号填写在根目录区的固定位置;
J、检查其他所有簇的情况,在FAT表中记录存储器各簇是否损坏;
K、退出。
(3)、程序启动的初始化过程如下:
A、对变量NUM赋初值1,即令NUM=1
B、读第NUM簇中信息,比较起始部分与原先定义的ucRootIdentify是否相同;
C、不相同,NUM=NUM+1,返回B;
D、将簇号NUM填入ulRootPosition;
E、读根目录区对应的FAT的簇号,填入ulFATPosition;
F、初始化过程结束。
2.根据权利要求1所述的随机改变存储器根目录区和文件分配表储存位置的方法,其特征在于:当进行文件读写操作时,用ulRootPosition和ulFATPosition寻找对应的根目录区和FAT,对其进行操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 00130864 CN1300982A (zh) | 2000-12-13 | 2000-12-13 | 随机改变存储器根目录区和文件分配表储存位置的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 00130864 CN1300982A (zh) | 2000-12-13 | 2000-12-13 | 随机改变存储器根目录区和文件分配表储存位置的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1300982A true CN1300982A (zh) | 2001-06-27 |
Family
ID=45873270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 00130864 Pending CN1300982A (zh) | 2000-12-13 | 2000-12-13 | 随机改变存储器根目录区和文件分配表储存位置的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1300982A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101027651B (zh) * | 2004-07-21 | 2010-06-09 | 桑迪士克股份有限公司 | 最佳顺序性簇管理的fat分析 |
CN101425041B (zh) * | 2007-10-30 | 2010-09-15 | 安凯(广州)微电子技术有限公司 | 在nand flash存储器上建立fat文件系统的优化方法 |
CN103116640A (zh) * | 2013-02-21 | 2013-05-22 | 珠海全志科技股份有限公司 | Fat文件系统格式化方法及装置 |
CN102055738B (zh) * | 2009-11-10 | 2013-07-03 | 纬创资通股份有限公司 | 储存文件于一网络储存装置的方法及网络储存装置 |
-
2000
- 2000-12-13 CN CN 00130864 patent/CN1300982A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101027651B (zh) * | 2004-07-21 | 2010-06-09 | 桑迪士克股份有限公司 | 最佳顺序性簇管理的fat分析 |
CN101425041B (zh) * | 2007-10-30 | 2010-09-15 | 安凯(广州)微电子技术有限公司 | 在nand flash存储器上建立fat文件系统的优化方法 |
CN102055738B (zh) * | 2009-11-10 | 2013-07-03 | 纬创资通股份有限公司 | 储存文件于一网络储存装置的方法及网络储存装置 |
CN103116640A (zh) * | 2013-02-21 | 2013-05-22 | 珠海全志科技股份有限公司 | Fat文件系统格式化方法及装置 |
CN103116640B (zh) * | 2013-02-21 | 2015-12-23 | 珠海全志科技股份有限公司 | Fat文件系统格式化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1297900C (zh) | 数据存储设备、主机设备、数据记录系统及数据管理方法 | |
CN1256732C (zh) | 快闪存储器及其控制方法 | |
CN1315057C (zh) | 重映射闪速存储器的方法 | |
CN1906596A (zh) | 文件记录装置 | |
CN1493026A (zh) | 存储装置及利用此存储装置的记录再生装置 | |
CN1215415C (zh) | 文件管理方法和存储信息记录重放装置 | |
CN1295706C (zh) | 非易失存储器、记录装置和记录方法 | |
CN1645323A (zh) | 以存储技术抽象方式在文件内创建文件系统 | |
CN1704908A (zh) | 定位程序异常的方法 | |
CN1167014C (zh) | 文件处理方法和数据处理装置 | |
CN1516835A (zh) | 数据存储装置 | |
CN1914602A (zh) | 文件名生成装置 | |
CN1717660A (zh) | 文件管理装置、文件管理方法、文件管理程序和记录介质 | |
CN1858742A (zh) | 一种在实时数据库中实现更新数据的方法和系统 | |
CN1376980A (zh) | 存储器 | |
CN1517947A (zh) | 非易失性存储器 | |
CN1698035A (zh) | 数据存储装置、更新数据存储装置中的管理信息的方法和计算机程序 | |
CN101030223A (zh) | 用于处理信息的装置、方法、和计算机程序 | |
CN1613061A (zh) | 程序执行处理终端装置、程序执行处理方法及程序 | |
CN1278228C (zh) | 两层粘贴缓冲区和显示装置 | |
CN1717661A (zh) | 数据记录装置 | |
CN1485732A (zh) | 应用软件自动安装与自动修复的方法 | |
CN1866376A (zh) | 数据显示方法和再现装置 | |
CN101065725A (zh) | 命令供给装置 | |
CN1574010A (zh) | 文件管理方法和记录装置、再现装置、记录媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |