一种分配空闲簇以及释放簇的方法

文档序号:6573679阅读:628来源:国知局
专利名称:一种分配空闲簇以及释放簇的方法
技术领域
本发明属于数据存储领域,尤其涉及一种分配空闲簇以及释放簇的方法。
背景技术
随着存储技术的发展和音视频技术的应用,人们对于磁盘容量的要求越来越大。磁盘中的搡作单位是蔟(Cluster, CL),在对石兹盘进行写入的过程中, 需要找到一个或多个未使用的空闲簇,然后才能将參数据写入。
现有的技术方案通常在磁盘上每个扇区开始的部分划分出一块连续的区 间,区间中的每个比特对应于该扇区的空闲簇的情况,例如,该区间上第n个 比特为1,表示第n个簇为空闲簇;该区间的第n个比特为0表示第n个簇被 使用。当第一次查找该扇区上的空闲簇时,从该区间的第一个比特开始查找, 直到找到一个为1的比特,将数据写入对应的空闲簇并将该比特修改为0,以 后的每次查找,都从该区间上次查找到空闲簇的位置开始向后查找,直到查找 到下一个为1的比特,将数据写入对应的空闲簇,并把该位置对应的比特修改为0。
上述技术方案对于在大容量的磁盘中查找空闲簇很困难,耗时长,尤其当 反复对磁盘进行操作后,扇区空间快满时,查找到一个空闲簇很困难,耗时很长。

发明内容
本发明实施例的目的在于提供一种分配空闲簇的方法,旨在解决现有技术 中查找空闲簇耗时长的问题。
本发明实施例的另 一 目的在于提供一种释放蔟的方法,使得被释放的簇能
够按照上述空闲簇的分配方法继续被分配出去。
本发明实施例是这样实现的, 一种分配空闲簇的方法,所述方法包括
将空闲簇的位置信息以链表结构保存;
当接收到分配请求时,读取所述链表结构的起始点空闲簇的位置信息;
才艮据该位置信息分配相应的空闲簇;
将链表起始点的位置信息修改为下 一个空闲簇的位置信息。
所述将空闲簇的位置信息以链表结构保存的步骤具体包括
根据空闲簇的数量unit设置unit+l个记录单元;
将所有空闲簇的位置信息以链表结构保存在所述记录单元中。
所述当接收到分配请求时,读取所述链表结构的起始点空闲簇的位置信息 的步骤具体包括
读取所述链表结构的起始点记录单元的值。
所述根据位置信息分配相应的空闲簇并将链表起始点的位置信息修改为下 一个空闲簇的位置信息的步骤具体包括
根据读取到的记录单元的值分配相应的空闲簇;
根据链表结构将下一个空闲簇的位置信息保存到链表结构的起始点的记录 单元中。
一种释放簇的方法,所述方法包括
释放簇;
将所释放簇的位置信息保存到记录单元中,所述记录单元以链表结构记录
空闲簇的位置信息。
所述将所释放簇的位置信息保存到记录单元中的步骤具体包括 将链表结构的起始点记录单元的值CLn保存到第n个记录单元中;
将所释放蔟的位置信息保存到链表结构的起始点记录单元中。
本发明实施例通过将空闲簇的位置信息以链表的结构保存起来,当接收到
分配请求时,直接根据链表的起始点空闲簇的位置信息将对应的空闲簇分配给数据,使得存储数据的时候不需要查找空闲簇,缩短了存储数据的时间。同时, 本发明实施例提供的释放簇的方法使得被释放的簇能够按照上述空闲蔟的分配 方法继续^皮分配出去。


图1是本发明实施例提供的值为链表结构的记录单元的一个示例图2是本发明实施例提供的分配空闲蔟的方法的实现流程图3是本发明实施例提供的释放簇的方法的实现流程图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例通过将空闲簇的位置以链表的结构链接起来,使得存储数据的时候不需要查找空闲簇,直接根据链表的起始点空闲蔟的位置将对应的空闲簇分配给数据。
假设磁盘扇区的大小为HddSize,磁盘上每一簇的大小为SectorSize,则整个磁盘扇区空闲簇的数量为Unit=HddSize/SectorSize。本发明在磁盘的扇区 上划分一块连续区间,通过Unit+1个记录单元来记录/F兹盘扇区上的空闲蔟的信息。记录空闲簇信息的记录单元在磁盘扇区中占用的簇数为TotalSector=(Unit+1)*nByte/SectorSize,其中nByte为每个记录单元需要的字节数。
记录单元的一个示例如图1所示,其中,第Unit+1个记录单元中的内容为CL1,CL1表示第一个空闲簇,第一个记录单元中的内容为CL2,CL2表示第二个空闲簇,第二个记录单元中的内容为CL3,CL3表示第三个空闲簇,…… 第Unit-1个记录单元中的内容为Clunit, Clunit表示第unit个空闲簇,链表结 尾处的记录单元的值为非法值,可设置为0,表示没有可用的空闲簇。可以看
出空闲簇的链表结构为CL1—CL2—CL3—......CLunit—0,第Unit + 1个记录
单元为链表的起始点。
图2示出了本发明实施例提供的分配空闲簇的方法实现流程,详述如下
在步骤S201中,当接收到一个分配请求时,读取链表的起始点,即第Unit + 1个记录单元的值;
在步骤S202中,根据第Unit + 1个记录单元的值判断磁盘扇区中是否有可 分配的空闲簇,是则执行步骤S203,否则执行步骤S205;
第Unit+1个记录单元的值为0或CLn,其中ne[l, 2, 3, ......, unit],
当第Unit+ 1个记录单元的值为0时,表示没有可以分配的空闲蔟。
在步骤S203中,分配空闲蔟;
将第n个空闲簇分配给待存数据,进入步骤S204。
在步骤S204中,修改记录单元的值;
将第n个记录单元的值保存到第Unit + 1个记录单元中。
在步骤S205中,分配空闲蔟失败。
当接收到下一个分配请求时,继续执行步骤S201。可以看出空闲簇的位置 信息始终以链表结构保存在记录单元中,从而使得存储数据的时候不需要查找 空闲簇,直接根据链表的起始点记录单元的值将对应的空闲簇分配给数据。
对应的,本发明实施例还提供了一种释;改簇的方法,如图3所示,详述如

在步骤S301中,当接收到一个释放第m个簇的请求时,释放蔟;
其中,m印,2, 3, ......, unit]。
在步骤S302中,修改记录单元的值。
读取链表的起始点,即第Unit+l个记录单元的值,将该值保存到第m个 记录单元中,并将第Unit + 1个记录单元的值修改为CLm。
为了更好的说明本发明,下面结合一个具体示例对本发明进行说明,假设 磁盘扇区中有3个空闲簇,即Unit = 3,那么就需要111^+1=4个记录单元,
初始化时,各记录单元中的值可以分别为
CL2, CL3, 0, CL1;
可分配的空闲簇组成的链表结构为CL1—CL2—CL3—0。
当接收到一个分配请求时,读取第4个记录单元的值,为CL1则表示第1 个空闲簇是可以分配的空闲簇,将其分配后,读出第1个记录单元中的值并将 其写入第4个记录单元中,此时,各记录单元中的值分别为 CL2, CL3, 0, CL2;
可分配的空闲簇实际的链表结构为CL2—CL3—0。
当又接收到一个分配请求时,仍读取第4个记录单元的值,为CL2则表示 第2个空闲簇是可以分配的空闲簇,将其分配后,读出第2个记录单元中的值 并将其写入第4个记录单元中,此时,各记录单元中的值分别为
CL2, CL3, 0, CL3;
可分配的空闲簇实际的链表结构为CL3—0。
当又接收到一个分配请求时,仍读取第4个记录单元的值,为CL3则表示 第3个空闲簇是可以分配的空闲簇,将其分配后,读出第3个记录单元中的值 并将其写入第4个记录单元中,此时,各记录单元中的值分别为
CL2, CL3, 0, 0
此时第4个记录单元的值为0,表示没有可以分配的空闲簇,所以当又接 收到一个分配请求时,由于没有可以分配的空闲簇,导致分配失败。
此时如果接收到一个释放请求,要求释放第l个簇,,即CL1,那么仍旧 是先读取第4个记录单元的值(为0),将其写入要释放的簇对应的第1个记 录单元中,然后,在第4个记录单元中写入要释放的簇的位置,即CLl,此时, 各记录单元中的值分别为
0, CL3, 0, CL1;
可分配的空闲簇实际的链表结构为CL1—0。
此时如果又接收到一个释放请求,要求释放第2个簇,即CL2,那么仍旧 是先读取第4个记录单元的值(为CL1),将其写入第2个记录单元中,然后, 在第4个记录单元中写入CL2,此时,各记录单元中的值分别为 0, CL1, 0, CL2;
可分配的空闲簇实际的链表结构为CL2→CL1→0。
此时如果又接收到一个释放请求,要求释放第3个簇,即CL3,那么仍旧 是先读取第4个记录单元的值(为CL2 ),将其写入第3个记录单元中,然后, 在第4个记录单元中写入CL3,此时,各记录单元中的值分别为
0, CL1, CL2, CL3;
可分配的空闲簇实际的链表结构为CL3→CL2→CL1→0。 更多的分配空闲簇和释放簇的过程与上述示例原理相同,不再赘述。需要说明的是上述为链表结构的记录单元只需要在第一次使用磁盘的时候建立,并在后续的分配或津奪;改蔟的过程中保存记录即可。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种分配空闲簇的方法,其特征在于,所述方法包括将空闲簇的位置信息以链表结构保存;当接收到分配请求时,读取所述链表结构的起始点空闲簇的位置信息;根据该位置信息分配相应的空闲簇;将链表起始点的位置信息修改为下一个空闲簇的位置信息。
2、 如权利要求1所述的分配空闲簇的方法,其特征在于,所述将空闲簇的 位置信息以链表结构保存的步骤具体包括根据空闲簇的数量unit设置unit+l个记录单元;将所有空闲簇的位置信息以链表结构保存在所述记录单元中。
3、 如权利要求2所述的分配空闲簇的方法,其特征在于,所述当接收到分 配请求时,读取所述链表结构的起始点空闲簇的位置信息的步骤具体包括读取所述链表结构的起始点记录单元的值。
4、 如权利要求3所述的分配空闲簇的方法,其特征在于,所述根据位置信 息分配相应的空闲簇并将链表起始点的位置信息修改为下一个空闲簇的位置信 息的步骤具体包括根据读取到的记录单元的值分配相应的空闲簇;根据链表结构将下一个空闲蔟的位置信息保存到链表结构的起始点的记录 单元中。
5、 一种释放蔟的方法,其特征在于,所述方法包括 释放簇;将所释放簇的位置信息保存到记录单元中,所述记录单元以链表结构记录 空闲簇的位置信息。
6、 如权利要求5所述的释放簇的方法,其特征在于,所述将所释放蔟的位 置信息保存到记录单元中的步骤具体包括将链表结构的起始点记录单元的值CLn保存到第n个记录单元中; 将所释放蔟的位置信息保存到链表结构的起始点记录单元中
全文摘要
本发明适用于数据存储领域,提供了一种分配空闲簇以及释放簇的方法,所述分配空闲簇的方法包括将空闲簇的位置信息以链表结构保存;当接收到分配请求时,读取所述链表结构的起始点空闲簇的位置信息;根据该位置信息分配相应的空闲簇;将链表起始点的位置信息修改为下一个空闲簇的位置信息。本发明通过将空闲簇的位置信息以链表的结构保存起来,当接收到分配请求时,直接根据链表的起始点空闲簇的位置信息将对应的空闲簇分配给数据,使得存储数据的时候不需要查找空闲簇,缩短了存储数据的时间。
文档编号G06F12/02GK101201798SQ20071007358
公开日2008年6月18日 申请日期2007年3月19日 优先权日2007年3月19日
发明者况敬波 申请人:深圳市同洲电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1