一种磁盘扇区的控制方法和装置的制造方法

文档序号:9546887阅读:193来源:国知局
一种磁盘扇区的控制方法和装置的制造方法
【技术领域】
[0001]本发明涉及存储技术领域,尤其涉及一种磁盘扇区的控制方法和装置。
【背景技术】
[0002]目前,可以将数据写入到磁盘,并从磁盘中读取数据。磁盘上的每个磁道被等分为若干个弧段,这些弧段就是磁盘的扇区,磁盘的读写均是以扇区为基本单位,因此,将数据写入到磁盘的扇区,并从磁盘的扇区中读取数据。
[0003]在将数据写入到扇区或者从扇区中读取数据时,扇区只支持数据量大于扇区大小的写命令或者读命令,文件系统下发的写命令或者读命令都是扇区大小的整数倍。例如,扇区大小可以为512K,写命令用于将1M(512K*2)或者2M的数据写入到扇区,读命令用于从扇区中读取1M或者2M的数据。
[0004]但是,随着存储技术的快速发展,在一些应用场景下,经常会遇到写命令或者读命令小于扇区大小的情况,而目前的扇区并不支持小于扇区大小的写命令或者读命令。例如,在块虚拟化的磁盘阵列管理中,每个磁盘被划分成上万的虚拟块,为了管理这些虚拟块,需要将虚拟块的管理数据写入到扇区,且每个虚拟块占用一个扇区,每个虚拟块的管理数据可能只有几个字节,远远小于扇区大小512K,因此扇区并不支持虚拟块的管理数据的写命令。

【发明内容】

[0005]本发明提供一种磁盘扇区的控制方法,所述方法包括以下步骤:
[0006]接收小于扇区大小的写命令,确定所述写命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述写命令加入到下发链表;如果所述扇区状态是合并写下发状态,则将所述写命令加入到等待链表;
[0007]当预读命令返回时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区;
[0008]当合并写命令返回时,如果所述等待链表内存在写命令,则将所述等待链表内的写命令加入到下发链表,并在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区。
[0009]通过哈希表来管理所述扇区命令结构,所述哈希表以扇区对应的LBA值为键值;所述确定所述写命令对应的扇区和所述扇区对应的扇区命令结构的过程,具体包括:从所述写命令中获得待写入的扇区的地址信息,并利用所述地址信息确定所述写命令对应的扇区;以及,通过确定的所述扇区的LBA值查询所述哈希表的键值,得到所述扇区的LBA值对应的扇区命令结构;
[0010]所述方法还包括:在确定所述写命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,在所述扇区命令结构的预读缓存中存储所述预读数据;
[0011 ]当所述扇区状态是预读下发状态时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区之后,将所述扇区命令结构的扇区状态由预读下发状态修改为合并写下发状态;
[0012]当所述合并写命令返回时,所述方法进一步包括:如果所述等待链表内不存在写命令,则在预设时间之后,删除所述扇区对应的扇区命令结构。
[0013]所述在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,包括:当所述下发链表中包含多个写命令时,按照所述多个写命令加入到所述下发链表的时间先后顺序,依次将所述多个写命令合并到所述预读数据中。
[0014]所述在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,包括:根据所述下发链表中的写命令在所述扇区中的第一偏移和第一大小,使用内存拷贝方式,从所述第一偏移开始,将所述写命令拷贝到所述预读缓存包含的预读数据,且所述写命令在所述预读数据中的大小为所述第一大小。
[0015]所述方法进一步包括:
[0016]接收小于扇区大小的读命令,确定所述读命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述读命令加入到下发链表;如果所述扇区状态是读返回处理状态,则将所述读命令加入到等待链表;其中,在确定所述读命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,则创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,并在所述扇区命令结构的预读缓存中存储所述预读数据;
[0017]当预读命令返回时,将扇区状态由预读下发状态修改为读返回处理状态,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用;在读返回处理状态下,如果等待链表内存在读命令,则将所述等待链表内的读命令加入到下发链表,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用。
[0018]本发明提供一种磁盘扇区的控制装置,所述装置具体包括:
[0019]确定模块,用于接收小于扇区大小的写命令,并确定所述写命令对应的扇区和所述扇区对应的扇区命令结构,其中,所述扇区命令结构具体包括扇区状态、预读缓存、下发链表和等待链表,且所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述写命令加入到所述下发链表;如果所述扇区状态是合并写下发状态,则将所述写命令加入到所述等待链表;
[0020]写入模块,用于当预读命令返回时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区;
[0021]当合并写命令返回时,如果所述等待链表内存在写命令,则将所述等待链表内的写命令加入到下发链表,并在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区。
[0022]通过哈希表来管理所述扇区命令结构,且所述哈希表以扇区对应的LBA值为键值;所述确定模块,具体用于在确定所述写命令对应的扇区和所述扇区对应的扇区命令结构的过程中,从写命令中获得待写入的扇区的地址信息,并利用所述地址信息确定所述写命令对应的扇区;通过所述扇区的LBA值查询所述哈希表的键值,得到所述扇区的LBA值对应的扇区命令结构;
[0023]所述确定模块,还用于在确定写命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,在所述扇区命令结构的预读缓存中存储所述预读数据;
[0024]所述写入模块,还用于当所述扇区状态是预读下发状态时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区之后,则将所述扇区命令结构的扇区状态由预读下发状态修改为合并写下发状态;当所述合并写命令返回时,如果所述等待链表内不存在写命令,则在预设时间之后,删除所述扇区对应的扇区命令结构。
[0025]所述写入模块,具体用于在所述预读缓存包含的预读数据中合并所述下发链表中的写命令的过程中,当所述下发链表中包含多个写命令时,按照所述多个写命令加入到所述下发链表的时间先后顺序,依次将所述多个写命令合并到所述预读数据中。所述写入模块,具体用于在所述预读缓存包含的预读数据中合并所述下发链表中的写命令的过程中,根据所述下发链表中的写命令在所述扇区中的第一偏移和第一大小,使用内存拷贝方式,从所述第一偏移开始,将所述写命令拷贝到所述预读缓存包含的预读数据,且所述写命令在所述预读数据中的大小为所述第一大小。
[0026]所述确定模块,还用于接收小于扇区大小的读命令,确定所述读命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述读命令加入到下发链表;如果所述扇区状态是读返回处理状态,则将所述读命令加入到等待链表;在确定所述读命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,则创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,从所述扇区中读取已经写入的所述扇区大小的预读数据,并在所述扇区命令结构的预读缓存中存储所述预读数据;
[0027]所述装置还包括:读取模块,用于当预读命令返回时,将扇区状态由预读下发状态修改为读返回处理状态,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用;在读返回处理状态下,如果等待链表内存在读命令,则将所述等待链表内的读命令加入到下发链表,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用。
[0028]基于上述技术方案,本发明实施例中,使得扇区能够支持小于扇区大小的写命令,可以将小于扇区大小的多个写命令写入到一个扇区,而不需要为每个小于扇区大小的写命令单独申请一个扇区,从而可以节省扇区空间。而且,可以同时处理多个小于扇区大小的写命令,不用单独处理每个小于扇区大小的写命令,从而可以提高写命令的处理性能。而且,针对一个扇区,可以为所有小于扇区大小的写命令只维护一个预读缓存,而不用为每个小于扇区大小的写命令单独维护一个预读缓存,而每个预读缓存都需要重新申请内存资源,因此可以避免占用较多的内存资源,从而可以节省内存资源。
【附图说明】
[0029]图1是本发明一种实施方式中的磁盘扇区的控制方法的流程图;
[0030]图2是本发明一种实施方式中的写命令的处理示意图;
[0031]图3A和图3B是本发明一种实施方式中的测试数据的示意图;
[0032]图4是本发明一种实施方式中的磁盘扇区的写控制方法的流程图;
[0033]图5是本发明一种实施方式中的磁盘扇区的控制方法的流程图;
[0034]图6是本发明一种实施方式中的读命令的处理示意图;
[0035]图7是本发明一种实施方式中的磁盘扇区的读控制方法的流程
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1