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

技术编号:12805681 阅读:73 留言:0更新日期:2016-02-03 19:27
本发明专利技术提供一种磁盘扇区的控制方法和装置,该方法包括:接收小于扇区大小的写命令,确定写命令对应的扇区和扇区对应的扇区命令结构;如果扇区状态是预读下发状态,将写命令加入到下发链表;如果扇区状态是合并写下发状态,将写命令加入到等待链表;当预读命令返回时,在预读缓存包含的预读数据中合并下发链表中的写命令,将合并后的数据写入到扇区;当合并写命令返回时,如果等待链表内存在写命令,将等待链表内的写命令加入到下发链表,在预读缓存包含的预读数据中合并下发链表中的写命令,将合并后的数据写入到扇区。通过本发明专利技术的技术方案,使得扇区能够支持小于扇区大小的写命令,节省扇区空间,提高写命令的处理性能,节省内存资源。

【技术实现步骤摘要】

本专利技术涉及存储
,尤其涉及一种磁盘扇区的控制方法和装置
技术介绍
目前,可以将数据写入到磁盘,并从磁盘中读取数据。磁盘上的每个磁道被等分为若干个弧段,这些弧段就是磁盘的扇区,磁盘的读写均是以扇区为基本单位,因此,将数据写入到磁盘的扇区,并从磁盘的扇区中读取数据。在将数据写入到扇区或者从扇区中读取数据时,扇区只支持数据量大于扇区大小的写命令或者读命令,文件系统下发的写命令或者读命令都是扇区大小的整数倍。例如,扇区大小可以为512K,写命令用于将1M(512K*2)或者2M的数据写入到扇区,读命令用于从扇区中读取1M或者2M的数据。但是,随着存储技术的快速发展,在一些应用场景下,经常会遇到写命令或者读命令小于扇区大小的情况,而目前的扇区并不支持小于扇区大小的写命令或者读命令。例如,在块虚拟化的磁盘阵列管理中,每个磁盘被划分成上万的虚拟块,为了管理这些虚拟块,需要将虚拟块的管理数据写入到扇区,且每个虚拟块占用一个扇区,每个虚拟块的管理数据可能只有几个字节,远远小于扇区大小512K,因此扇区并不支持虚拟块的管理数据的写命令。
技术实现思路
本专利技术提供一种磁盘扇区的控制方法,所述方法包括以下步骤:接收小于扇区大小的写命令,确定所述写命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述写命令加入到下发链表;如果所述扇区状态是合并写下发状态,则将所述写命令加入到等待链表;当预读命令返回时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区;当合并写命令返回时,如果所述等待链表内存在写命令,则将所述等待链表内的写命令加入到下发链表,并在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区。通过哈希表来管理所述扇区命令结构,所述哈希表以扇区对应的LBA值为键值;所述确定所述写命令对应的扇区和所述扇区对应的扇区命令结构的过程,具体包括:从所述写命令中获得待写入的扇区的地址信息,并利用所述地址信息确定所述写命令对应的扇区;以及,通过确定的所述扇区的LBA值查询所述哈希表的键值,得到所述扇区的LBA值对应的扇区命令结构;所述方法还包括:在确定所述写命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,在所述扇区命令结构的预读缓存中存储所述预读数据;当所述扇区状态是预读下发状态时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区之后,将所述扇区命令结构的扇区状态由预读下发状态修改为合并写下发状态;当所述合并写命令返回时,所述方法进一步包括:如果所述等待链表内不存在写命令,则在预设时间之后,删除所述扇区对应的扇区命令结构。所述在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,包括:当所述下发链表中包含多个写命令时,按照所述多个写命令加入到所述下发链表的时间先后顺序,依次将所述多个写命令合并到所述预读数据中。所述在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,包括:根据所述下发链表中的写命令在所述扇区中的第一偏移和第一大小,使用内存拷贝方式,从所述第一偏移开始,将所述写命令拷贝到所述预读缓存包含的预读数据,且所述写命令在所述预读数据中的大小为所述第一大小。所述方法进一步包括:接收小于扇区大小的读命令,确定所述读命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述读命令加入到下发链表;如果所述扇区状态是读返回处理状态,则将所述读命令加入到等待链表;其中,在确定所述读命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,则创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,并在所述扇区命令结构的预读缓存中存储所述预读数据;当预读命令返回时,将扇区状态由预读下发状态修改为读返回处理状态,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用;在读返回处理状态下,如果等待链表内存在读命令,则将所述等待链表内的读命令加入到下发链表,根据下发链表中的读命令从所述预读缓存包含的预读数据中读取对应的数据,并将读取的数据返回给上层应用。本专利技术提供一种磁盘扇区的控制装置,所述装置具体包括:确定模块,用于接收小于扇区大小的写命令,并确定所述写命令对应的扇区和所述扇区对应的扇区命令结构,其中,所述扇区命令结构具体包括扇区状态、预读缓存、下发链表和等待链表,且所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述写命令加入到所述下发链表;如果所述扇区状态是合并写下发状态,则将所述写命令加入到所述等待链表;写入模块,用于当预读命令返回时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区;当合并写命令返回时,如果所述等待链表内存在写命令,则将所述等待链表内的写命令加入到下发链表,并在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区。通过哈希表来管理所述扇区命令结构,且所述哈希表以扇区对应的LBA值为键值;所述确定模块,具体用于在确定所述写命令对应的扇区和所述扇区对应的扇区命令结构的过程中,从写命令中获得待写入的扇区的地址信息,并利用所述地址信息确定所述写命令对应的扇区;通过所述扇区的LBA值查询所述哈希表的键值,得到所述扇区的LBA值对应的扇区命令结构;所述确定模块,还用于在确定写命令对应的扇区后,如果不存在所述扇区对应的扇区命令结构,创建所述扇区对应的扇区命令结构,记录所述扇区命令结构的扇区状态为预读下发状态,并从所述扇区中读取已经写入的所述扇区大小的预读数据,在所述扇区命令结构的预读缓存中存储所述预读数据;所述写入模块,还用于当所述扇区状态是预读下发状态时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区之后,则将所述扇区命令结构的扇区状态由预读下发状态修改为合并写下发状态;当所述合并写命令返回时,如果所述等待链表内不存在写命令,则在预设时间之后,删除所述扇区对应的扇区命令结构。所述写入模块,具体用于在所述预读缓存包含的预读数据中合并所述下发链表中的写命令的过程中,当所述下发链表中包含多个写命令时,按照所述多个写命令加入到所述下发链表的时间先后顺序,依次将所述多个写命令合并到所述预读数据中。所述写入模块,具体用于在所述预读缓存包含的预读数据中合并所述下发链表中的写命令的过程中,根据所述下发链表中的写命令在所述扇区中的第一偏移和第一大小,使用内存拷贝方式,从所述第一偏移开始,将所述写命令拷贝本文档来自技高网...

【技术保护点】
一种磁盘扇区的控制方法,其特征在于,所述方法包括以下步骤:接收小于扇区大小的写命令,确定所述写命令对应的扇区和所述扇区对应的扇区命令结构,所述扇区命令结构包括扇区状态、预读缓存、下发链表和等待链表,所述预读缓存包含所述扇区内已经写入的所述扇区大小的预读数据;如果所述扇区状态是预读下发状态,则将所述写命令加入到下发链表;如果所述扇区状态是合并写下发状态,则将所述写命令加入到等待链表;当预读命令返回时,在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区;当合并写命令返回时,如果所述等待链表内存在写命令,则将所述等待链表内的写命令加入到下发链表,并在所述预读缓存包含的预读数据中合并所述下发链表中的写命令,并将合并后的数据写入到所述扇区。

【技术特征摘要】

【专利技术属性】
技术研发人员:李华英
申请(专利权)人:浙江宇视科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1