本发明专利技术公开了一种线性访问文件的方法,该方法为:将文件数据写入连续的存储区,并在该文件的属性信息中记录该文件为线性读取文件;在文件系统读取文件时,先根据文件的属性信息判断该文件是否为线性读取文件,并在该文件为线性读取文件时获取该文件的首地址和文件长度,然后根据文件的首地址和文件长度,通过总线直接读取文件数据进行处理。
【技术实现步骤摘要】
本专利技术涉及计算机和通信领域的文件系统,尤其涉及。
技术介绍
传统的文件系统在存储文件数据时,把数据分解为多个部分在存储空间中不同的位置进行保存,并通过链表对存储位置进行关联。现有的存储器从访问/操作模式上分为总线(Bus)模式和输入输出(I/O)模式,在总线模式下,存储器数据的读取非常方便。但目前访问/操作总线存储器的文件系统都是采用传统方法进行读写,在向总线存储器写数据时,需要先将数据存入内存,然后再写入到存储中;在从总线存储器读数据时,先将数据读到内存后再进行处理;数据的流向如图1中的虚线所示。这种方式不仅因速度慢而导致效率低,而且使总线存储器的优势得不到发挥。
技术实现思路
本专利技术提供,以解决现有的文件系统在访问总线存储器时存在效率低和不能充分发挥总线存储器性能的问题。为解决上述问题,本专利技术提供以下技术方案,该方法包括存储步骤,用于将文件数据写入连续的存储区,并在该文件的属性信息中记录该文件为线性读取文件;判断步骤,用于在文件系统读取文件时,先根据文件的属性信息判断该文件是否为线性读取文件,并在该文件为线性读取文件时获取该文件的首地址和文件长度;线性读取步骤,用于根据文件的首地址和文件长度,通过总线直接读取文件数据进行处理。所述线性存储步骤中,如果将存储器中已有的非线性读取文件存储为线性读取文件,则将该文件写入到连续的存储区后将原存储区的数据删除。所述存储步骤中,如果所有的连续存储区均不足以存储所述文件数据时,则移动数据存储区的数据以形成一个与该文件数据大小相应的连续存储区存储文件数据。先选择最大的并且未被使用的连续存储区,从该连续存储区的尾部开始将文件数据从尾部到头部方连续写入,在写满后将该连续存储区前部已被占用的存储区中的数据移动到其他存储区域,将剩余的文件数据写入该前部存储区。所述文件系统包括但不限于FAT系统和NTFS文件系统。本专利技术采用存储器中连续的存储空间存储文件数据,在记取的时候根据文件首地址和文件长度,通过总线线性地读取文件数据进行处理,不需要先将存储器里面读出到内存后进行处理。因此,本专利技术不仅提高了文件的读取速度和减少了内存开销,而且可直接执行位于存储器的可执行文件,使总线存储器的性能得到充分发挥。附图说明图1为计算机装置中采用现有的文件系统访问存储器时文件数据的流向示意图;图2A、图2B、图2C、图2D为本专利技术中将非线性和线性存储文件数据的存储位置示意图;图3为本专利技术中文件系统访问存储器时文件数据的流向示意图。具体实施例方式本实施例主要以文件分配表(File Allocation Table,FAT)文件系统对本专利技术进行说明。FAT系统在计算机中主要完成三项功能跟踪记录存储器上中被耗用的空间和自由空间,维护目录名和文件名,跟踪记录每一个文件的物理存储位置。FAT文件系统采用文件描述表(FDT)来记录文件的属性信息,如存储文件的起始位置、文件长度(大小)等;通过FAT表来记录文件的物理存储位置,FAT表是在FAT文件系统中用于磁盘数据(文件)索引和定位的一种链式表,表中记录存储各文件的簇号。簇(Cluster)是将某一线形范围的物理位置(地址)形成一个管理单位,如磁盘的最小单位是一个扇区,一个簇可以根据需要包含两个、四个甚至更多的扇区。为了提高访问总线存储器的效率和充分发挥其性能,本专利技术将文件数据写入总线存储器中连续的存储区,即把文件数据顺序线性存储,并在记录该文件属性信息的文件描述表中记录该文件为线性读取文件;在文件系统读取文件时,先根据文件的属性信息判断该文件是否为线性读取文件,并在该文件为线性读取文件时从文件描述表中获取该文件的首地址和文件长度;最后文件系统根据文件的首地址和文件长度,通过总线直接读取整个文件数据进行处理。所述总线存储器是指可以通过向总线直接发送地址获得数据(如内存\NorFLash),而非命令型存储器。对于命令型存储器,其处理方式与现有技术相同,不再赘述。以图2A所示的一个已存储在存储器中的文件A为例进行说明。文件A在总线存储器上占用簇10、12、14、16、18五个非连续的存储区。将文件A存储为线性文件时,首先设置将一个文件为线性读取文件,然后文件系统在存储器内寻找一块连续的未被使用的区域,即图2B中的簇30、31、32、33、34,将文件A的数据存入该区,并清除簇10、12、14、16、18的数据内容。在文件A的数据存储区改变的修改FAT表中相应的表项,并将文件描述表的首地址指向簇30。上述情况是在存储连续的存储空间足以存储文件A的数据,但当总线存储器中存储空间的碎片较多,所有的连续存储区均不足以存储文件数据时,则需要移动数据存储区的数据以形成一个与该文件数据大小相应的连续存储区存储文件数据。参阅图2C所示,文件A需要占用5个簇,而当前存储空间最大的连续空间为4个簇,即簇31到簇34。为了提高存储文件数据的效率,在这种情况下的一种处理方式如下1、先选择最大的并且未被使用的连续存储区,即图2C中的簇31到簇34。2、从连续存储区的尾部开始存储数据,即从簇34开始存储,而文件数据也从尾部到头部方向写入存储区,先将簇14的文件数据写入簇34,写完后将簇13的文件数据写入簇33,至到将簇11的文件数据写入簇31。3、此时,将连续存储区前部的簇30中的数据移动到簇35(也可以是其他未被占用的簇),然后将簇10中的文件数据写入簇30,其结果如图2D所示。在上述对数据存储位置的改变过程中,均要对FAT表和文件描述表作相应的修改。当然上述过程中,也可以选择其他的连续的存储区域进行线性存储文件A的数据,只是需要移动较多的数据,效率更低。对于文件系统需要写入总线存储器的文件,首先选择连续的存储空间写入,如果没有足够大的空间,则采用与上述相同的处理方式。由于处理器在执行程序前需要获得程序指令,而现有技术中程序指令一般存于内存,由处理器通过总线发送地址请求数据,对该数据进行译码等操作来执行程序。一般情况下,先从存储设备(如硬盘)复制数据到内存,再修改处理器程序计数器的值指向该数内存区的地址,处理器立刻对该数据处理。当采用线形读取方法时,由于存储器也是通过总线访问并且是连续存储数据的,因此,只需把处理器程序计数的地址设置为线形可执行文件的起始地址即可,无需内存复制工作。在欲读取文件前,首先根据文件描述表中的属性信息(即文件是否为线性读取文件)判断是否进行线形读取(因为通用的文件读取操作,都是需要开一个内存缓冲区,所以必须判断。),若欲进行线形读取,就不需要开内存缓冲区,并使用有别于通用读取函数(如标准C语言的fread)的线性读取函数,同时需要向该函数输入欲读取的文件路径,函数输出文件的起始地址指针和文件的长度。以标准C语言为例,线性读取的实现过程如下<pre listing-type="program-listing"> int linear_length(char*filename);//获取文件长度的函数char*linear_read(char*filename);//获取文件起始位置的函数int main(int argc,char*argv=%x\n″,i,fh);//输出缓冲区的数据}return l;}</pre>对于本文档来自技高网...
【技术保护点】
一种线性访问文件的方法,其特征在于该方法包括: 线性存储步骤,用于将文件数据写入存储器中连续的存储区,并在该文件的属性信息中记录该文件为线性读取文件; 判断步骤,用于在文件系统读取文件时,先根据文件的属性信息判断该文件是否为线性读取文件,并在该文件为线性读取文件时获取该文件的首地址和文件长度; 线性读取步骤,用于根据文件的首地址和文件长度,通过总线直接读取文件数据进行处理。
【技术特征摘要】
【专利技术属性】
技术研发人员:谭帅,
申请(专利权)人:北京中星微电子有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。