存储设备间移动数据的方法、控制器和存储系统的制作方法_3

文档序号:9687350阅读:来源:国知局
B和1MB的物理地址空间。
[0056]S304、应用程序调用用户空间库中的move API,请求将DRAM中512KB的数据移动到HDD中。
[0057]具体来说,应用程序可以调用move (addrl, addr2, 512KB)。
[0058]S305、用户空间库获得move调用后,将UAS控制器中的寄存器地址映射到用户态空间,向UAS控制器发送寄存器写请求。
[0059]S306、UAS控制器接收到寄存器写请求,将源地址addl和目的地址add2转换成物理地址,发现源设备和目的设备分别是DRAM和HDD。
[0060]S307、UAS控制器将DRAM中指定地址处512KB的数据移动到HDD中。
[0061]S308、在数据传输完成后,UAS控制器将移动操作完成信息写入寄存器。
[0062]可选的,UAS控制器可以将DRAM中移动的512KB的数据块信息置为无效。
[0063]S309、应用程序调用用户空间库中的check API。
[0064]S310、用户空间库在获得check调用后,读取UAS控制器中的寄存器,获取移动操作完成信息。
[0065]S311、用户空间库向应用程序通知数据移动操作完成。
[0066]综上,本发明上述实施例的方法,通过在用户空间库中增加数据移动API,从而使得应用程序可以通过调用该用户空间库中的API,向UAS控制器发送数据移动请求;UAS控制器在接收到数据移动请求之后,可以根据该请求中包含的源存储设备的源地址、目的存储设备的目的地址以及所需移动的数据大小,将所需移动的数据从源存储设备移动到目的存储设备,从而可以完成两个存储设备间的数据移动。因此,本发明实施例只需要开发用户空间库中的数据移动API,实现简便;而且,本发明实施例的数据移动过程,在用户态即可实现两个存储设备之间的直接的数据移动,而无需操作系统参与,无需进入内核态,从而可以节约系统开销。
[0067]图4为本发明UAS控制器实施例的结构示意图,如图4所示,本实施例的UAS控制器可以包括:接收模块41、数据移动模块42 ;
[0068]其中,接收模块41,用于接收用户空间库发送的数据移动请求,所述数据移动请求包括源存储设备的源地址、目的存储设备的目的地址以及所需移动的数据大小,所述数据移动请求为所述用户空间库接收到应用程序对所述用户空间库中的数据移动应用程序接口 API的调用请求时发送的;数据移动模块42,用于根据所述源地址、目的地址以及数据大小,将待移动数据从所述源存储设备移动到目的存储设备。
[0069]可选的,接收模块41,具体用于:
[0070]接收用户空间库发送的寄存器写请求,所述寄存器写请求包括源存储设备的源地址、目的存储设备的目的地址以及所需移动的数据大小;
[0071]将所述源地址、目的地址以及数据大小写入寄存器;
[0072]相应的,数据移动模块42,具体用于:
[0073]从所述寄存器中读取所述源地址、目的地址以及数据大小,并根据所述源地址、目的地址以及数据大小,将待移动数据从所述源存储设备移动到目的存储设备。
[0074]或者,接收模块41,具体用于:
[0075]接收用户空间库发送的数据移动操作指令,所述数据移动操作指令包括源存储设备的源地址、目的存储设备的目的地址以及所需移动的数据大小。
[0076]进一步的,数据移动模块42,还用于:
[0077]向寄存器中写入移动操作完成信息,以使所述用户空间库在接收到所述应用程序对所述用户空间库中的检查API的调用请求时读取所述移动操作完成信息并向所述应用程序通知数据移动操作完成。
[0078]另外,数据移动模块42,具体用于:
[0079]将所述源地址转换为源物理地址,并将所述目的地址转换为目的物理地址;
[0080]确定从所述源物理地址开始的所述数据大小的数据块为待移动数据;
[0081]将所述待移动数据从所述源物理地址移动到所述目的物理地址。
[0082]在具体实现时,若所述源物理地址为一个源存储设备的物理地址,且所述目的物理地址为一个目的存储设备的物理地址,则:
[0083]数据移动模块42,具体用于:
[0084]从所述源存储设备读取所述待移动数据,并根据所述目的物理地址将读取的所述待移动数据写入所述目的存储设备中;
[0085]或者,
[0086]从所述源存储设备读取所述待移动数据,并将读取的所述待移动数据缓存到所述UAS控制器的缓存空间中;从所述缓存空间中读取所述待移动数据,并根据所述目的物理地址将读取的所述待移动数据写入所述目的存储设备中。
[0087]或者,若所述源物理地址为一个源存储设备的物理地址,且所述目的物理地址包含至少两个目的存储设备的物理地址;或者,若所述源物理地址包含至少两个源存储设备的物理地址,且所述目的物理地址为一个目的存储设备的物理地址;或者,若所述源物理地址包含至少两个源存储设备的物理地址,且所述目的物理地址包含至少两个目的存储设备的物理地址,则:
[0088]数据移动模块42,具体用于:
[0089]将移动操作拆分为一个源存储设备对应一个目的存储设备的移动子操作;
[0090]针对每个移动子操作,从所述源存储设备读取所述待移动数据,并根据所述目的物理地址将读取的所述待移动数据写入所述目的存储设备中;或者,从源存储设备读取所述待移动数据,并将读取的所述待移动数据缓存到所述UAS控制器的缓存空间中,从所述缓存空间中读取所述待移动数据,并根据所述目的物理地址将读取的所述待移动数据写入目的存储设备中。
[0091]或者,若所述源物理地址包含一个源存储设备中的至少两个非连续的物理地址,所述目的物理地址为一个目的存储设备中的连续物理地址;或者,所述源物理地址为一个源存储设备中的连续物理地址,所述目的物理地址包含一个目的存储设备中的至少两个非连续的物理地址;或者,所述源物理地址包含一个源存储设备中的至少两个非连续的物理地址,所述目的物理地址包含一个目的存储设备中的至少两个非连续的物理地址,则:
[0092]数据移动模块42,具体用于:
[0093]将移动操作拆分为所述源物理地址中的每一个物理地址对应所述目的物理地址中的每一个物理地址的移动子操作;
[0094]针对每个移动子操作,从所述源存储设备读取对应物理地址的待移动数据,并根据对应目的物理地址将读取的所述待移动数据写入所述目的存储设备中;或者,从源存储设备读取对应物理地址的待移动数据,并将读取的待移动数据缓存到所述UAS控制器的缓存空间中,从所述缓存空间中读取待移动数据,并根据对应目的物理地址将读取的所述待移动数据写入目的存储设备中。
[0095]更进一步的,若所述目的存储设备是以数据块粒度存储的设备,则数据移动模块42,具体用于:
[0096]根据所述数据块粒度大小,对所述待移动数据进行数据块划分;
[0097]若划分得到的数据块均为所述数据块粒度大小,则将划分得到的各个数据块写入目的存储设备;
[0098]若划分得到的数据块包括N个数据块粒度大小的数据块和1个小于数据块粒度大小的数据块,则将划分得到的所述N个数据块写入目的存储设备,并将所述1个小于数据块粒度大小的数据块填充为满足数据块粒度大小的数据块并写入目的存储设备。
[0099]另外,数据移动模块42,还用于:
[0100]确定所述源物理地址和目的物理地址是否超出可操作的地址范围;
[0101]若超出,则向所述用户空间库发送地址越界报告;
[0102]若未超出,则执行确定从所述源物理地址开始的所述数据大小的数据块为待移动数据的步骤。
[0103]另外,数据移动请求中还包括数据有效标志位,所述数据有效标志位用于表示是否保留源地址上的数据;
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1