CN108491402A - 一种轻量级文件系统的实现方法 - Google Patents
一种轻量级文件系统的实现方法 Download PDFInfo
- Publication number
- CN108491402A CN108491402A CN201810044641.5A CN201810044641A CN108491402A CN 108491402 A CN108491402 A CN 108491402A CN 201810044641 A CN201810044641 A CN 201810044641A CN 108491402 A CN108491402 A CN 108491402A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- block
- writebuffer
- read
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种轻量级文件系统的实现方法,涉及电子数据处理领域。所述方法包括:嵌入式设备上电后,集成在嵌入式设备上的轻量级文件系统进行初始化,如果初始化失败,则创建轻量级文件系统;如果初始化成功,则判断轻量级文件系统是否存在,若是,则等待操作指令并执行相应功能;若否,则创建轻量级文件系统,然后等待操作指令并执行相应操作;所述操作指令包括轻量级文件系统接收到的外部操作指令和轻量级文件系统接自身内部操作指令。本发明所述方法采用LOG操作方式记录文件、缓冲数据。此种方式易于理解维护管理,通过LOG操作方式减少对数据块的频繁操作,使读写速度更平滑,提高整体读写效率,提高外部存储器的使用寿命。
Description
技术领域
本发明涉及电子数据处理领域,尤其涉及一种轻量级文件系统的实现方法。
背景技术
日常生活中,嵌入式设备越来越常见。应用的范围也越来越广泛。随之而来嵌入式设备数据存储读取过程中存在的不足如效率低、体系复杂、代码体系难以维护逐渐体现,尽管已有相应处理技术用于解决嵌入式设备数据存储读取过程的不足,但,现有技术的处理过程复杂且冗余。
发明内容
本发明的目的在于提供一种轻量级文件系统的实现方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明所述轻量级文件系统的实现方法,所述实现方法包括:嵌入式设备上电后,集成在嵌入式设备上的轻量级文件系统进行初始化,如果初始化失败,则创建轻量级文件系统;如果初始化成功,则判断轻量级文件系统是否存在,若是,则等待操作指令并执行相应功能;若否,则创建轻量级文件系统,然后等待操作指令并执行相应操作;所述操作指令包括轻量级文件系统接收到的外部操作指令和轻量级文件系统接自身内部操作指令;所述外部操作指令包括文件截取指令、文件重命名指令、文件是否存在指令、打开文件指令、关闭文件指令、写文件指令、读文件指令、获取文件大小指令、指定当前文件的读/写位置指令、获取文件列表指令、删除文件指令和获取文件系统空闲大小指令;所述自身内部操作指令包括:缓冲区初始化指令、获取空闲块指令、更新FileLog指令、更新BlockLog指令、单次写入数据指令、缓冲写入数据指令、获取缓冲块指令和整理缓冲块指令;所述轻量级文件系统包括:FileLog,用于存储多个FileItemLog的数据块;其中,FileItemLog为用于存储文件信息的单元,BlockLog,用于存储多个文件TLV的数据块,其中,文件TLV为用于存储文件数据块信息的单元;WriteBufferLog,表示用于存储多个WriteBuffer的数据块,其中,WriteBuffer表示缓存块存储的数据信息。
优选地,轻量级文件系统进行初始化,具体为:A1,初始化轻量级文件系统的全局变量;A2,循环读取可用数据块并获取可用数据块的属性,直至获取完所有可用数据块的属性后进入A3;根据属性进行如下处理:当数据块的属性为空闲状态时,FreeBlock的可用数量加1;当数据块的属性为已使用状态且该数据块为FileLog,则记录FileLog的块号索引;当数据块的属性为已使用状态时且该数据块为BlockLog,则记录BlockLog的块号索引;当数据块的属性为已使用状态时且该数据块为File,则忽略;A3、初始化WriteBuffer;A4、判断在轻量级文件系统中是否存在FileLog和BlockLog,如果两者均找到且唯一,则进入A5;如果FileLog和/或BlockLog未找到和/或找到的FileLog和/或BlockLog不唯一,则创建轻量级文件系统;A5、循环读取FileLog中的FileItemLog,获取有效FileItemLog中的文件名和文件ID,同时,记录文件名和文件ID所对应的文件在FileLog中的位置,直至读取完FileLog中所有FileItemLog为止循环结束,将循环中得到的所有无效FileItemLog作为空闲位置更新FileLog空闲位置索引;A6、循环读取BlockLog中的文件TLV,获取有效文件TLV中文件ID、文件所使用的数据块长度以及文件的数据块链表,同时,记录该文件ID所对应的文件在BlockLog中的位置,直至读取完BlockLog中所有文件TLV为止循环结束,将循环中得到所有无效文件TLV作为空闲位置更新BlockLog空闲位置索引,完成轻量级文件系统的初始化。
更优选地,所述创建轻量级文件系统,具体为:B1,循环擦除轻量级文件系统中的数据,直至擦除完毕为止,将FreeBlock的可用数量计数设置为可用块总数;B2,获取任意一个空闲状态的数据块i,将其设置为BlockLog,记录该BlockLog的块号,将该空闲状态数据块i的属性修改为已使用状态,同时,将该BlockLog中的空闲位置为0;B3,获取任意一个空闲状态的数据块j,将其设置为FileLog,记录该FileLog的块号,将该空闲状态数据块j的属性修改为已使用状态,同时,将该FileLog中的空闲位置为0;B4,获取任意一个空闲状态的数据块k,将其设置为WriteBufferLog,记录该WriteBufferLog的块号,将该空闲状态数据块k的属性修改为已使用状态,同时,将该WriteBufferLog中的空闲位置为0,完成轻量级文件系统的创建。
优选地,当所述操作指令为文件截取指令时,按照下述执行文件截取操作:接受文件截取指令,分析获得所述文件截取指令包含的FileState的索引、截取长度;根据所述FileState的索引获取待截取文件ID,判断待截取文件是否存在,如果是,则先偏移到待截取文件所属块位置并计算出所属块中需要保留的数据长度,将需要保留的数据搬运到任意一个空闲数据块中,更新该空闲数据块的BlockItem、更新文件TLV、最后更新BlockLog,将不需保留数据的待截取文件所属块设置为无效,完成文件截取;如果否,则返回文件截取失败的提示;
当所述操作指令为文件重命名指令时,按照下述执行文件重命名的操作:所述文件重命名指令中包括FileState的索引、新文件名,通过FileState的索引对应的文件ID获取目标文件对应的FileItemLog,用新文件名替换当前文件名,然后更新FileLog,完成文件的重命名;
当所述操作指令为判断文件是否存在指令时,按照下述执行判断文件是否存在的操作:所述判断文件是否存在指令中包括目标文件名,在目标文件名的基础上,循环判断FileLog中可用FileItemLog存储的文件名与目标文件名是否相同,如果相同,则返回结果;如果不相同,则返回文件不存在提示。
优选地,当所述操作指令为打开文件指令时,按照下述执行打开文件操作:所述打开文件指令中包括需打开文件名、传入权限,所述传入权限包括创建文件和/或读写文件;C1,循环判断FileState中已经打开的文件的文件名与需打开文件名是否相同,如否,则进入C2;如果是,查找到相同文件名,直接返回此FileState的索引;C2,判断多个FileState中是否存在未使用的FileState,如果是,则进入C3;如果否,则FileState中存储的信息已经达到上限,直接返回达到打开上限的提示;C3,判断文件是否存在,如果不存在,当传入权限为创建文件时,则获取空闲FileItemLog并赋值,更新FileLog,更新FileState并返回结果;当传入权限为读写文件时,直接返回不成功的提示;如果存在,当传入权限为读写文件时,则更新FileState并返回结果;当传入权限不是读写文件时,直接返回不成功的提示;
当所述操作指令为关闭文件指令时,按照下述执行关闭文件操作:所述关闭文件指令中包括带关闭文件的FileState的索引;根据所述FileState的索引对应的文件ID,判断该文件ID对应的文件是否处于打开状态,如果是,则将该文件ID对应的FileState设置为空闲,返回文件关闭的结果,完成文件关闭操作;
当所述操作指令为获取文件大小指令时,按照下述执行获取文件大小操作:所述获取文件大小指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,文件长度初始化为0,根据文件ID获取文件TLV,循环读取文件TLV中每个数据块的长度,直至读完文件TLV所有数据块为止,文件TLV所有数据块的长度累加得到文件最终长度,完成文件大小的操作;
当所述操作指令为获取文件列表指令时,按照下述执行获取文件列表的操作:所述获取文件列表指令中包括:需缓冲数据、需缓冲数据最大长度;根据所述需需缓冲数据,循环读取FileLog中有效的FileItemLog,将有效FileItemLog中的文件名添加至文件列表,每填加一个文件名均计算当前缓冲数据的长度,当前缓冲数据的长度=已经缓冲数据长度+当前有效FileItemLog中的文件名长度,当需缓冲数据最大长度<当前缓冲数据的长度时,提示获取文件列表错误;当需缓冲数据最大长度≥当前缓冲数据的长度时,将有效FileItemLog中的文件名拷贝到缓冲数据中,更新当前缓冲数据的长度,循环结束后返回缓冲数据。
优选地,当所述操作指令为写文件指令时,按照下述执行写文件操作:所述写文件指令中包括FileState的索引、待写入数据和待写入数据长度;D1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入D2,如果否,则返回写入失败的提示;D2,根据待写入数据长度,判断轻量级文件系统是否还有空闲空间用于存储待写入数据长度,如果是,则进入D3;如果否,则返回写入失败的提示;D3,判断待写入数据长度是否超出单次写入预设上限,如果是,则以单次写入数据长度等于单次写入预设上限的方式进行单次写入数据操作,并进入D4;如果否,进入D5;D4,更新待写入数据长度,返回D3;D5,判断数据是否写完,如果是,则返回完成写文件操作的提示;如果否,则返回D4;
当所述操作指令为读文件指令时,按照下述执行读文件操作:所述读文件指令中包括FileState的索引、待读取的数据缓存和待读取数据长度;E1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入E2,如果否,则返回读取失败的提示;E2,根据文件ID获取文件TLV,并根据FileState中读偏移获取到指定读取的数据块号起始及当前起始块号内的偏移;E3,缓存需要读取块号的列表;E4,计算并判断读取总长度是否为0,如果是,则进入E8;如果否,则进入E5;所述读取总长度=待读取总长度-本次读取长度;E5,获取列表中当前待读取块号中存储数据的大小;E6,将计算得到的当前待读取块号的读取长度为本次读取长度;E7,判断当前待读取块号是否为缓冲块,如果是,获取当前WriteBuffer中的SrcBlock内的原始文件数据再循环查找其他WriteBuffer中所有相同UsedBlock的WriteBuffer读出其Offset和Datasize中的缓冲数据与原始文件数据合并(缓冲数据覆盖原始文件数据),合并后的数据为读出数据,并更新读取总长度;返回E4;如果否,则读取当前待读取块号的数据,并更新读取总长度,返回E4;E8,更新FileState中的读偏移,完成读文件的操作。
优选地,当所述操作指令为指定当前文件的读/写位置指令时,按照下述执行指定当前文件的读/写位置操作:所述指定当前文件的读/写位置指令中包括FileState的索引、目标偏移值和位置偏移模式;F1,依据FileState的索引判断目标文件是否打开,如果是,则进入F2;如果否,则返回不能执行操作的提示;F2,判断位置偏移模式,并获得文件的读/写偏移;如果位置偏移模式为目标文件的头位置;则判断目标偏移值是否为负,如果是,则文件的读/写偏移为0;如果否,则判断目标偏移值是否大于目标文件的文件大小,若是,则文件的读/写偏移为文件大小;若否,则文件的读/写偏移为目标偏移值;如果位置偏移模式为目标文件的当前位置;则根据文件的读/写偏移=原文件的读/写偏移+目标偏移值,更新文件的读/写偏移,当计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值为0;当计算后文件的读/写偏移大于目标文件的文件大小,则文件的读/写偏移为文件大小;如果位置偏移模式为目标文件的尾位置;判断目标偏移值是否为正,如果是,则文件的读/写偏移为目标文件的文件大小;如果否,则文件的读/写偏移=原文件的读/写偏移+目标偏移值,如果计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值0;
当所述操作指令为删除文件指令时,按照下述执行删除文件的操作:所述删除文件指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,根据文件ID获取文件TLV,循环将文件TLV中的数据块设置为空闲状态,直至文件TLV中所有数据块的状态均为空闲状态为止,将FileLog中对应文件名的FileItemLog设置为无效,完成删除文件的操作;在将文件TLV中的数据块设置为空闲状态过程中,需判断当前即将设置为空闲状态的数据块是否为缓冲块,如果否,则直接将该数据块设置为空闲状态;如果是,则将WriteBuffer中存储的缓冲数据块块号所对应的缓冲数据块和原数据块块号所对应的原数据块均设置为空闲状态,同时循环设置所述缓冲数据块块号与所述原数据块块号的WriteBuffer为空闲状态,并更新WriteBufferLog;
当所述操作指令为获取文件系统空闲大小指令时,按照下述执行获取文件系统空闲大小的操作:获取轻量级文件系统中当前FreeBlock的数量,计算当前FreeBlock数量×每块数据块最大可用数据长度,得到文件系统空闲大小,返回结果,完成获取文件系统空闲大小的操作。
优选地,当所述自身内部操作指令为缓冲区初始化指令时,按照下述执行缓冲区初始化的操作:循环读取WriteBufferLog中的WriteBuffer直至读取完WriteBufferLog中的所有WriteBuffer,更新WriteBufferLog的空闲位置,完成缓冲区初始化;在读取过程中,当WriteBuffer为有效数据时,则记录该WriteBuffer;在读取过程中,当WriteBuffer为无效数据时,则将该WriteBuffer置为空闲状态;
当所述自身内部操作指令为获取空闲块指令时,按照下述执行获取空闲块的操作:G1,判断FreeBlock是大于0还是等于0,如果是大于0,则进入G2;如果是等于0,则返回空间不足的提示;G2,通过随机方式获取查找FreeBlock的起始位置;G3,从起始位置开始,循环读取数据块的BlockItem,当BlockItem中的块状态为闲置状态时,判断是否需要擦除当前数据块,若是,则擦出数据,并返回FreeBlock;若否,则直接返回FreeBlock;当BlockItem中的块状态为已使用状态则擦除数据后,返回FreeBlock;当BlockItem中的块状态为未使用,则直接返回FreeBlock;
当所述自身内部操作指令为更新FileLog指令时,按照下述执行更新FileLog的操作:H1,判断目标FileItemLog是否超出FileLog空闲位置大小,如果否,则将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;如果是,则进入H2;H2,整理FileLog,剔除FileLog中的无效FileItemLog,保留有效FileItemLog,然后将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;H21,获取原FreeBlock;H22,循环读取原FileLog中有效FileItemLog,更新FileItemLog位置信息后拷贝到新FreeBlock中,循环完成后,新FreeBlock的BlockItem设置为有效,设置新FreeBlock的BlockItem属性为FileLog;将原FileLog的BlockItem设置为无效,更新FileLog的空闲位置,更新FileLog的块索引;将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;
当所述自身内部操作指令为更新BlockLog指令时,按照下述执行更新BlockLog的操作:K1、判断目标文件TLV是否超出BlockLog空闲位置的大小,如果否,则将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;如果是,则进入K2;K2,整理BlockLog,剔除BlockLog中的无效文件TLV,保留有效文件TLV,然后将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;K21,获取原BlockLog;K22,循环读取原BlockLog中有效文件TLV,更新文件TLV位置信息后拷贝到新BlockLog中,循环完成后,新BlockLog的BlockItem设置为有效,属性为BlockLog,将原BlockLog的BlockItem设置为无效;更新BlockLog的空闲位置,更新BlockLog的块索引;将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;
当所述自身内部操作指令为单次写入数据指令时,按照下述执行单次写入数据的操作:M1,获取目标文件TLV,同时,获取目标文件TLV被指定写入块号的起始偏移及块内偏移,缓存需要写入数据的块号得到数据块链表;M2,获取FreeBlock;M 3,判断当前数据的写入位置:当写入位置为原有数据块位置时,获取原数据块BlockItem,判断BlockItem是否合法,不合法,则返回错误;合法,则调用缓冲写入数据,更新文件TLV,进入M4;当写入位置为新数据块位置时,更新FreeBlock的数据块状态为已使用状态,将数据写入FreeBlock后,设置FreeBlock的文件属性为写数据的文件属性;M4,判断数据是否写完,如果否,则返回步骤2;如果是,则进入M5;M5,判断是否需要更新BlockLog,如果是,则更新BlockLog中目标文件TLV,进入M6;如果否,则进入M7;M6,判断写入目标文件后文件大小是否有变化,如果是,则更新文件大小;如果否,则进入M7;M7,更新当前文件的写入偏移值,完整单次写入数据的操作。
优选地,当所述自身内部操作指令为缓冲写入数据指令时,按照下述执行缓冲写入数据的操作:N1、判断需要写入数据的数据块是否为缓冲块;如果否,则获取空闲WriteBuffer,更新FreeBlock的BlockItem文件属性为缓冲数据文件,将FreeBlock的BlockItem设置为有效,将数据写入FreeBlock,更新WriteBuffer信息并设置为已使用状态,更新WriteBufferLog;如果是,则进入N2;N2,判断与需要写入数据的块号相同的缓冲块中的WriteBuffer的数量是单个还是多个;如果是单个,则进入N3;如果是多个,则进入N6;N3,判断需要写入数据与原缓冲数据的合并方式,如果合并方式为分离,则获取空闲WriteBuffer,更新缓冲块的属性,更新WriteBuffer信息并设置为已使用状态,将需要写入数据写入WriteBuffer的缓冲块中,更新WriteBufferLog,进入N6;如果合并方式为合并,则更新缓冲块的属性,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,将合并数据写入FreeBlock,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,进入N6;N4,判断多个WriteBuffer中原缓冲数据中是否存在与需要写入数据合并的数据段;如果是,则进入N5;如果否,则需要写入数据与所有原缓冲数据段分离,更新缓冲块的BlockItem,将需要写入的数据写入WriteBuffer的缓冲块中,更新WriteBuffer的信息并设置为已使用状态,更新WriteBufferLog,进入N6;N5,循环判断需要写入数据与每一个原缓冲数据合并的合并方式;当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为分离方式,则更新缓冲块的BlockItem,更新WriteBuffer的信息并设置为已使用状态,将需要写入数据写入FreeBlock中,更新WriteBufferLo,进入N6;当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为部分重合方式,则更新缓冲块的BlockItem,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,设置原缓冲块WriteBuffer为空闲状态,同时更新WriteBufferLog,进入N6;当需要写入数据包含当前原缓冲数据段WriteBuffer的数据,则更新原WriteBuffer信息为空闲,更新WriteBufferLog,进入N6;N6,发出完成缓冲写入数据操作的提示。
优选地,当所述自身内部操作指令为获取缓冲块指令时,按照下述执行获取缓冲块的操作:循环查询WriteBuffer中是否有空闲WriteBuffer,如果是,返回该空闲WriteBuffer,如果否,则继续判断;
当所述自身内部操作指令为整理缓冲块指令时,按照下述执行整理缓冲块的操作:
S1,获取已使用且数据段最大的WriteBuffer;S2,初始化需要获取的原数据范围,所述原数据范围包括原数据块号和数据长度;S3,循环判断是否有与S1中WriteBuffer相同源数据块的WriteBuffer,如果是,则更新源数据块号需要读取的数据范围,并更新整理后数据块的大小设置WriteBuffer为空闲状态,更新WriteBufferLog,进入S4;如果否,则直接进入S4;S4,读出需要获取的原数据的范围内的数据并写入WriteBuffer中的缓冲块中;S5,更新缓冲区BlockItem,具体为:更新WriteBuffer中的缓冲块中的BlockItem为使用状态,将WriteBuffer中的缓冲块中的BlockItem的属性更新为文件对应属性,将WriteBuffer中的原数据块的BlockItem的状态更新为空闲状态;S6,返回空闲WriteBuffer,完成缓冲块整理。
本发明的有益效果是:本发明所述轻量级文件系统的实现方法克服了现有技术中的不足,采用LOG操作方式记录文件、缓冲数据。此种方式易于理解维护管理,通过LOG操作方式减少对数据块的频繁操作,使读写速度更平滑,提高整体读写效率,提高外部存储器的使用寿命。
附图说明
图1是使用本发明所述轻量级文件系统的实现方法的操作流程示意图;图2是轻量级文件系统初始化的流程示意图;图3是轻量级文件系统创建的流程示意图;图4是轻量级文件系统中文件截取的流程示意图;图5是轻量级文件系统中文件重命名的流程示意图;图6是轻量级文件系统中判断文件是否存在的流程示意图;图7是轻量级文件系统中打开文件的流程示意图;图8是轻量级文件系统中关闭文件的流程示意图;图9是轻量级文件系统中写文件的流程示意图;图10是轻量级文件系统中读文件的流程示意图;图11是轻量级文件系统中获取文件大小的流程示意图;图12是轻量级文件系统中指定当前文件的读/写位置的流程示意图;图13是轻量级文件系统中获取文件列表的流程示意图;图14是轻量级文件系统中删除文件的流程示意图;图15是轻量级文件系统中获取文件系统空闲大小的流程示意图;图16是轻量级文件系统中缓冲区初始化的流程示意图;图17是轻量级文件系统中获取空闲块的流程示意图;图18是轻量级文件系统中更新FileLog的流程示意图;图19是轻量级文件系统中更新BlockLog的流程示意图;图20是轻量级文件系统中单次写入数据的流程示意图;图21是轻量级文件系统中缓冲写入数据的流程示意图;图22是轻量级文件系统中获取缓冲块的流程示意图;图23是轻量级文件系统中缓冲块整理的流程示意图;图24是轻量级文件系统每个数据块的结构示意图;图25是WriteBuffer中的缓冲块的示意图;图26是WriteBuffer中的源数据的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
1、关于本申请中涉及到的英文缩写的解释说明:
BlockItem:存储数据块的属性信息,用于存放在每一个数据块的起始位置;存放内容包括数据块属性BlockTYPE、数据块使用状态BlockSTATE。
数据块类型BlockTYPE:包括文件日志块FileLog、文件数据块日志块BlockLog、缓冲块日志块WriteBufferLog、数据文件块File、缓冲块WriteBuffer。
FreeBlock:表示属性为空闲状态的数据块的索引号。
FileLog:表示用于存储多个FileItemLog的数据块。
FileItemLog:用于存储文件信息的单元。文件信息包括文件名FileName和文件IDFileID。
BlockLog:表示用于存储文件TLV的数据块。
文件TLV:表示用于存储文件数据块信息的单元。文件数据块信息内容包括文件IDTag、数据块长度Len、数据块链表Value,其中,数据块链表Value用于存储数据块的顺序,数据块的顺序为文件数据存储顺序的顺序队列。文件TLV中的T表示标识,L表示长度,V表示值。
WriteBufferLog:表示用于存储多个WriteBuffer的数据块。
WriteBuffer:表示数据缓存块的存储信息。数据缓存块的存储信息包括状态flag、缓冲数据块号UsedBlock、原数据块号SrcBlock、缓冲数据偏移Offset、缓冲数据长度Datasize、WriteBuffer存储在WriteBufferLog中的位置LogOffset。
FileState:用于存储处于已经打开状态文件信息的结构体。处于已经打开状态的文件信息包括状态OpenFlag、文件ID FileID、写偏移WriteOffset、读偏移ReadOffset、文件大小FileSize、权限Permission。
2、关于轻量级文件系统的进一步说明:轻量级文件系统根据外部存储器的大小来调整自身的总大小和数据缓存块的存储信息(WriteBuffer)的数量。轻量级文件系统中每个数据块的基本形态为BlockItem+存储数据,如图24所示。每个数据块根据其基本形态中BlockItem中存储的属性决定自身用途。
实施例
参照图1,本实施例所述轻量级文件系统的实现方法,所述实现方法包括:嵌入式设备上电后,集成在嵌入式设备上的轻量级文件系统进行初始化,如果初始化失败,则创建轻量级文件系统;如果初始化成功,则判断轻量级文件系统是否存在,若是,则等待操作指令并执行相应功能;若否,则创建轻量级文件系统,然后等待操作指令并执行相应操作;所述操作指令包括轻量级文件系统接收到的外部操作指令和轻量级文件系统接自身内部操作指令;所述外部操作指令包括文件截取指令、文件重命名指令、文件是否存在指令、打开文件指令、关闭文件指令、写文件指令、读文件指令、获取文件大小指令、指定当前文件的读/写位置指令、获取文件列表指令、删除文件指令和获取文件系统空闲大小指令;所述自身内部操作指令包括:缓冲区初始化指令、获取空闲块指令、更新FileLog指令、更新BlockLog指令、单次写入数据指令、缓冲写入数据指令、获取缓冲块指令和整理缓冲块指令;
所述轻量级文件系统包括:FileLog,用于存储多个FileItemLog的数据块;其中,FileItemLog为用于存储文件信息的单元;BlockLog,用于存储多个文件TLV的数据块,其中,文件TLV为用于存储文件数据块信息的单元;WriteBufferLog,表示用于存储多个WriteBuffer的数据块,其中,WriteBuffer表示缓存块存储的数据信息。
更详细的解释说明为:
(一)参照图2,轻量级文件系统进行初始化,具体为:A1,初始化轻量级文件系统的全局变量;A2,循环读取可用数据块并获取可用数据块的属性,直至获取完所有可用数据块的属性后进入A3;根据属性进行如下处理:当数据块的属性为空闲状态时,FreeBlock的可用数量加1;当数据块的属性为已使用状态且该数据块为FileLog,则记录FileLog的块号索引,便于后期的查找使用;当数据块的属性为已使用状态时且该数据块为BlockLog,则记录BlockLog的块号索引,便于后期的查找使用;当数据块的属性为已使用状态时且该数据块为File,则忽略;A3、初始化WriteBuffer;A4、判断在轻量级文件系统中是否存在FileLog和BlockLog,如果两者均找到且唯一,则进入A5;如果FileLog和/或BlockLog未找到和/或找到的FileLog和/或BlockLog不唯一,则创建轻量级文件系统;A5、循环读取FileLog中的FileItemLog,获取有效FileItemLog中的文件名和文件ID,同时,记录文件名和文件ID所对应的文件在FileLog中的位置,直至读取完FileLog中所有FileItemLog为止循环结束,将循环中得到的所有无效FileItemLog作为空闲位置更新FileLog空闲位置索引,方便以后查找使用;A6、循环读取BlockLog中的文件TLV,获取有效文件TLV中文件ID、文件所使用的数据块长度以及文件的数据块链表,同时,记录该文件ID所对应的文件在BlockLog中的位置,直至读取完BlockLog中所有文件TLV为止循环结束,将循环中得到所有无效文件TLV作为空闲位置更新BlockLog空闲位置索引,方便以后查找使用,完成轻量级文件系统的初始化。
(二)参照图3,所述创建轻量级文件系统,具体为:B1,循环擦除轻量级文件系统中的数据,直至擦除完毕为止,将FreeBlock的可用数量计数设置为可用块总数;B2,获取任意一个空闲状态的数据块i,将其设置为BlockLog,记录该BlockLog的块号,将该空闲状态数据块i的属性修改为已使用状态,同时,将该BlockLog中的空闲位置为0;B3,获取任意一个空闲状态的数据块j,将其设置为FileLog,记录该FileLog的块号,将该空闲状态数据块j的属性修改为已使用状态,同时,将该FileLog中的空闲位置为0;B4,获取任意一个空闲状态的数据块k,将其设置为WriteBufferLog,记录该WriteBufferLog的块号,将该空闲状态数据块k的属性修改为已使用状态,同时,将该WriteBufferLog中的空闲位置为0,完成轻量级文件系统的创建。
(三)参照图4,当所述操作指令为文件截取指令时,按照下述执行文件截取操作:接受文件截取指令,分析获得所述文件截取指令包含的FileState的索引、截取长度;根据所述FileState的索引获取待截取文件ID,判断待截取文件是否存在,如果是,则先偏移到待截取文件所属块位置并计算出所属块中需要保留的数据长度,将需要保留的数据搬运到任意一个空闲数据块中,更新该空闲数据块的BlockItem、更新文件TLV、最后更新BlockLog,将不需保留数据的待截取文件所属块设置为无效,完成文件截取;如果否,则返回文件截取失败的提示。
(四)参照图5,当所述操作指令为文件重命名指令时,按照下述执行文件重命名的操作:所述文件重命名指令中包括FileState的索引、新文件名,通过FileState的索引对应的文件ID获取目标文件对应的FileItemLog,用新文件名替换当前文件名,然后更新FileLog,完成文件的重命名。
(五)参照图6,当所述操作指令为判断文件是否存在指令时,按照下述执行判断文件是否存在的操作:所述判断文件是否存在指令中包括目标文件名,在目标文件名的基础上,循环判断FileLog中可用FileItemLog存储的文件名与目标文件名是否相同,如果相同,则返回结果;如果不相同,则返回文件不存在提示。。
(六)参照图7,当所述操作指令为打开文件指令时,按照下述执行打开文件操作:所述打开文件指令中包括需打开文件名、传入权限,所述传入权限包括创建文件和/或读写文件;C1,循环判断FileState中已经打开的文件的文件名与需打开文件名是否相同,如否,则进入C2;如果是,查找到相同文件名,直接返回此FileState的索引;C2,判断多个FileState中是否存在未使用的FileState,如果是,则进入C3;如果否,则FileState中存储的信息已经达到上限,直接返回达到打开上限的提示;C3,判断文件是否存在,如果不存在,当传入权限为创建文件时,则获取空闲FileItemLog并赋值,更新FileLog,更新FileState并返回结果;当传入权限为读写文件时,直接返回不成功的提示;如果存在,当传入权限为读写文件时,则更新FileState并返回结果;当传入权限不是读写文件时,直接返回不成功的提示。
(七)参照图8,当所述操作指令为关闭文件指令时,按照下述执行关闭文件操作:所述关闭文件指令中包括带关闭文件的FileState的索引;根据所述FileState的索引对应的文件ID,判断该文件ID对应的文件是否处于打开状态,如果是,则将该文件ID对应的FileState设置为空闲,返回文件关闭的结果,完成文件关闭操作。
(八)参照图9,当所述操作指令为写文件指令时,按照下述执行写文件操作:所述写文件指令中包括FileState的索引、待写入数据和待写入数据长度;D1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入D2,如果否,则返回写入失败的提示;D2,根据待写入数据长度,判断轻量级文件系统是否还有空闲空间用于存储待写入数据长度,如果是,则进入D3;如果否,则返回写入失败的提示;D3,判断待写入数据长度是否超出单次写入预设上限,如果是,则以单次写入数据长度等于单次写入预设上限的方式进行单次写入数据操作,并进入D4;如果否,进入D5;D4,更新待写入数据长度,返回D3;D5,判断数据是否写完,如果是,则返回完成写文件操作的提示;如果否,则返回D4。
(九)参照图10,当所述操作指令为读文件指令时,按照下述执行读文件操作:所述读文件指令中包括FileState的索引、待读取的数据缓存和待读取数据长度;E1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入E2,如果否,则返回读取失败的提示;E2,根据文件ID获取文件TLV,并根据FileState中读偏移获取到指定读取的数据块号起始及当前起始块号内的偏移;E3,缓存需要读取块号的列表;E4,计算并判断读取总长度是否为0,如果是,则进入E8;如果否,则进入E5;所述读取总长度=待读取总长度-本次读取长度;E5,获取列表中当前待读取块号中存储数据的大小;E6,将计算得到的当前待读取块号的读取长度为本次读取长度;E7,判断当前待读取块号是否为缓冲块,如果是,获取当前WriteBuffer中的SrcBlock内的原始文件数据再循环查找其他WriteBuffer中所有相同UsedBlock的WriteBuffer读出其Offset和Datasize中的缓冲数据与原始文件数据合并(缓冲数据覆盖原始文件数据),合并后的数据为读出数据,并更新读取总长度,返回E4,因为系统中的WriteBuffer可能拥有相同的UsedBlock和SrcBlock但是Offset和Datasize不同;如果否,则读取当前待读取块号的数据,并更新读取总长度,返回E4;E8,更新FileState中的读偏移,完成读文件的操作。
(十)参照图11,当所述操作指令为获取文件大小指令时,按照下述执行获取文件大小操作:所述获取文件大小指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,文件长度初始化为0,根据文件ID获取文件TLV,循环读取文件TLV中每个数据块的长度,直至读完文件TLV所有数据块为止,文件TLV所有数据块的长度累加得到文件最终长度,完成文件大小的操作。
(十一)参照图12,当所述操作指令为指定当前文件的读/写位置指令时,按照下述执行指定当前文件的读/写位置操作:所述指定当前文件的读/写位置指令中包括FileState的索引、目标偏移值和位置偏移模式;
F1,依据FileState的索引判断目标文件是否打开,如果是,则进入F2;如果否,则返回不能执行操作的提示;
F2,判断位置偏移模式,并获得文件的读/写偏移;
如果位置偏移模式为目标文件的头位置;则判断目标偏移值是否为负,如果是,则文件的读/写偏移为0;如果否,则判断目标偏移值是否大于目标文件的文件大小,若是,则文件的读/写偏移为文件大小;若否,则文件的读/写偏移为目标偏移值;
如果位置偏移模式为目标文件的当前位置;则根据文件的读/写偏移=原文件的读/写偏移+目标偏移值,更新文件的读/写偏移,当计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值为0;当计算后文件的读/写偏移大于目标文件的文件大小,则文件的读/写偏移为文件大小;
如果位置偏移模式为目标文件的尾位置;判断目标偏移值是否为正,如果是,则文件的读/写偏移为目标文件的文件大小;如果否,则文件的读/写偏移=原文件的读/写偏移+目标偏移值,如果计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值0。
(十二)参照图13,当所述操作指令为获取文件列表指令时,按照下述执行获取文件列表的操作:所述获取文件列表指令中包括:需缓冲数据、需缓冲数据最大长度;根据所述需需缓冲数据,循环读取FileLog中有效的FileItemLog,将有效FileItemLog中的文件名添加至文件列表,每填加一个文件名均计算当前缓冲数据的长度,当前缓冲数据的长度=已经缓冲数据长度+当前有效FileItemLog中的文件名长度,当需缓冲数据最大长度<当前缓冲数据的长度时,提示获取文件列表错误;当需缓冲数据最大长度≥当前缓冲数据的长度时,将有效FileItemLog中的文件名拷贝到缓冲数据中,更新当前缓冲数据的长度,循环结束后返回缓冲数据。
(十三)参照图14,当所述操作指令为删除文件指令时,按照下述执行删除文件的操作:所述删除文件指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,根据文件ID获取文件TLV,循环将文件TLV中的数据块设置为空闲状态,直至文件TLV中所有数据块的状态均为空闲状态为止,将FileLog中对应文件名的FileItemLog设置为无效,完成删除文件的操作;在将文件TLV中的数据块设置为空闲状态过程中,需判断当前即将设置为空闲状态的数据块是否为缓冲块,如果否,则直接将该数据块设置为空闲状态;如果是,则将WriteBuffer中存储的缓冲数据块块号所对应的缓冲数据块和原数据块块号所对应的原数据块均设置为空闲状态,同时循环设置所述缓冲数据块块号与所述原数据块块号的WriteBuffer为空闲状态,并更新WriteBufferLog。
(十四)参照图15,当所述操作指令为获取文件系统空闲大小指令时,按照下述执行获取文件系统空闲大小的操作:获取轻量级文件系统中当前FreeBlock的数量,计算当前FreeBlock数量×每块数据块最大可用数据长度,得到文件系统空闲大小,返回结果,完成获取文件系统空闲大小的操作。
(十五)参照图16,当所述自身内部操作指令为缓冲区初始化指令时,按照下述执行缓冲区初始化的操作:循环读取WriteBufferLog中的WriteBuffer直至读取完WriteBufferLog中的所有WriteBuffer,更新WriteBufferLog的空闲位置,完成缓冲区初始化;在读取过程中,当WriteBuffer为有效数据时,则记录该WriteBuffer;在读取过程中,当WriteBuffer为无效数据时,则将该WriteBuffer置为空闲状态。
(十六)参照图17,当所述自身内部操作指令为获取空闲块指令时,按照下述执行获取空闲块的操作:G1,判断FreeBlock是大于0还是等于0,如果是大于0,则进入G2;如果是等于0,则返回空间不足的提示;G2,通过随机方式获取查找FreeBlock的起始位置;G3,从起始位置开始,循环读取数据块的BlockItem;当BlockItem中的块状态为闲置状态时,判断是否需要擦除当前数据块,若是,则擦出数据,并返回FreeBlock;若否,则直接返回FreeBlock;当BlockItem中的块状态为已使用状态则擦除数据后,返回FreeBlock;当BlockItem中的块状态为未使用,则直接返回FreeBlock。
(十七)参照图18,当所述自身内部操作指令为更新FileLog指令时,按照下述执行更新FileLog的操作:
H1,判断目标FileItemLog是否超出FileLog空闲位置大小,如果否,则将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;如果是,则进入H2;
H2,整理FileLog,剔除FileLog中的无效FileItemLog,保留有效FileItemLog,然后将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;缩短FileLog的存储内容;
H21,获取原FreeBlock;
H22,循环读取原FileLog中有效FileItemLog,更新FileItemLog位置信息后拷贝到新FreeBlock中,循环完成后,新FreeBlock的BlockItem设置为有效,设置新FreeBlock的BlockItem属性为FileLog;将原FileLog的BlockItem设置为无效,更新FileLog的空闲位置,更新FileLog的块索引;将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置。
(十八)参照图19,当所述自身内部操作指令为更新BlockLog指令时,按照下述执行更新BlockLog的操作:
K1、判断目标文件TLV是否超出BlockLog空闲位置的大小,如果否,则将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;如果是,则进入K2;
K2,整理BlockLog,剔除BlockLog中的无效文件TLV,保留有效文件TLV,然后将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;缩短BlockLog的存储内容;
K21,获取原BlockLog;
K22,循环读取原BlockLog中有效文件TLV,更新文件TLV位置信息后拷贝到新BlockLog中,循环完成后,新BlockLog的BlockItem设置为有效,属性为BlockLog,将原BlockLog的BlockItem设置为无效;更新BlockLog的空闲位置,更新BlockLog的块索引;将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置。
(十九)参照图20,当所述自身内部操作指令为单次写入数据指令时,按照下述执行单次写入数据的操作:
M1,获取目标文件TLV,同时,获取目标文件TLV被指定写入块号的起始偏移及块内偏移,缓存需要写入数据的块号得到数据块链表;
M2,获取FreeBlock;
M 3,判断当前数据的写入位置:
当写入位置为原有数据块位置时,获取原数据块BlockItem,判断BlockItem是否合法,不合法,则返回错误;合法,则调用缓冲写入数据,更新文件TLV,进入M4;
当写入位置为新数据块位置时,更新FreeBlock的数据块状态为已使用状态,将数据写入FreeBlock后,设置FreeBlock的文件属性为写数据的文件属性;
M4,判断数据是否写完,如果否,则返回步骤2;如果是,则进入M5;
M5,判断是否需要更新BlockLog,如果是,则更新BlockLog中目标文件TLV,进入M6;如果否,则进入M7;
M6,判断写入目标文件后文件大小是否有变化,如果是,则更新文件大小;如果否,则进入M7;
M7,更新当前文件的写入偏移值,完整单次写入数据的操作。
(二十)参照图21,当所述自身内部操作指令为缓冲写入数据指令时,按照下述执行缓冲写入数据的操作:
N1、判断需要写入数据的数据块是否为缓冲块;如果否,则获取空闲WriteBuffer,更新FreeBlock的BlockItem文件属性为缓冲数据文件,将FreeBlock的BlockItem设置为有效,将数据写入FreeBlock,更新WriteBuffer信息并设置为已使用状态,更新WriteBufferLog;如果是,则进入N2;
N2,判断与需要写入数据的块号相同的缓冲块中的WriteBuffer的数量是单个还是多个;如果是单个,则进入N3;如果是多个,则进入N6;
N3,判断需要写入数据与原缓冲数据的合并方式,
如果合并方式为分离,则获取空闲WriteBuffer,更新缓冲块的属性,更新WriteBuffer信息并设置为已使用状态,将需要写入数据写入WriteBuffer的缓冲块中,更新WriteBufferLog,进入N6;
如果合并方式为合并,则更新缓冲块的属性,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,将合并数据写入FreeBlock,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,进入N6;
N4,判断多个WriteBuffer中原缓冲数据中是否存在与需要写入数据合并的数据段;如果是,则进入N5;如果否,则需要写入数据与所有原缓冲数据段分离,更新缓冲块的BlockItem,将需要写入的数据写入WriteBuffer的缓冲块中,更新WriteBuffer的信息并设置为已使用状态,更新WriteBufferLog,进入N6;
N5,循环判断需要写入数据与每一个原缓冲数据合并的合并方式;
当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为分离方式,则更新缓冲块的BlockItem,更新WriteBuffer的信息并设置为已使用状态,将需要写入数据写入FreeBlock中,更新WriteBufferLo,进入N6;
当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为部分重合方式,则更新缓冲块的BlockItem,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,设置原缓冲块WriteBuffer为空闲状态,同时更新WriteBufferLog,进入N6;
当需要写入数据包含当前原缓冲数据段WriteBuffer的数据,则更新原WriteBuffer信息为空闲,更新WriteBufferLog,进入N6;
N6,发出完成缓冲写入数据操作的提示。
(二十一)参照图22,当所述自身内部操作指令为获取缓冲块指令时,按照下述执行获取缓冲块的操作:循环查询WriteBuffer中是否有空闲WriteBuffer,如果是,返回该空闲WriteBuffer,如果否,则继续判断。
(二十二)参照图23,当所述自身内部操作指令为整理缓冲块指令时,按照下述执行整理缓冲块的操作:
S1,获取已使用且数据段最大的WriteBuffer;
S2,初始化需要获取的原数据范围,所述原数据范围包括原数据块号和数据长度;
S3,循环判断是否有与S1中WriteBuffer相同源数据块的WriteBuffer,如果是,则更新源数据块号需要读取的数据范围,并更新整理后数据块的大小设置WriteBuffer为空闲状态,更新WriteBufferLog,进入S4;如果否,则直接进入S4;
S4,读出需要获取的原数据的范围内的数据并写入WriteBuffer中的缓冲块中;
S5,更新缓冲区BlockItem,具体为:更新WriteBuffer中的缓冲块中的BlockItem为使用状态,将WriteBuffer中的缓冲块中的BlockItem的属性更新为文件对应属性,将WriteBuffer中的原数据块的BlockItem的状态更新为空闲状态;
S6,返回空闲WriteBuffer,完成缓冲块整理。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明所述轻量级文件系统的实现方法克服了现有技术中的不足,采用LOG操作方式记录文件、缓冲数据。此种方式易于理解维护管理,通过LOG操作方式减少对数据块的频繁操作,使读写速度更平滑,提高整体读写效率,提高外部存储器的使用寿命。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (10)
1.一种轻量级文件系统的实现方法,其特征在于,所述实现方法包括:
嵌入式设备上电后,集成在嵌入式设备上的轻量级文件系统进行初始化,如果初始化失败,则创建轻量级文件系统;如果初始化成功,则判断轻量级文件系统是否存在,若是,则等待操作指令并执行相应功能;若否,则创建轻量级文件系统,然后等待操作指令并执行相应操作;所述操作指令包括轻量级文件系统接收到的外部操作指令和轻量级文件系统接自身内部操作指令;
所述外部操作指令包括文件截取指令、文件重命名指令、文件是否存在指令、打开文件指令、关闭文件指令、写文件指令、读文件指令、获取文件大小指令、指定当前文件的读/写位置指令、获取文件列表指令、删除文件指令和获取文件系统空闲大小指令;
所述自身内部操作指令包括:缓冲区初始化指令、获取空闲块指令、更新FileLog指令、更新BlockLog指令、单次写入数据指令、缓冲写入数据指令、获取缓冲块指令和整理缓冲块指令;
所述轻量级文件系统包括:
FileLog,用于存储多个FileItemLog的数据块;其中,FileItemLog为用于存储文件信息的单元;
BlockLog,用于存储多个文件TLV的数据块,其中,文件TLV为用于存储文件数据块信息的单元;
WriteBufferLog,表示用于存储多个WriteBuffer的数据块,其中,WriteBuffer表示缓存块存储的数据信息。
2.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,轻量级文件系统进行初始化,具体为:
A1,初始化轻量级文件系统的全局变量;
A2,循环读取可用数据块并获取可用数据块的属性,直至获取完所有可用数据块的属性后进入A3;
根据属性进行如下处理:
当数据块的属性为空闲状态时,FreeBlock的可用数量加1;
当数据块的属性为已使用状态且该数据块为FileLog,则记录FileLog的块号索引;
当数据块的属性为已使用状态时且该数据块为BlockLog,则记录BlockLog的块号索引;
当数据块的属性为已使用状态时且该数据块为File,则忽略;
A3、初始化WriteBuffer;
A4、判断在轻量级文件系统中是否存在FileLog和BlockLog,如果两者均找到且唯一,则进入A5;如果FileLog和/或BlockLog未找到和/或找到的FileLog和/或BlockLog不唯一,则创建轻量级文件系统;
A5、循环读取FileLog中的FileItemLog,获取有效FileItemLog中的文件名和文件ID,同时,记录文件名和文件ID所对应的文件在FileLog中的位置,直至读取完FileLog中所有FileItemLog为止循环结束,将循环中得到的所有无效FileItemLog作为空闲位置更新FileLog空闲位置索引;
A6、循环读取BlockLog中的文件TLV,获取有效文件TLV中文件ID、文件所使用的数据块长度以及文件的数据块链表,同时,记录该文件ID所对应的文件在BlockLog中的位置,直至读取完BlockLog中所有文件TLV为止循环结束,将循环中得到所有无效文件TLV作为空闲位置更新BlockLog空闲位置索引,完成轻量级文件系统的初始化。
3.根据权利要求1或2所述轻量级文件系统的实现方法,其特征在于,所述创建轻量级文件系统,具体为:
B1,循环擦除轻量级文件系统中的数据,直至擦除完毕为止,将FreeBlock的可用数量计数设置为可用块总数;
B2,获取任意一个空闲状态的数据块i,将其设置为BlockLog,记录该BlockLog的块号,将该空闲状态数据块i的属性修改为已使用状态,同时,将该BlockLog中的空闲位置为0;
B3,获取任意一个空闲状态的数据块j,将其设置为FileLog,记录该FileLog的块号,将该空闲状态数据块j的属性修改为已使用状态,同时,将该FileLog中的空闲位置为0;
B4,获取任意一个空闲状态的数据块k,将其设置为WriteBufferLog,记录该WriteBufferLog的块号,将该空闲状态数据块k的属性修改为已使用状态,同时,将该WriteBufferLog中的空闲位置为0,完成轻量级文件系统的创建。
4.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,
当所述操作指令为文件截取指令时,按照下述执行文件截取操作:接受文件截取指令,分析获得所述文件截取指令包含的FileState的索引、截取长度;根据所述FileState的索引获取待截取文件ID,判断待截取文件是否存在,如果是,则先偏移到待截取文件所属块位置并计算出所属块中需要保留的数据长度,将需要保留的数据搬运到任意一个空闲数据块中,更新该空闲数据块的BlockItem、更新文件TLV、最后更新BlockLog,将不需保留数据的待截取文件所属块设置为无效,完成文件截取;如果否,则返回文件截取失败的提示;
当所述操作指令为文件重命名指令时,按照下述执行文件重命名的操作:所述文件重命名指令中包括FileState的索引、新文件名,通过FileState的索引对应的文件ID获取目标文件对应的FileItemLog,用新文件名替换当前文件名,然后更新FileLog,完成文件的重命名;
当所述操作指令为判断文件是否存在指令时,按照下述执行判断文件是否存在的操作:所述判断文件是否存在指令中包括目标文件名,在目标文件名的基础上,循环判断FileLog中可用FileItemLog存储的文件名与目标文件名是否相同,如果相同,则返回结果;如果不相同,则返回文件不存在提示。
5.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,当所述操作指令为打开文件指令时,按照下述执行打开文件操作:
所述打开文件指令中包括需打开文件名、传入权限,所述传入权限包括创建文件和/或读写文件;
C1,循环判断FileState中已经打开的文件的文件名与需打开文件名是否相同,如否,则进入C2;如果是,查找到相同文件名,直接返回此FileState的索引;
C2,判断多个FileState中是否存在未使用的FileState,如果是,则进入C3;如果否,则FileState中存储的信息已经达到上限,直接返回达到打开上限的提示;
C3,判断文件是否存在,
如果不存在,当传入权限为创建文件时,则获取空闲FileItemLog并赋值,更新FileLog,更新FileState并返回结果;当传入权限为读写文件时,直接返回不成功的提示;
如果存在,当传入权限为读写文件时,则更新FileState并返回结果;当传入权限不是读写文件时,直接返回不成功的提示;
当所述操作指令为关闭文件指令时,按照下述执行关闭文件操作:所述关闭文件指令中包括带关闭文件的FileState的索引;根据所述FileState的索引对应的文件ID,判断该文件ID对应的文件是否处于打开状态,如果是,则将该文件ID对应的FileState设置为空闲,返回文件关闭的结果,完成文件关闭操作;
当所述操作指令为获取文件大小指令时,按照下述执行获取文件大小操作:所述获取文件大小指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,文件长度初始化为0,根据文件ID获取文件TLV,循环读取文件TLV中每个数据块的长度,直至读完文件TLV所有数据块为止,文件TLV所有数据块的长度累加得到文件最终长度,完成文件大小的操作;
当所述操作指令为获取文件列表指令时,按照下述执行获取文件列表的操作:所述获取文件列表指令中包括:需缓冲数据、需缓冲数据最大长度;根据所述需需缓冲数据,循环读取FileLog中有效的FileItemLog,将有效FileItemLog中的文件名添加至文件列表,每填加一个文件名均计算当前缓冲数据的长度,当前缓冲数据的长度=已经缓冲数据长度+当前有效FileItemLog中的文件名长度,当需缓冲数据最大长度<当前缓冲数据的长度时,提示获取文件列表错误;当需缓冲数据最大长度≥当前缓冲数据的长度时,将有效FileItemLog中的文件名拷贝到缓冲数据中,更新当前缓冲数据的长度,循环结束后返回缓冲数据。
6.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,当所述操作指令为写文件指令时,按照下述执行写文件操作:
所述写文件指令中包括FileState的索引、待写入数据和待写入数据长度;
D1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入D2,如果否,则返回写入失败的提示;
D2,根据待写入数据长度,判断轻量级文件系统是否还有空闲空间用于存储待写入数据长度,如果是,则进入D3;如果否,则返回写入失败的提示;
D3,判断待写入数据长度是否超出单次写入预设上限,如果是,则以单次写入数据长度等于单次写入预设上限的方式进行单次写入数据操作,并进入D4;如果否,进入D5;
D4,更新待写入数据长度,返回D3;
D5,判断数据是否写完,如果是,则返回完成写文件操作的提示;如果否,则返回D4;
当所述操作指令为读文件指令时,按照下述执行读文件操作:
所述读文件指令中包括FileState的索引、待读取的数据缓存和待读取数据长度;
E1,根据FileState的索引找到相应FileState中的文件ID,判断该文件是否打开,如果是,则进入E2,如果否,则返回读取失败的提示;
E2,根据文件ID获取文件TLV,并根据FileState中读偏移获取到指定读取的数据块号起始及当前起始块号内的偏移;
E3,缓存需要读取块号的列表;
E4,计算并判断读取总长度是否为0,如果是,则进入E8;如果否,则进入E5;所述读取总长度=待读取总长度-本次读取长度;
E5,获取列表中当前待读取块号中存储数据的大小;
E6,将计算得到的当前待读取块号的读取长度为本次读取长度;
E7,判断当前待读取块号是否为缓冲块,如果是,获取当前WriteBuffer中的SrcBlock内的原始文件数据再循环查找其他WriteBuffer中所有相同UsedBlock的WriteBuffer读出其Offset和Datasize中的缓冲数据与原始文件数据合并(缓冲数据覆盖原始文件数据),合并后的数据为读出数据,并更新读取总长度;返回E4;如果否,则读取当前待读取块号的数据,并更新读取总长度,返回E4;
E8,更新FileState中的读偏移,完成读文件的操作。
7.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,当所述操作指令为指定当前文件的读/写位置指令时,按照下述执行指定当前文件的读/写位置操作:
所述指定当前文件的读/写位置指令中包括FileState的索引、目标偏移值和位置偏移模式;
F1,依据FileState的索引判断目标文件是否打开,如果是,则进入F2;如果否,则返回不能执行操作的提示;
F2,判断位置偏移模式,并获得文件的读/写偏移;
如果位置偏移模式为目标文件的头位置;则判断目标偏移值是否为负,如果是,则文件的读/写偏移为0;如果否,则判断目标偏移值是否大于目标文件的文件大小,若是,则文件的读/写偏移为文件大小;若否,则文件的读/写偏移为目标偏移值;
如果位置偏移模式为目标文件的当前位置;则根据文件的读/写偏移=原文件的读/写偏移+目标偏移值,更新文件的读/写偏移,当计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值为0;当计算后文件的读/写偏移大于目标文件的文件大小,则文件的读/写偏移为文件大小;
如果位置偏移模式为目标文件的尾位置;判断目标偏移值是否为正,如果是,则文件的读/写偏移为目标文件的文件大小;如果否,则文件的读/写偏移=原文件的读/写偏移+目标偏移值,如果计算后文件的读/写偏移小于0,则将文件的读/写偏移赋值0;
当所述操作指令为删除文件指令时,按照下述执行删除文件的操作:所述删除文件指令包括目标文件名;判断目标文件名是否存在,如果否,提示操作失败;如果是,则依据目标文件名获取文件ID,根据文件ID获取文件TLV,循环将文件TLV中的数据块设置为空闲状态,直至文件TLV中所有数据块的状态均为空闲状态为止,将FileLog中对应文件名的FileItemLog设置为无效,完成删除文件的操作;在将文件TLV中的数据块设置为空闲状态过程中,需判断当前即将设置为空闲状态的数据块是否为缓冲块,如果否,则直接将该数据块设置为空闲状态;如果是,则将WriteBuffer中存储的缓冲数据块块号所对应的缓冲数据块和原数据块块号所对应的原数据块均设置为空闲状态,同时循环设置所述缓冲数据块块号与所述原数据块块号的WriteBuffer为空闲状态,并更新WriteBufferLog;
当所述操作指令为获取文件系统空闲大小指令时,按照下述执行获取文件系统空闲大小的操作:获取轻量级文件系统中当前FreeBlock的数量,计算当前FreeBlock数量×每块数据块最大可用数据长度,得到文件系统空闲大小,返回结果,完成获取文件系统空闲大小的操作。
8.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,
当所述自身内部操作指令为缓冲区初始化指令时,按照下述执行缓冲区初始化的操作:循环读取WriteBufferLog中的WriteBuffer直至读取完WriteBufferLog中的所有WriteBuffer,更新WriteBufferLog的空闲位置,完成缓冲区初始化;在读取过程中,当WriteBuffer为有效数据时,则记录该WriteBuffer;在读取过程中,当WriteBuffer为无效数据时,则将该WriteBuffer置为空闲状态;
当所述自身内部操作指令为获取空闲块指令时,按照下述执行获取空闲块的操作:
G1,判断FreeBlock是大于0还是等于0,如果是大于0,则进入G2;如果是等于0,则返回空间不足的提示;
G2,通过随机方式获取查找FreeBlock的起始位置;
G3,从起始位置开始,循环读取数据块的BlockItem,
当BlockItem中的块状态为闲置状态时,判断是否需要擦除当前数据块,若是,则擦出数据,并返回FreeBlock;若否,则直接返回FreeBlock;
当BlockItem中的块状态为已使用状态则擦除数据后,返回FreeBlock;
当BlockItem中的块状态为未使用,则直接返回FreeBlock;
当所述自身内部操作指令为更新FileLog指令时,按照下述执行更新FileLog的操作:
H1,判断目标FileItemLog是否超出FileLog空闲位置大小,如果否,则将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;如果是,则进入H2;
H2,整理FileLog,剔除FileLog中的无效FileItemLog,保留有效FileItemLog,然后将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;
H21,获取原FreeBlock;
H22,循环读取原FileLog中有效FileItemLog,更新FileItemLog位置信息后拷贝到新FreeBlock中,循环完成后,新FreeBlock的BlockItem设置为有效,设置新FreeBlock的BlockItem属性为FileLog;将原FileLog的BlockItem设置为无效,更新FileLog的空闲位置,更新FileLog的块索引;将目标FileItemLog添加至FileLog末尾,更新FileLog空闲位置;
当所述自身内部操作指令为更新BlockLog指令时,按照下述执行更新BlockLog的操作:
K1、判断目标文件TLV是否超出BlockLog空闲位置的大小,如果否,则将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;如果是,则进入K2;
K2,整理BlockLog,剔除BlockLog中的无效文件TLV,保留有效文件TLV,然后将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;
K21,获取原BlockLog;
K22,循环读取原BlockLog中有效文件TLV,更新文件TLV位置信息后拷贝到新BlockLog中,循环完成后,新BlockLog的BlockItem设置为有效,属性为BlockLog,将原BlockLog的BlockItem设置为无效;更新BlockLog的空闲位置,更新BlockLog的块索引;将目标文件TLV添加至BlockLog末尾,更新BlockLog空闲位置;
当所述自身内部操作指令为单次写入数据指令时,按照下述执行单次写入数据的操作:
M1,获取目标文件TLV,同时,获取目标文件TLV被指定写入块号的起始偏移及块内偏移,缓存需要写入数据的块号得到数据块链表;
M2,获取FreeBlock;
M3,判断当前数据的写入位置:
当写入位置为原有数据块位置时,获取原数据块BlockItem,判断BlockItem是否合法,不合法,则返回错误;合法,则调用缓冲写入数据,更新文件TLV,进入M4;
当写入位置为新数据块位置时,更新FreeBlock的数据块状态为已使用状态,将数据写入FreeBlock后,设置FreeBlock的文件属性为写数据的文件属性;
M4,判断数据是否写完,如果否,则返回步骤2;如果是,则进入M5;
M5,判断是否需要更新BlockLog,如果是,则更新BlockLog中目标文件TLV,进入M6;如果否,则进入M7;
M6,判断写入目标文件后文件大小是否有变化,如果是,则更新文件大小;如果否,则进入M7;
M7,更新当前文件的写入偏移值,完整单次写入数据的操作。
9.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,当所述自身内部操作指令为缓冲写入数据指令时,按照下述执行缓冲写入数据的操作:
N1、判断需要写入数据的数据块是否为缓冲块;
如果否,则获取空闲WriteBuffer,更新FreeBlock的BlockItem文件属性为缓冲数据文件,将FreeBlock的BlockItem设置为有效,将数据写入FreeBlock,更新WriteBuffer信息并设置为已使用状态,更新WriteBufferLog;
如果是,则进入N2;
N2,判断与需要写入数据的块号相同的缓冲块中的WriteBuffer的数量是单个还是多个;如果是单个,则进入N3;如果是多个,则进入N6;
N3,判断需要写入数据与原缓冲数据的合并方式,
如果合并方式为分离,则获取空闲WriteBuffer,更新缓冲块的属性,更新WriteBuffer信息并设置为已使用状态,将需要写入数据写入WriteBuffer的缓冲块中,更新WriteBufferLog,进入N6;
如果合并方式为合并,则更新缓冲块的属性,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,将合并数据写入FreeBlock,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,进入N6;
N4,判断多个WriteBuffer中原缓冲数据中是否存在与需要写入数据合并的数据段;
如果是,则进入N5;如果否,则需要写入数据与所有原缓冲数据段分离,更新缓冲块的BlockItem,将需要写入的数据写入WriteBuffer的缓冲块中,更新WriteBuffer的信息并设置为已使用状态,更新WriteBufferLog,进入N6;
N5,循环判断需要写入数据与每一个原缓冲数据合并的合并方式;
当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为分离方式,则更新缓冲块的BlockItem,更新WriteBuffer的信息并设置为已使用状态,将需要写入数据写入FreeBlock中,更新WriteBufferLo,进入N6;
当需要写入数据与当前原缓冲数据段WriteBuffer的数据位置为部分重合方式,则更新缓冲块的BlockItem,更新WriteBuffer信息,将原WriteBuffer中对应的缓冲块号设置为无效,将原缓冲块WriteBuffer的数据读出与需要写入数据合并得到合并数据,更新FreeBlock的BlockItem文件属性为缓冲数据文件,更新FreeBlock的BlockItem的使用状态为已使用状态,设置原缓冲块WriteBuffer为空闲状态,同时更新WriteBufferLog,进入N6;
当需要写入数据包含当前原缓冲数据段WriteBuffer的数据,则更新原WriteBuffer信息为空闲,更新WriteBufferLog,进入N6;
N6,发出完成缓冲写入数据操作的提示。
10.根据权利要求1所述轻量级文件系统的实现方法,其特征在于,
当所述自身内部操作指令为获取缓冲块指令时,按照下述执行获取缓冲块的操作:循环查询WriteBuffer中是否有空闲WriteBuffer,如果是,返回该空闲WriteBuffer,如果否,则继续判断;
当所述自身内部操作指令为整理缓冲块指令时,按照下述执行整理缓冲块的操作:
S1,获取已使用且数据段最大的WriteBuffer;
S2,初始化需要获取的原数据范围,所述原数据范围包括原数据块号和数据长度;
S3,循环判断是否有与S1中WriteBuffer相同源数据块的WriteBuffer,如果是,则更新源数据块号需要读取的数据范围,并更新整理后数据块的大小设置WriteBuffer为空闲状态,更新WriteBufferLog,进入S4;如果否,则直接进入S4;
S4,读出需要获取的原数据的范围内的数据并写入WriteBuffer中的缓冲块中;
S5,更新缓冲区BlockItem,具体为:更新WriteBuffer中的缓冲块中的BlockItem为使用状态,将WriteBuffer中的缓冲块中的BlockItem的属性更新为文件对应属性,将WriteBuffer中的原数据块的BlockItem的状态更新为空闲状态;
S6,返回空闲WriteBuffer,完成缓冲块整理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810044641.5A CN108491402B (zh) | 2018-01-17 | 2018-01-17 | 一种轻量级文件系统的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810044641.5A CN108491402B (zh) | 2018-01-17 | 2018-01-17 | 一种轻量级文件系统的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108491402A true CN108491402A (zh) | 2018-09-04 |
CN108491402B CN108491402B (zh) | 2021-09-21 |
Family
ID=63343589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810044641.5A Active CN108491402B (zh) | 2018-01-17 | 2018-01-17 | 一种轻量级文件系统的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108491402B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284252A (zh) * | 2018-09-11 | 2019-01-29 | 武汉虹信通信技术有限责任公司 | 一种通信设备中轻量级文件系统管理方法 |
CN109376100A (zh) * | 2018-11-05 | 2019-02-22 | 浪潮电子信息产业股份有限公司 | 一种缓存写入方法、装置、设备及可读存储介质 |
CN111797058A (zh) * | 2020-07-02 | 2020-10-20 | 长沙景嘉微电子股份有限公司 | 一种通用文件系统及文件管理的方法 |
CN112035833A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种文件拷贝监控方法和系统 |
CN115098454A (zh) * | 2022-07-26 | 2022-09-23 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1945537A (zh) * | 2006-07-27 | 2007-04-11 | 清华大学 | 基于存储区域网络的高速固态存储设备的实现方法 |
US7937528B2 (en) * | 2004-05-13 | 2011-05-03 | Cousins Robert E | Transaction-based storage system and method that uses variable sized objects to store data |
CN102053879A (zh) * | 2010-12-16 | 2011-05-11 | 国网电力科学研究院 | 基于falsh的自恢复实时文件系统 |
CN103577574A (zh) * | 2013-11-05 | 2014-02-12 | 中船重工(武汉)凌久电子有限责任公司 | 一种基于nand flash的高可靠线性文件系统 |
US9311333B1 (en) * | 2012-12-28 | 2016-04-12 | Emc Corporation | Managing files of file systems |
CN106326229A (zh) * | 2015-06-17 | 2017-01-11 | 百富计算机技术(深圳)有限公司 | 一种嵌入式系统的文件存储方法和装置 |
US9613053B1 (en) * | 2014-06-30 | 2017-04-04 | EMC IP Holding Company LLC | Techniques for providing access to a virtualized block storage device over a file-based network storage protocol |
CN107239526A (zh) * | 2017-05-27 | 2017-10-10 | 河南思维轨道交通技术研究院有限公司 | 文件系统实现方法、碎片整理方法、操作位置定位方法 |
-
2018
- 2018-01-17 CN CN201810044641.5A patent/CN108491402B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7937528B2 (en) * | 2004-05-13 | 2011-05-03 | Cousins Robert E | Transaction-based storage system and method that uses variable sized objects to store data |
CN1945537A (zh) * | 2006-07-27 | 2007-04-11 | 清华大学 | 基于存储区域网络的高速固态存储设备的实现方法 |
CN102053879A (zh) * | 2010-12-16 | 2011-05-11 | 国网电力科学研究院 | 基于falsh的自恢复实时文件系统 |
US9311333B1 (en) * | 2012-12-28 | 2016-04-12 | Emc Corporation | Managing files of file systems |
CN103577574A (zh) * | 2013-11-05 | 2014-02-12 | 中船重工(武汉)凌久电子有限责任公司 | 一种基于nand flash的高可靠线性文件系统 |
US9613053B1 (en) * | 2014-06-30 | 2017-04-04 | EMC IP Holding Company LLC | Techniques for providing access to a virtualized block storage device over a file-based network storage protocol |
CN106326229A (zh) * | 2015-06-17 | 2017-01-11 | 百富计算机技术(深圳)有限公司 | 一种嵌入式系统的文件存储方法和装置 |
CN107239526A (zh) * | 2017-05-27 | 2017-10-10 | 河南思维轨道交通技术研究院有限公司 | 文件系统实现方法、碎片整理方法、操作位置定位方法 |
Non-Patent Citations (3)
Title |
---|
ZHAN SHI: "A Lightweight File System Management Framework", 《2010 IEEE FIFTH INTERNATIONAL CONFERENCE ON NETWORKING, ARCHITECTURE, AND STORAGE》 * |
任小平: "极小嵌入式系统中闪存转换层的设计与实现", 《成都大学学报(自然科学版)》 * |
耿庆田: "基于嵌入式的文件系统研究", 《吉林大学学报(信息科学版)》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284252A (zh) * | 2018-09-11 | 2019-01-29 | 武汉虹信通信技术有限责任公司 | 一种通信设备中轻量级文件系统管理方法 |
CN109284252B (zh) * | 2018-09-11 | 2021-07-06 | 武汉虹信科技发展有限责任公司 | 一种通信设备中轻量级文件系统管理方法 |
CN109376100A (zh) * | 2018-11-05 | 2019-02-22 | 浪潮电子信息产业股份有限公司 | 一种缓存写入方法、装置、设备及可读存储介质 |
CN111797058A (zh) * | 2020-07-02 | 2020-10-20 | 长沙景嘉微电子股份有限公司 | 一种通用文件系统及文件管理的方法 |
CN111797058B (zh) * | 2020-07-02 | 2024-02-09 | 长沙景嘉微电子股份有限公司 | 一种通用文件系统及文件管理的方法 |
CN112035833A (zh) * | 2020-08-21 | 2020-12-04 | 郑州信大捷安信息技术股份有限公司 | 一种文件拷贝监控方法和系统 |
CN112035833B (zh) * | 2020-08-21 | 2022-02-11 | 郑州信大捷安信息技术股份有限公司 | 一种文件拷贝监控方法和系统 |
CN115098454A (zh) * | 2022-07-26 | 2022-09-23 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108491402B (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108491402A (zh) | 一种轻量级文件系统的实现方法 | |
CN110083601A (zh) | 面向键值存储系统的索引树构建方法及系统 | |
CN107038206B (zh) | Lsm树的建立方法、lsm树的数据读取方法和服务器 | |
CN109213772A (zh) | 数据存储方法及NVMe存储系统 | |
CN108804510A (zh) | 键值文件系统 | |
CN103646063B (zh) | 一种星载高速文件管理系统 | |
CN107918612A (zh) | 键值存储系统数据结构的实现方法和装置 | |
CN110413592A (zh) | 使用对象固态驱动器(ssd)设备的基于日志结构合并(lsm)树的数据库的优化 | |
CN107463447A (zh) | 一种基于远程直接非易失内存访问的b+树管理方法 | |
CN101533346B (zh) | 源文件的比较装置及方法 | |
CN106406748A (zh) | 存储器中心数据库架构 | |
CN102096676B (zh) | 数据更新及查询控制方法及系统 | |
CN106020736B (zh) | 一种内存文件系统中的数据一致性更新方法 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
CN105786724B (zh) | 空间管理方法及装置 | |
JPH0844602A (ja) | データ管理装置 | |
CN116226497A (zh) | 检索方法、介质、装置和计算设备 | |
JP2539347B2 (ja) | フアイル管理方法 | |
CN102169418B (zh) | 一种资源受限设备和数据访问方法 | |
CN107291541A (zh) | 面向Key‑Value系统的compaction粗粒度进程级并行优化方法及系统 | |
KR100944756B1 (ko) | 대용량 레파지토리 구성을 위한 데이터 저장 구조 | |
JPH0283640A (ja) | データベース更新方法 | |
US11526474B2 (en) | Reducing requests using probabilistic data structures | |
JPH04191934A (ja) | 機能別プログラム管理方法および装置 | |
CN117420955A (zh) | 一种利用B+Tree优化混合存储下LSM-Tree性能的方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |