存储设备以及在该存储设备中创建链表的方法

文档序号:6371877阅读:179来源:国知局
专利名称:存储设备以及在该存储设备中创建链表的方法
技术领域
本发明涉及固态存储设备(Solid Storage Device, SSD),更具体地,本发明涉及将在固态存储设备中创建链表的方法及装置。
背景技术
同机械式硬盘相类似,固态存储设备(SSD)也是用于计算机系统的大容量、非易失性存储设备。固态存储设备一般以闪存(Flash)作为存储介质。在中国专利文献CN102043689A中公开了如图13所示的固态存储设备。如图13所示,为目前一般的固态存储设备的功能框图。其中主要包括主机系统1301和固态存储设备1302。其中,固态存储设备1302包括接ロ模块1303,固态存储处理器1304,以及以Flash颗粒1305为单位组成的Flash阵列1306。其中,接ロ模块1303主要用于实现与主机系统一致的接ロ协议,例如SATA (Serial Advanc ed Technology Attachment,串行高级技术附件)、USB (UniversalSerial Bus,通用串行总线)、PCIE (Peripheral Component Interconnect Express,快速外围组件互连)、SCSI (Small Compu ter System Interface,小型计算机系统接ロ)、IDE(Integrated Drive Electronics,集成驱动器电子)等。通过接ロ模块1303,固态存储设备呈现给主机系统的是一个拥有一定逻辑空间的标准存储设备。固态存储处理器1304是整个存储设备的控制核心,主要负责接ロ模块1303以及闪存阵列1306之间的控制信号及数据的传输、Flash管理、主机逻辑地址到Flash物理地址的转换或映射、损耗均衡(将逻辑地址映射到不同的物理地址从而防止单个Flash被过于集中地操作而提前失效)、坏块管理等。可由软件、硬件、固件或者其组合的多种方式实现固态存储处理器1304。1305为单个Flash颗粒,多个Flash颗粒1305组成Flash阵列1306。为提高固态存储设备的读、写速度,可以在固态存储设备中设置诸如DRAM或SRAM的随机访问存储器或其他类型的适于高速读/写操作的存储器,作为同闪存读写数据时的高速缓冲存储器。在存储设备访问过程中,作为ー个例子,计算机向存储设备发出SCSI (小型计算机系统接ロ)命令,存储设备接收并处理SCSI命令,依据SCSI命令所指示的操作执行相应的存储介质读写过程。在这ー过程中,SCSI命令并不直接操作高速缓冲存储器。gp,高速缓冲存储器对计算机或者用户是“透明”的。也有ー些存储设备提供了高速缓冲存储器的“清洗”机制,计算机或用户可使用预定的命令強制存储设备将高速缓冲存储器中的数据写入到非易失性存储介质(例如,磁盘或者闪存)中。然而,对高速缓冲存储器的分配和管理将成为固态存储设备上的控制器的工作负担。而且当高速缓冲存储器被完全占用后,如果固态存储设备接收到来自主机系统的新的访问请求,则还需要执行对高速缓冲存储器的替换操作。这样既増加了控制器的复杂度,又会让主机经历在读/写性能上的颠簸。在主机与设备之间还可以进行DMA (Direct Memory Access,直接存储器访问)传输。在中国专利文献CN101221544A中公开了执行DMA传输的方法和设备。DMA传输的ー个典型过程是分散/收集(Scatter/Gather)操作。分散/收集操作中,待传输的多个数据块存储在系统(主机)存储器的不连续的多个地址位置。处理器不需要为要从某一源移动到某一目的地的每个数据块对DMA控制器进行编程的操作。而是,处理器在系统存储器中建立描述符表或描述符链接表。描述符表或描述符链接表中包括ー组描述符。姆个描述符都描述了数据块移动方向、源地址、目的地地址以及可选的传输的字节数。在一个描述符中不包括传输字节数的情况下,可通过DMA方式传输约定长度的数据。

发明内容
因而,分担存储设备上的控制器的工作负担是有益的。通过将与存储设备的缓冲存储器有关的维护工作转移给主机,既减轻了存储设备的控制器的负载,也向主机提供了更灵活控制存储设备的能力。在本发明的一个实施例中,提供了ー种在与信息处理设备通信的存储设备的存储空间中创建链表的方法,其中所述信息处理设备中包括多个存储単元,每个存储单元至少具有空闲和被占用两种状态,所述信息处理设备中的多个存储単元同所述存储设备的存储空间相关联,所述方法包括 从所述信息处理设备的空闲状态的存储单元中申请第一存储单元和第二存储单元;向所述存储设备发送第一用于存储空间的地址和第二用于存储空间的地址,所述第一用于存储空间的地址同所述第一存储单元相对应,所述第二用于存储空间的地址同所述第二存储单元相对应;在所述存储设备的存储空间中基于所述第一用于存储空间的地址获得第三存储単元,基于所述第二用于存储空间的地址获得第四存储单元,在所述第四存储单元中记录所述第三存储单元的地址,使得所述第三存储单元和所述第四存储单元形成第一链表。在本发明的前述实施例中,还包括所述信息处理设备从从所述信息处理设备的空闲状态的存储单元中申请第五存储单元;向所述存储设备发送第三用于存储空间的地址,所述第三用于存储空间的地址同所述第五存储单元相对应,在所述设备的存储空间中基于所述第三用于存储空间的地址获得第六存储单元,在所述第六存储单元中记录所述第四存储单元的地址或所述第三存储单元的地址,使得所述第三存储单元、所述第四存储单元和所述第六存储单元形成第一链表。根据本发明的前述实施例,其中所述信息处理设备申请第一、第二或第五存储单元后,将第一、第二或第五存储单元设置为被占用状态。在本发明的第二实施例中,提供了 ー种在与信息处理设备通信的存储设备的存储空间中创建链表的方法,所述存储设备包括缓冲存储器,所述方法包括从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单兀;从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据同所述第一 DMA描述符命令相关联,并包括第二用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址;使得所述第一存储单元和所述第二存储单元形成第一链表。本发明的第二实施例,进ー步包括从所述信息处理设备接收第二 DMA描述符命据,所述第二 DMA描述符数据同所述第一 DMA描述符命令相关联,并包括第三用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元或所述第二存储单元的地址;使得所述第一存储单元、所述第二存储单元和所述第二存储单元形成第一链表。 在本发明的第三实施例中,提供了ー种由与信息处理设备通信的存储设备执行的方法,所述存储设备包括缓冲存储器,所述方法包括从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于缓冲存储器的地址以及长度信息;在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息;从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据包括第ニ用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址;基于所述第一 DMA描述符数据,以DMA传输方式从所述信息处理设备将第一数据写入到所述第二存储单元;基于第二存储单元中记录的所述第一存储单元的地址,访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。根据本发明的第三实施例,还包括从所述信息处理设备接收第二 DMA描述符数据,所述第二 DMA描述符数据包括第三用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元;在所述第三存储单元中记录所述第一存储单元的地址;基于所述第二 DMA描述符数据,以DMA传输方式从所述信息处理设备将第二数据写入到所述第三存储单元;并基于第三存储单元中记录的所述第一存储单元的地址,访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。根据本发明的第三实施例,其中所述存储设备还包括闪存芯片,将第一数据写入到所述第二存储单元之后,还将所述第二存储单元中的所述第一数据写入到所述闪存芯片。在本发明的第四实施例中提供了ー种由与信息处理设备通信的存储设备执行的方法,所述存储设备包括缓冲存储器,所述方法包括从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于所述闪存存储器的地址、第一用于所述缓冲存储器的地址以及长度信息;
在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息;从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据包括第一用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址以及第一用于所述信息处理设备的地址;生成第一DMA微指令,所述第一 DMA微指令包括所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址;基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址,获得第一用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第一数据写入到所述第二存储单元中;
基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址,将所述第二存储单元中的第一数据写入到所述闪存芯片中,并基于所述第二用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。根据本发明的第四实施例,还包括接收来自所述信息处理设备的第二 DMA描述符数据,所述第二 DMA描述符数据中包括第二用于所述信息处理设备的地址和第三用于所述缓冲存储器的地址,在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元的地址以及第ニ用于所述信息处理设备的地址;生成第二DMA微指令,所述第二 DMA微指令包括所述第三用于所述缓冲存储器的地址以及第ニ用于所述闪存存储器的地址,所述第二用于所述闪存存储器的地址同所述第一用于闪存存储器的地址相差预定偏移值;基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址,获得第二用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第二数据写入到所述第三存储单元中;基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址以及第二用于所述闪存存储器的地址,将所述第三存储单元中的第二数据写入到所述闪存芯片中,并基于所述第三用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。根据本发明的第三、第四实施例,当确定DMA操作完成时,向所述信息处理设备发送消息。本发明的第五实施例提供了 ー种存储设备,所述存储设备可与信息处理设备通信,所述存储设备包括缓冲存储器、DMA指令分析器、DMA写控制器、闪存接ロ控制器以及闪存芯片;所述DMA指令分析器接收来自所述信息处理设备的第一 DMA描述符命令和第一DMA描述符数据,所述第一 DMA描述符命令包括第一用于所述闪存存储器的地址、第一用于所述缓冲存储器的地址以及长度信息,所述第一 DMA描述符数据包括第一用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址以及第一用于所述信息处理设备的地址;生成第一 DMA微指令,所述第一 DMA微指令包括所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址;所述DMA写控制器,基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址,获得第一用于所述信息处理设备的地址,并在所迷信息处理设备和所述存储设备之间发起DMA传输,以将第一数据写入到所述第二存储单元中;所述闪存接ロ控制器,基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址,将所述第二存储单元中的第一数据写入到所述闪存芯片中,并基于所述第二用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。根据本发明的第五实施例,其中, 所述DMA指令分析器还接收来自所述信息处理设备的第二 DMA描述符数据,所述第二 DMA描述符数据中包括第二用于所述信息处理设备的地址和第三用于所述缓冲存储器的地址,在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元的地址以及第ニ用于所述信息处理设备的地址;生成第二 DMA微指令,所述第二 DMA微指令包括所述第三用于缓冲存储器的地址以及第ニ用于所述闪存存储器的地址,所述第二用于所述闪存存储器的地址同所述第一用于闪存存储器的地址相差预定偏移值;所述DMA写控制器,基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址,获得第二用于所述信息处理设备的地址,并在所迷信息处理设备和所述存储设备之间发起DMA传输,以将第二数据写入到所述第三存储单元中;所述闪存接ロ控制器,基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址以及第ニ用于所述闪存存储器的地址,将所述第三存储单元中的第二数据写入到所述闪存芯片中,并基于所述第三用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。


当连同附图阅读时,通过參考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进ー步的目的和优点,其中附图包括图I是根据本发明实施例的存储设备的结构框图;图2A、2B是根据本发明实施例的写入命令的示意图;图3是根据本发明实施例的存储设备执行写入命令的方法的流程图;图4是根据本发明实施例的主机的示意图;图5是根据本发明实施例的主机执行写入操作的流程图;图6是根据本发明实施例的第二写入命令的示意图;图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图;图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的硬件方框图;图8是根据本发明实施例的主机的软件方框图;图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图;图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图;图IOA是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;图IOB是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;图IOC是根据本发明的ー实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图; 图11A-11F展示出了与图10B、图IOC相关联的缓冲存储器的多种状态;图12是根据本发明的又一实施例的存储设备的硬件方框图;图13是根据现有技术的存储设备的硬件方框图。
具体实施例方式图I是根据本发明实施例的存储设备的结构框图。如图I所示的实施例包括主机101以及同主机101相耦合的存储设备102。主机101同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道、无线通信网络等连接主机101与存储设备102。主机101可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交換机、路由器、蜂窝电话、个人数字助理等。存储设备102包括主机接ロ 103、控制电路104、一个或多个闪存芯片105以及缓冲存储器106。主机接ロ 103可适配于通过例如SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道等方式与主机101交换数据。控制电路104用于控制在主机接ロ 103、闪存芯片105以及缓冲存储器106之间的数据传输,还用于闪存管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制电路104。控制电路104可以是FPGA (Field-programmable gate array,现场可编程门阵列)、ASIC (Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制电路104也可以包括处理器或者控制器。根据本发明的一个实施例,主机101向存储设备102发出读出命令或者写入命令。控制电路104经由主机接ロ 103接收到该读出命令或写入命令。在附图2中详细描述了作为例子的第一写入命令200。參看图2A、2B,图2A是根据本发明实施例的写入命令的示意图。写入命令200包括字段201、202、203和204。字段201指示该命令为写入命令,字段202为闪存地址,字段203为数据,该写入命令200指示存储设备102将数据字段203中的数据基于由字段202所指示的闪存地址写入闪存芯片105。字段204为缓冲存储器地址,存储设备102接收到该写入命令200时,先将数据字段203中的数据基于写入由字段204所指示缓冲存储器地址写入缓冲存储器106,再将数据字段203中的数据基于由字段202所指示的闪存地址写入闪存芯片105。在一个例子中,存储设备102将数据字段203中的数据基于写入由字段204所指示缓冲存储器地址写入缓冲存储器106后,再从缓冲存储器106中读出该数据,继而将该数据写入到闪存芯片105。将数据写入到缓冲存储器106的操作,同将存储器106中的另ー数据读出并写入到闪存芯片105的操作可以并发执行,从而使得主机101向存储设备102的写入操作的并发性能得到提升,并且不会显著增加控制电路104的复杂度,因为控制电路104无需处理缓冲存储器106的空间分配任务。在一个实施例中,字段204中可以是缓冲存储器106的完整地址,而在另一个实施例中,字段204是相对某一基地址的偏移值。在一个实施例中,字段203中携帯要写入闪存105的数据。而在另一个实施例中,字段203中可携帯一个指针,该指针指向要写入存储设备102的数据,而该数据可以存储在主机101的存储器中,在此情况下,存储设备102通过随后的DMA传输过程从主机101获得该数据。在依然另ー个实施例中,字段203可携帯一个指针,该指针指向要写入存储设备102的数据,而该数据可以存储在存储设备102的缓冲存储器中。字段202可以是要将数据写入的闪存芯片105的物理地址或逻辑地址。字段202也可以是ー个指针,指向缓冲存储器106,在其中存储有用于闪存芯片105的物理地址或逻辑地址。逻辑地址到物理地址的转换过程,可以通过查找地址映射表的方式实现。
所属领域技术人员将容易意识到,写入命令可以具有多种具体编码方式和字段顺序。例如,參看图2B,指示写入命令210的类型是写操作的字段214可以在写入命令210的末尾或者其他位置。而在字段211中携带缓冲存储器地址,在字段212中携帯数据或指向数据的存放位置的指针。在字段213中存放闪存地址,或者指向存放闪存地址的指针,闪存地址可以是逻辑地址或物理地址。图3是根据本发明实施例的存储设备执行写入命令的方法的流程图。在步骤301,存储设备102从主机101接收到写入命令200。存储设备102的控制电路104通过主机接ロ103接收到写入命令200后,提取出包含于写入命令200中的用于指示操作类型为写操作的字段201,用于指示要写入的闪存的地址的字段202,用于指示要写入的数据的字段203,以及用于指示缓冲存储器106的地址的字段204。在步骤302,响应于该写入命令200,控制电路104基于字段204得到用于缓冲存储器106的地址,并基于字段203得到要写入的数据,以及将要写入的数据写入到缓冲存储器106中由字段204所指示的位置。当将数据写入到缓冲存储器106中后,存储设备102可向主机发送消息以指示写入命令200的执行完成,虽然数据此时尚未被实际写入到闪存芯片105之中。以此方式,在主机101看来,在步骤302执行完成后,写入命令200已经执行完成,从而提升了存储设备102的执行写入命令200的性能。向主机发送的消息可以包含于存储设备102向主机101所发送的中断请求之中,也可以基于主机101与存储设备102之间的耦合方式(SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道、无线通信网络等)而选择适当的其他消息发送方式。在将要写入的数据写入到缓冲存储器106之后,在控制电路104的控制下,将由字段203所指示的要写入的数据,基于由字段202所指示的闪存地址,写入到闪存芯片105中(步骤303)。当将数据写入到闪存芯片105中后,存储设备102也可向主机发送消息以指示写入命令200的执行完成,特别地,此时主机可以在写入命令200中再次指定将数据写入该用于指示缓冲存储器106的地址,而不会因对该地址处的数据的重写而导致数据错误。在一个例子中,如果字段202所指示的是用于闪存芯片105的逻辑地址,则将该逻辑地址转换为用于闪存芯片105的物理地址。逻辑地址到物理地址的转换方式是所属领域技术人员所了解的。在一个例子中,在步骤303,从缓冲存储器106中重新取得所写入的数据,并将该数据写入到闪存芯片105。所属领域技术人员将意识到,在控制电路104的控制下,步骤302中将数据写入到缓冲存储器106的操作,与步骤303中将数据写入到闪存存储器105的操作,可以并行执行。这样,在存储设备102中可以同时处理多个写入命令,其中,在ー个时刻,基于ー个写入命令,控制电路104将第一数据写入到缓冲存储器106中;而基于另ー个写入命令,控制电路104将存在于缓冲存储器106中的第二数据写入到闪存芯片105中。缓冲存储器106可以是双端ロ存储器,使得在经由第一端ロ向缓冲存储器106写入第一数据的同时,可以从第二端ロ从缓冲存储器106读出第二数据。所属领域技术人员可意识到缓冲存储器106的其他实施方式,以支持对多份数据的同时读出和/或写入操作。通过在写入命令中携帯用于指示缓冲存储器106的地址的字段204,将维护缓冲存储器106的工作从控制电路104移除了,并且使主机101拥有了更灵活控制存储设备102的能力。图4是根据本发明实施例的主机的示意图。图4是示出了主机400的软件组成的方框图。主机400可以是个人计算机、服务器计算机或者其他具有计算能力的设备。主机400包括一个或多个用户应用程序401、402和403,以及操作系统404。操作系统404中具 有存储设备驱动程序405。在根据本发明的实施例中,驱动程序405中包括缓冲区控制块406,用以在主机400中控制存储设备102的缓冲存储器106。缓冲区控制块406由多个存
储单元(411、412......41n)组成,缓冲区控制块406中的每个存储单元(411、412......41n)
对应于缓冲存储器106中的一个存储単元,并记录缓冲存储器106中的对应存储单元的エ
作状态。在一个实施例中,缓冲区控制块406中的存储单元(411、412......41n)的每ー个,
记录缓冲存储器106中的对应存储单元是空闲的还是已经被占用。在进ー步的一个实施例中,在发送给存储设备102的ー个读/写命令中涉及缓冲存储器中的多个存储単元,例如2个。在此情况下,将缓冲区控制块406中的2个存储单元(411、412)关联在一起,在存储单元411、412中还记录存储单元411与412之间的这种关联关系,例如,在存储单元411中记录指向存储单元412的ー个或多个指针。在依然进ー步的实施例中,在存储单元412中还记录指向存储单元411的ー个或多个指针。图5是根据本发明实施例的主机执行写入操作的流程图。当用户应用程序或者其他程序请求执行将数据写入到存储设备的操作时,应用程序或其他程序会发送写请求。图4中的存储设备驱动程序405接收该写请求(步骤501),该写请求中包括应用程序或其他程序所提供的要写入的数据已经用于存储设备的地址,用于存储设备的地址可以是文件路径及偏移值,并进一歩被转换为用于存储设备的逻辑地址。在一个例子中,该逻辑地址是用于存储设备上的闪存芯片的逻辑地址,该写请求要将数据基于该逻辑地址写入到闪存芯片中。在步骤502,存储设备驱动程序405为该写请求分配空闲的缓冲存储器。具体地,遍历缓冲区控制块406,找到其中为空闲状态的存储单元,例如,存储单元411。存储单元411为空闲状态,表示在存储设备102的缓冲存储器106中的对应存储单元为空闲状态,可以接收写入的数据。在步骤503中,存储设备驱动程序405向存储设备102发送写命令,在写命令中包括要写入的数据以及用于存储设备102的地址,在该写命令中还包括同存储单元411相对应的用于缓冲存储器106的地址。所属领域技术人员将意识到,有多种方式获得存储单元411与缓冲存储器106中的对应存储单元的对应关系。例如,缓冲区控制块406中有n个存储单元(411、412……41n),而缓冲存储器106中也包括n个存储单元,存储单元411对应于缓冲存储器10 6中的第一个存储単元,而存储単元412对应于缓冲存储器106中的第二个存储单元,以及类似地,存储单元41n对应于缓冲存储器106中的第n个存储単元,使得基于存储单元411在缓冲区控制块406中的位置可计算出缓冲存储器106中的对应存储单元的地址。依然作为ー个例子,还可以在存储单元(411、412……412)中存储缓冲存储器106中的对应存储单元的地址。在依然另ー个例子中,在写命令中携帯ー个序号,该序号既指示存储单元411在缓冲区控制块406中的位置,又指示在缓冲存储器106中的对应存储单元的位置。在步骤504,接收到来自存储设备102的消息。在一个例子中,该消息是中断请求,该中断请求指示在步骤503中发送的写命令已经执行完毕。如前面所述的,在一个例子中,存储设备102中的控制电路104在将写命令中的数据写入到缓冲存储器106 (特别地,写入到缓冲存储器106中与缓冲区控制块406的存储单元411相对应的存储单元)之后,存储设备即发送中断,指示该写命令执行完成。在一个例子中,控制电路104将数据写入到闪存芯片105之后,存储设备102向主机101发送中断。在一个例子中,该中断请求中还包括指示步骤503中发送的写命令相关的缓冲区控制块406的存储单元的信息。该信息可以是ー个
或多个存储单元(411、412......41n)的地址,ー个或多个存储单元(411、412......41n)的序号。在步骤505,响应于在步骤504中接收到的该中断请求,并基于该中断请求中所指示的与该写命令相关的缓冲区控制块406的存储单元的信息,释放与该写命令相关的缓冲
区控制块406的存储单元(411、412......41n)。释放存储单元(411、412......41n)具体可以
是在存储单元(411、412……41n)中设置缓冲存储器106中的对应存储单元是空闲状态。在一个例子中,步骤503中的写命令涉及缓冲区控制块406的两个存储单元411与412,并且,存储单元411与412中分别记录了指向彼此的指针,以表示这两个存储单元411,412关联于同一个写命令。在步骤504中接收到的中断请求中,既可以指示存储单元411也可以指示存储单元412。在步骤505中,基于指示存储单元411与412之一的指针,可获得两个存储単元411与412,并将其释放。类似地,所属领域技术人员可意识到以此方式还可以在写命令中关联三个或更多的存储单元(411、412……41n)。图6是根据本发明实施例的第二写入命令的示意图。第二写入命令指示存储设备102以DMA方式从主机101获得数据并写入到闪存芯片105中。第二写入命令可以是DMA描述符600。DMA描述符600包括DMA命令610以及ー个或多个DMA数据(620、630)。DMA命令610包括字段611,用于指示DMA方式,即该DMA描述符600指示的操作,其可以为闪存读、写、擦除或者其他操作。字段612指示存储设备的逻辑地址。字段613指示该DMA描述符600的长度,即该DMA描述符600所包括的DMA数据(620、630)的个数,其可以为I个或多个。字段614指示缓冲存储器106的地址。DMA数据620、630分别包括字段621、631,用于指示DMA传输中的主机地址。DMA数据620、630还分别包括字段622、632,用于指示缓冲存储器106的地址。DMA命令610中的字段612的存储设备的逻辑地址可用于DMA数据620、630。在DMA描述符600中仅包括ー个DMA数据620的情况下,存储设备102根据字段621指示的主机地址和字段622指示的缓冲存储器地址,在主机101和存储设备102之间发起DMA传输,并最终将接收到的数据存储到由字段612所指示的闪存芯片105中。在DMA描述符600包括DMA数据620与630的情况下,存储设备102将根据DMA数据620而执行DMA传输所得的数据,最终存储在由字段612所指示的闪存芯片105中,而存储设备102还将根据DMA数据630而执行DMA传输所得的数据,最終存储在由字段612加上一预定偏移值所指示的闪存芯片105中。换句话说,DMA描述符600可以指示在主机101和存储设备102之间的多次DMA传输,每次DMA传输同DMA数据620、630中的一个相对应,每次DMA传输中传输相同数量的数据(例如4K字节),并且DMA数据620与DMA数据630所对应的DMA传输的存储设备的逻辑地址是连续的(例如,相距预定的偏移值,该偏移值可以与DMA传输的数据量相对应)。这样,可以在DMA描述符600中仅携带一个存储设备逻辑地址(字段612)。而DMA数据620与DMA数据630所对应的DMA传输的两个DMA主机地址(字段621、631)可以是不连续的,这样可以支持分散-收集(Scatter-Gather)方式的DMA传输。在对应于DMA数据620的DMA传输中,将来自字段621所指示的DMA主机地址的数据,写入到字段622所指示的缓冲存储器106中,继而再写入到闪存芯片105中。在对应于DMA数据630的DMA传输中,将来自字段631所指示的DMA主机地址的数据,写入到字段632所指示的缓冲存储器106中,继而再写入到闪存芯片105中。 字段614是可选的。在字段614所对应的缓冲存储器地址处,作为ー个例子,可保存字段613所指示的DMA描述符600的长度。从而可以记录DMA多个数据620、630所对应的DMA传输有多少已经得到执行,或者有多少尚未被执行。对于DMA描述符600,当其全部DMA数据620、630所对应的DMA传输均已执行完毕后,例如,所对应的数据均写入到闪存芯片105中后,存储设备102向主机101发送中断,以指示对DMA描述符600的执行完成。这样,对于DMA描述符600,虽然其对应于2次DMA传输过程,但仅向主机101发送一次中断。減少中断请求次数,将有助于降低主机101的工作负荷。图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图。第二写入命令可以是如图6所示的描述符600。參看图7A,在步骤701,存储设备102接收DMA描述符600。在DMA描述符600中包括用于主机的地址(例如,DMA主机地址621、631),用于闪存芯片105的地址(例如,存储设备逻辑地址612)以及用于缓冲存储器106的地址(例如,缓冲存储器地址622、632)。虽然在图6中的DMA描述符600包括DMA命令610、DMA数据620、630,但这仅是为了清楚表达的目的。DMA命令610、DMA数据620、630也可以组合在一起。存储设备102从DMA描述符600中提取出用于主机的地址,用于闪存芯片105的地址以及用于缓冲存储器106的地址。在步骤702,存储设备102基于用于主机的地址和用于缓冲存储器的地址,以DMA传输方式从主机101将数据写入到缓冲存储器106。在步骤703,基于用于闪存存储器的地址和用于缓冲存储器,将在步骤702中写入到缓冲存储器中的数据,写入到闪存芯片105。在一个例子中,在步骤702,将数据写入到缓冲存储器106之后,向主机101发送中断,以指示对DMA传输的执行完成。如果DMA描述符600中仅包括这一次DMA传输(例如,DMA描述600仅包括DMA命令610与DMA数据620),则该中断也表示对DMA描述符600的执行完成。在一个例子中,在步骤703,将数据写入到闪存芯片105之后,向主机101发送中断,以指示对DMA传输的执行完成。參看图7B,其示出了对包含多个DMA数据(620、630)的DMA描述符600的更详细的处理过程。在步骤711,存储设备102接收DMA描述符600,DMA描述符600包括DMA命令610、DMA数据620以及DMA数据630。在步骤712,基于DMA描述符600,将DMA数据620变换为第一 DMA微指令,将DMA数据630变换为第二 DMA微指令。第一 DMA微指令中包括DMA主机地址621和缓冲存储器地址622。基于第一 DMA微指令,还可以获得与其对应的存储设备的逻辑地址612、DMA操作类型以及DMA描述符长度613。该存储设备的逻辑地址612和DMA操作类型可以是第一DMA微指令的一部分,也可以是存储在缓冲存储器106中,并通过在第一 DMA微指令中的索引来访问,还可以通过将第一 DMA微指令放置在特定的操作队列(读、写、擦除、其他)中,以标识第一 DMA微指令的操作类型。作为依然另ー个例子,对于第一 DMA微指令,根据缓冲存储器地址622与ー预定的偏移值得到存储在缓冲存储器106中的指针,基于该指针,获得存储设备的逻辑地址612和/或DMA描述符长度613。通过类似的方式,对于第二 DMA微指令,根据缓冲存储器地址632与一预定偏移值得到存储在缓冲存储器106中的指针,基于该指针,获得存储设备的逻辑地址612和/或DMA描述符长度613。 在优选的实施例中,基于缓冲存储器地址614,将DMA描述符长度613存储在缓冲存储器106中,其中DMA描述符长度等同于DMA描述符600中的DMA数据的个数(或者DMA描述符600中的DMA命令与DMA数据的总计个数,从中可以得到DMA数据的个数),并通过在第一 DMA微指令中的索引来访问DMA描述符长度613。这样,第一 DMA微指令与第二 DMA微指令的执行顺序变得不重要。每执行ー个DMA微指令,将缓冲存储器106中的DMA描述符长度递减(例如,减I或减去单位长度),当缓冲存储器106中的DMA描述符长度变为0吋,表示对该DMA描述符600的所有DMA操作全都执行完成。在步骤713,对于第一 DMA微指令,基于DMA主机地址621和缓冲存储器地址622,以DMA传输方式将数据写入到相应缓冲存储器106中。在步骤714,对于第二 DMA微指令,基于DMA主机地址631和缓冲存储器地址632,以DMA传输方式将相应数据写入到缓冲存储器106中。在步骤715,向主机发送中断,以指示对DMA描述符600的操作完成。在一个例子中,步骤713,还包括将同第一 DMA微指令相对应的写入到缓冲存储器106中的数据,基于存储设备逻辑地址612,写入到闪存芯片105中。步骤714还包括将同第二 DMA微指令相对应的写入到缓冲存储器106中的数据,基于存储设备逻辑地址612加上预定偏移值的和,写入到闪存芯片105中。在优选的实施例中,在步骤713、714中,将相应数据写入到缓冲存储器106中之后,还基于在第一、第二微指令中的索引,访问存储在缓冲存储器中的DMA描述符长度613,并将DMA描述符长度613递减(例如,减I或减去单位长度)。这样,当该DMA描述符长度613变为0时,意味着对DMA描述符600的操作完成。以此方式,可以在存储设备102中同时处理多个DMA描述符600,并且第一 DMA微指令与第二 DMA微指令的执行顺序也是不重要的。还可以采用其他方式来识别DMA描述符600中的多个DMA数据均被执行。例如,在缓冲存储器或寄存器中为每个DMA描述符600的每个DMA数据提供标志,每当ー个DMA数据(DMA微指令)被执行后,将相应的标志置位。还可以顺序执行DMA描述符600中的每个DMA数据(DMA微指令),当最后ー个DMA数据(DMA微指令)被执行后,意味着对该DMA描述符600的执行完成。在依然另ー个实施例中,当DMA描述符600中的每ー个DMA微指令被执行后,向主机101发送中断,并由主机驱动程序来分析对DMA描述符600的执行是否已完成。分析方法同上面所描述的存储设备102中识别DMA描述符600中的多个DMA数据是否均被执行的过程相类似。图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的硬件方框图。图7C中,主机101包括PCIE控制器721和主机存储器722。主机存储器722可以是随机访问存储器(RAM),PCIE控制器721用于同存储设备经由PCIE总线进行通信。存储设备102中包括PCIE接ロ 731、DMA指令分析器732、微指令FIFO (先进先出缓冲器)733、DMA写操作控制器734、DMA写接ロ 735、逻辑地址到物理地址转换电路736、Flash接ロ控制器737、闪存芯片105以及缓冲存储器106。PCIE接ロ 731接收主机101通过PCIE控制器721发送的DMA描述符600。主机 101与存储设备102之间的连接不限于PCIE方式,还可以通过SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道等连接主机101与存储设备102。DMA指令分析器732将PCIE接ロ 731接收到的DMA描述符600变换为DMA微指令。对于如图6所示的DMA描述符600,其中包括DMA数据620和DMA数据630,则DMA指令分析器将其变换为对应于DMA数据620的第一 DMA微指令和对应于第二 DMA数据630的第二 DMA微指令。第一 DMA微指令与第二 DMA微指令的结构已在上文中详细介绍。DMA指令分析器732还从DMA描述符600的DMA命令610中提取出DMA描述符长度,并对其加以保存,可以保存在缓冲存储器106、一个寄存器或者类似物中。DMA描述符长度指示了 DMA描述符600所包括的DMA数据的数量,也指示了从该DMA描述符600所得到的DMA微指令的个数。DMA指令分析器732将第一 DMA微指令与第二 DMA微指令存储在微指令FIFO 733中。微指令FIFO 733能够缓存DMA微指令,并按照先进先出的方式向DMA写操作控制器734提供DMA微指令。虽然这里仅以写操作为例,描述了将与DMA写操作对应的DMA微指令缓存在微指令FIF0733中,所属领域技术人员将意识到可以将与DMA读操作对应的DMA微指令同与DMA写操作对应的DMA微指令混合缓存在微指令FIF0733。还可以将微指令FIF0733配置为两部分或多个部分,其中一部分专用于存储与DMA读操作对应的DMA微指令,而将另一部分专用于存储与DMA写操作对应的DMA微指令。对于与DMA写操作对应的DMA微指令,例如,前面所提到的第一 DMA微指令与第二DMA微指令,DMA写操作控制器734基于这些DMA微指令来执行DMA写操作。如同前面所提到的,第一 DMA微指令中包括,DMA主机地址621和缓冲存储器地址622。DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接ロ 735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。对于第二 DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。从第一 DMA微指令和第二 DMA微指令可获得用于各自的存储设备的逻辑地址。在逻辑地址到物理地址转换电路736,为每条DMA微指令的存储设备的逻辑地址转换为用于闪存芯片105的物理地址。对于每一条DMA微指令,Flash接ロ控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。Flash接ロ控制器737还基于在第一、第二微指令中的索引,访问所保存的从DMA描述符600的DMA命令610中提取出DMA描述符长度,并将DMA描述符递减(例如,减I或减去单位长度)。这样,当该DMA描述符长度变为0吋,意味着对DMA描述符600的操作完成。继而,可向主机发送中断,以指示对DMA描述符600的操作完成。在一个例子中,DMA写操作控制器也访问所保存的DMA描述符长度,并确定是否已将与DMA描述符600相对应的所有数据均写入到缓冲存储器106中,井向主机发送指示所有数据已写入到缓冲存储器106的中断。图8是根据本发明实施例的主机的软件方框图。图8是示出了主机800的软件的方框图,其同图4中展示的主机的软件方框图相类似。不同之处在干,图8中的缓冲区控制块406中还包括IO请求链表801。IO请求链表801是利用缓冲区控制块406中的存储单元(411,412……41n)组成的链表。IO请求链表801可以是单向链表、双向链表或循环链表。 在生成如图6所不的DMA描述符600时,对于一个DMA描述符600,创建一个与之相对应的IO请求链表801,其中包括分别与DMA命令610、DMA数据620、DMA数据630分别相对应的存储单元(811、812、813)。需要指出的是,存储单元(811、812、813)是缓冲区控制块406的存储单元(411、412……41n)中的三个存储単元,并通过设置相应的指针,形成IO请求链表
801。在图8中,将存储单元(811、812、813)与存储单元(411、412......41n)分开展示,仅仅
是为了清楚地描述的需要。图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图。在ー个实施例中,步骤901,由主机的存储设备驱动程序405接收IO请求。该IO请求指示将分散在主机存储器的不同物理地址的多个数据块写入到存储设备102中,为此将在主机与存储设备之间执行分散-收集DMA操作。下面将以举例的方式描述主机向存储器写入数据的操作过程。在步骤902,结合图8,从缓冲区控制块406中取出一个空闲状态的存储单元,例如存储单元411。在步骤904,根据IO请求的内容,创建DMA描述符600的DMA命令610,填充DMA命令610中的DMA方式字段611 (在该例子中,是写操作)、存储设备逻辑地址字段612 (从IO请求中可获得该信息)、DMA描述符长度字段613 (从IO请求中可获得该信息)以及缓冲存储器地址字段614 (与步骤902中所分配的存储单元411相对应)。继而将所创建的DMA命令610发送给存储设备102。并将存储单元411作为用于该IO请求的IO请求链表801的起始节点(例如存储单元811)。创建IO请求链表801,用于在存储设备102执行完DMA描述符600之后,将所占用的存储单元归还给缓冲区控制块406,并就该IO请求的执行完成通知应用软件或其他上层软件。为此目的,在一个例子中,还在存储单元411中存储对应于该IO请求的指针。基于DMA描述符长度,还可获得DMA数据部分的剩余长度。在生成第一个DMA数据之前,DMA数据部分的剩余长度是DMA描述符600中的DMA数据(620、630)的个数,作为ー个例子,其为DMA描述符长度减I。在步骤906,从缓冲区控制块406中取出一个空闲状态的存储单元,例如,存储单元412。根据IO请求的内容,创建DMA描述符600的DMA数据620,填充DMA数据620中的DMA主机地址字段621 (从IO请求中可获得该信息)以及缓冲存储器地址622 (与所分配的存储单元412相对应,例如,存储单元412在缓冲区控制块406中的偏移值或序号)。继而将所创建的DMA数据620发送给存储设备102。并将存储单元412作为用于该IO请求的IO请求链表801的节点(例如存储单元812)。在步骤908,将DMA数据部分剩余长度递减,得到DMA描述符600中尚未发送给存储设备的DMA数据的个数。在步骤909,如果DMA数据部分的剩余长度为0,则表示DMA描述符600的生成已经完成,进而在步骤910存储设备驱动程序405将等待存储设备102返回的表示DMA描述符600的处理已经完成的中断,并依据该中断找到与之对应的IO请求链表801,以及将IO请求链表801中的存储单元(811、812)释放。换句话说,将由IO请求链表801中的存储单 元(811、812)的状态设置为空闲,从而使得通过缓冲区控制块406可以获知存储单元411、412的状态为空闲。在一个例子中,在DMA描述符600指示读操作,且主机101的CPU包括高速缓冲存储器的情况下,还通知同DMA描述符600的DMA主机地址(621、631)相关联的CPU高速缓冲存储器执行一致性处理,以反映出DMA主机地址(621、631)处的数据可能因读DMA读操作而发生变化。在一个例子中,存储设备102返回的中断中包括指示IO请求链表801中的多个存储单元(811、812)之一(或者缓冲存储器地址622、632之一)的内容,依据该内容,通过IO请求链表801将存储单元(811、812)释放。在步骤909,如果DMA数据部分的剩余长度大于0,则表示DMA描述符600的生成尚未完成,还需要为IO请求生成ー个或多个DMA数据,那么处理将返回到步骤906并重复执行步骤906、908和909。图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图。在该实施例中,将缓冲区控制块406中的空闲存储单元进一步组织为空闲存储单元池,以有助于DMA描述符600的创建过程。通过将缓冲区控制块406中状态为空闲的存储单元(411、412……41n)组织成链表来形成空闲存储单元池。当需要从缓冲区控制块406中获得空闲存储单元时,可以从空闲存储単元池中取出存储单元,从而省去了在缓冲区控制块406中查找空闲存储単元的开销。在一个实施例中,步骤921,由主机的存储设备驱动程序405接收IO请求。同图9A相类似,该IO请求指示将分散在主机存储器的不同物理地址的多个数据块写入到存储设备102中,为此将在主机与存储设备之间执行分散-收集DMA操作。在步骤922,根据IO请求的内容,计算出用于与相同该IO请求相对应的DMA描述符的长度(例如,DMA命令以及DMA数据的个数)。注意到在图9A公开的实施例中,是在步骤904创建DMA命令610的过程中获得DMA描述符长度,所属领域技术人员将意识到各个步骤并非必然以本实施例中所公开的顺序执行。在步骤923,判断空闲存储単元池中是否为空。如果空闲存储单元池非空,即缓冲区控制块406中存在处于空闲状态的存储单元,则进行到步骤924,并从空闲存储单元池中取出一个空闲存储单元(例如存储单元411)。如果空闲存储单元池为空,意味着缓冲区控制块406中没有空闲的存储单元。则在步骤925,等待空闲存储单元池被更新,以出现空闲的存储单元。当DMA描述符的执行完成后,与之相关的存储单元会被释放,从而在空闲存储单元池中出现空闲的存储单元。后面对此会详细介绍。
在步骤926,确定当前要生成用于DMA描述符600的DMA命令字段还是DMA数据字段。一般而言,DMA描述符600包括ー个DMA命令和ー个或多个DMA数据。当要生成DMA命令时,处理转向步骤927,并根据IO请求的内容,创建DMA描述符600的DMA命令610,填充DMA命令610中的各个字段(611、612、613、614)。在一个例子中,还在存储单元411中存储对应于该IO请求的指针,以便在该IO请求的执行完成后,可识别该IO请求并通知应用软件或其他上层软件。当要生成DMA数据时,处理转向步骤928,并根据IO请求的内容,创建DMA描述符600的DMA数据620,填充DMA数据620的各个字段(621、622)。接下来,在步骤929,将所生成的DMA命令或DMA数据发送给存储设备102。并在步骤930,将在步骤924中获得的存储单元411设置在IO请求链表801中。作为ー个例子,第一个进入到IO请求链表801的存储单元,将作为IO请求链表801的头节点,但是,也将意识到当IO请求链表801被组织为环形链表时,其中并不存在“头节点”。在步骤930,还 将DMA描述符长度递减。在步骤931,如果DMA描述符长度为0,意味着DMA描述符600的生成已经完成,进而在步骤932存储设备驱动程序405将等待存储设备102返回的表示DMA描述符600的处理已经完成的中断,并依据该中断找到与之对应的IO请求链表801,以及将IO请求链表801中的存储单元(811、812)释放。换句话说,将由IO请求链表801中的存储单元(811、812)的状态设置为空闲,从而使得通过缓冲区控制块406可以获知存储单元411、412的状态为空闲,并将存储单元411、412放入空闲存储单元池中。在一个例子中,存储设备102返回的中断中包括指示IO请求链表801中的多个存储単元(811、812)之一的内容,依据该内容,通过IO请求链表801将存储单元(811、812)释放。在步骤931,如果DMA描述符长度大于0,则表示DMA描述符600的生成尚未完成,还需要为IO请求生成ー个或多个DMA数据,那么处理将返回到步骤923并重复执行步骤923-931。上面结合图9A、9B描述了 DMA描述符600的生成过程。DMA描述符600用于在分散-收集DMA中描述要执行的多个DMA操作,该多个DMA操作的数据来源于存储在连续或不联系的存储空间中。所属领域技术人员将容易意识到,DMA描述符600的生成方式包括但不限于上面图9A、9B中描述的具体方式。图IOA是根据本发明的实施例的在存储设备的缓冲存储器中创建链表的流程图。在如图7A-7C所公开的存储设备处理DMA描述符600的过程中,将DMA描述符600转换为ー个或多个微指令。在进ー步的实施例中,为了有效处理ー个或多个微指令之间的关联关系(例如,这些微指令均同DMA描述符600相关联),存储设备102响应于主机101所传输的DMA描述符600,还在缓冲存储器106中建立链表,该链表将对应于同一 DMA描述符600的多个微指令关联起来。如图IOA所示,在步骤1002,主机101向存储设备102发送DMA描述符600。DMA描述符600包括DMA命令610与DMA数据620、630。前面已经结合图9A与图9B而描述了主机101向存储设备102发送DMA描述符600的过程的例子。还应当意识到,在存储设备的缓冲存储器中创建链表,将有助于存储设备对IO操作的执行,特别是对多个IO操作的并发/乱序执行,多个IO操作可通过访问各自的链表而关联在一起。这样不具备关联关系的IO操作可以在存储设备中并发执行。因而,还可以响应除DMA命令之外的其他类型的IO命令或其他命令,以在存储设备中创建链表。在步骤1004,判断所接收到的是DMA命令610还是DMA数据620、630。如果接收到DMA命令610,在步骤1006,从其中的缓冲存储器地址字段610中提取出用于该DMA命令610的缓冲存储器地址,并基于该缓冲存储器地址,为该DMA命令610在缓冲存储器106中分配存储空间。接下来,在步骤1008,保存为该DMA命令610所分配的缓冲存储器地址,用来在为DMA数据620、630分配缓冲存储器地址时使用。如果在步骤1004判断出所接收到的是DMA数据620,则在步骤1010,从DMA数据620的缓冲存储器地址字段622从提取出用于该DMA数据620的缓冲存储器地址,并基于 该缓冲存储器地址,为该DMA数据620在缓冲存储器106中分配存储空间。并在步骤1012中,在为该DMA数据620所分配的缓冲存储器的存储空间中,存储在步骤1008中保存的DMA命令610的缓冲存储器地址。这样,在缓冲存储器106中,为DMA命令610和DMA数据620所分配的存储空间形成了链表,其中为DMA命令610所分配的存储空间是链表的头节点,为DMA数据620所分配的存储空间连接到链表的头节点。在DMA描述符600还包括DMA数据630的情况下,通过步骤1010和步骤1012,基于DMA数据630中的缓冲存储器地址632为DMA数据630在缓冲存储器106中分配存储空间,并在为DMA数据630所分配的缓冲存储器的存储空间中,保存DMA命令610的缓冲存储器地址。所属领域技术人员将意识到,也可以在为DMA数据630所分配的缓冲存储器106的存储空间中,保存用于DMA数据620的缓冲存储器地址,从而形成不同类型的链表。在其他例子中,将缓冲存储器106中为DMA命令610、DMA数据620、630所分配的存储空间创建为循环链表或双向链表。上面结合图7A、7B、7C已经描述了存储设备102基于DMA数据(620、630)生成DMA微指令,并保存在微指令FIFO 733中。DMA数据(620、630)生成DMA微指令的操作可以发生于步骤1012之后,并在DMA微指令中携带为DMA数据(620、630)所分配的缓冲存储器地址。图IOB是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图。同图IOA所提供的实施例相比,图IOB的实施例中,还将与DMA描述符的处理或执行相关的信息存储在所创建的链表中。图IOC是根据本发明的ー实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。图11A-11F展示出了与图IOB与图IOC相关联的缓冲存储器的多种状态。在图11A-11F中,1100指示缓冲存储器106中的存储空间。具体地,在步骤1020,主机101向存储设备102发送DMA描述符600。在步骤1022,判断所接收到的是DMA命令610还是DMA数据620、630。如果接收到DMA命令610,在步骤1024,从缓冲存储器地址字段610中提取出缓冲存储器地址,并基于该缓冲存储器地址,为该DMA命令610在缓冲存储器106中分配存储空间。參看图11A,为DMA命令610分配存储空间1101。以及还从DMA命令610中提取出DMA描述符长度字段613,从DMA描述符长度613可以得到该DMA描述符600的DMA数据部分的长度(例如,DMA描述符长度减I)。接下来,在步骤1026,保存为该DMA命令610所分配的缓冲存储器地址,用来在为DMA数据620、630分配缓冲地址时使用。并且,将DMA数据部分的长度记录在为该DMA命令610所分配的缓冲存储器中。參看图11A,在存储空间1101中保存了 DMA数据部分的长度(在这个例子中,DMA数据部分的长度为2)。
如果在步骤1022判断出所接收到的是DMA数据620,则在步骤1028,从DMA数据620的缓冲存储器地址字段622从提取出用于该DMA数据620的缓冲存储器地址,并基于该缓冲 存储器地址,为该DMA数据620在缓冲存储器106中分配存储空间。參看图11B,为DMA数据620分配存储空间1112。并在步骤1030中,在为该DMA数据620所分配的缓冲存储器的存储空间1112中,存储在步骤1026中保存的DMA命令610的缓冲存储器地址。这样,在缓冲存储器106中,为DMA命令610和DMA数据620所分配的存储空间(1101与1112)形成了链表,其中为DMA命令610所分配的存储空间1101是链表的头节点,为DMA数据620所分配的存储空间1112连接到链表的头节点。还在存储空间1112中存储同DMA数据620相对应的DMA主机地址。在DMA描述符600还包括DMA数据630的情况下,通过步骤1028和步骤1030,基于DMA数据630中的缓冲存储器地址632为DMA数据630在缓冲存储器106中分配存储空间1123 (參看图11C),并在存储空间1123中,保存DMA命令610的缓冲存储器地址。以及还在存储空间1123中存储同DMA数据630相对应的DMA主机地址。因而,在缓冲存储器106中形成了同DMA描述符600相对应的链表,其中存储空间1101是链表的头节点,存储空间1112和1123是链表的节点,并指向该链表的头节点。所属领域技术人员将意识到,也可以在为DMA数据630所分配的缓冲存储器106的存储空间1123中,保存用于DMA数据620的缓冲存储器地址,从而形成不同类型的链表。在其他例子中,将缓冲存储器106中为DMA命令610、DMA数据620、630所分配的存储空间创建为循环链表或双向链表。图IOC是根据本发明的ー实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。上面结合图7A、7B、7C已经描述了存储设备102基于DMA数据(620,630)生成DMA微指令,并保存在微指令FIFO 733中。在存储设备102对DMA微指令的执行中,在一个例子中,利用在缓冲存储器106中的链表。在DMA微指令中,包括缓冲存储器地址,通过该缓冲存储器地址,可以获得为同该DMA微指令相对应的DMA数据所分配的缓冲存储器106中的存储空间,进而可以获得与该DMA数据所对应的DMA主机地址以及与该DMA数据所对应的DMA描述符中的DMA数据部分长度或DMA数据的个数。在下面的描述中,将对应于DMA数据620的DMA微指令用第一 DMA微指令指示,将对应于DMA数据630的DMA微指令用第二 DMA微指令指示。在步骤1040,从微指令FIF0733中获得将第一 DMA微指令。在步骤1042,第一 DMA微指令中包括为DMA数据620所分配的缓冲存储器106的存储空间1112的地址,并从存储空间1112中获得DMA主机地址。该DMA主机地址是由DMA数据620中的DMA主机地址字段621所提供的。基于DMA主机地址,在主机101和存储设备102之间进行DMA传输,将主机101的该DMA主机地址处的预定长度(例如,4KB)的数据,以DMA方式传输到存储设备102的缓冲存储器中。对于第二 DMA微指令,执行类似的操作,将主机101的由DMA数据630的DMA主机地址字段632所提供的DMA主机地址处的数据,以DMA方式传输到存储设备102的缓冲存储器的为DMA数据632所分配的存储空间1123处。在图IID中,示出了执行完第一 DMA微指令与第二 DMA微指令后,存储了以DMA方式传输的数据的存储空间1112和存储空间1123。在步骤1044,继续对第一 DMA微指令加以执行。通过第一 DMA微指令中的存储空间1112的地址,从存储空间中取出预定长度的数据,该数据是在步骤1042中,通过DMA操作从主机101传输到缓冲存储器106的存储空间1112的。并通过闪存接ロ控制器(例如,图7C中的Flash接ロ控制器737)将该数据基于第一 DMA微指令中所包括的用于闪存存储器的地址,写入到闪存芯片105。该用于闪存存储器的地址是通过DMA命令610中的存储设备逻辑地址字段612所得到的。对第二 DMA微指令以类似的方式加以执行。通过第二 DMA微指令中包括的存储空间1123的地址,从存储空间中取出预定长度的数据,并将该数据通过闪存接ロ控制器,基于第二 DMA微指令中所包括的用于闪存存储器的地址,写入到闪存芯片105。第二 DMA微指令中所包括的用于闪存存储器的地址,是通过DMA命令610中的存储设备逻辑地址字段612加上预定值(例如对应于DMA传输的数据的长度,在该例子中,是4KB)所得到的。在一个例子中,将DMA命令610中的存储设备逻辑地址转换为存储设备的物理地址,并基于该物理地址将数据写入到闪存芯片105中。从存储设备的逻辑地址到物理地址的映射过程,是所属领域技术人员所熟知的。在步骤1046,继续对第一 DMA微指令加以执行。通过第一 DMA微指令中的存储空 间1112的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减I或者减去单位长度)。參看图11E,对于第一 DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由2变为I。并且,存储空间1112中不再保存存储空间1101的地址,用于表明对DMA数据620的执行已经完成。在步骤1048,由于DMA数据部分的长度不为0,意味着对DMA描述符600的操作尚未完成,因为其还包含另ー个DMA数据630,此时,不进行进ー步的处理。当第二 DMA微指令在步骤1046被执行时,通过第二 DMA微指令中的存储空间1123的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减I或者减去单位长度)。參看图11F,对于第二 DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由I变为O。并且,存储空间1123中不再保存存储空间1101的地址,用于表明对DMA数据630的执行已经完成。此时,当第二 DMA描述符在步骤1048被执行时,由于DMA数据部分的长度为0,意味着对DMA描述符600的执行已经完成。接下来,在步骤1050,向主机101发送中断,以指示对DMA描述600的执行已经完成。再次參看图11F,存储空间1112与1123均不再保存存储空间1101的地址。存储空间1101中的DMA数据部分长度的值为O。在此情况下,意味着对DMA描述符600的执行已经完成,对存储空间1101、1112与1123均不会再加以使用,这些存储空间可以被释放以用于对其他DMA描述符的执行。在一个例子中,由主机101控制对相应存储空间的释放和再利用,在上面已结合图9A与图9B对IO请求链表801中的存储空间的释放。由于缓冲区控制块406中的存储单元(411、412……41n)与缓冲存储器106中的存储空间相对应,因而对IO请求链表801中的存储空间的释放,意味着对缓冲存储器中的存储空间1101、1112与1123的释放。上面结合图10B、10C、11A_11F而描述了在缓冲存储器106中存储对应于第一与第ニ微指令的DMA主机地址的方案,从而使得DMA微指令中不必携带DMA主机地址而減少了对电路资源的占用,并通过缓冲存储器106将对应于同一 DMA描述符600的第一、第二 DMA微指令关联在一起的方案。所属领域技术人员将意识到,还可以将对应于第一与第二微指令的存储设备逻辑地址和/或DMA主机地址存储在缓冲存储器中,从而进一步减少DMA微指令的长度及其对电路资源的占用。图12是根据本发明的又一实施例的存储设备的硬件方框图。与图7C中公开的相似,主机101包括PCIE控制器721和主机存储器722。存储设备102中包括PCIE接ロ 731、DMA指令分析器732、微指令先进先出缓冲器(FIFO)733、DMA写操作控制器734、DMA写接ロ735、逻辑地址到物理地址转换电路736以及缓冲存储器106。存储设备102中还包括DMA读写微指令判断电路1210,DMA读接ロ 1212,闪存控制器1221、1222、1223,闪存接ロ 1231、1232、1233,完成控制电路1242、多路选择器1241以及多路共享器1243。闪存接ロ 1231、1232、1233耦合于闪存芯片105。PCIE接ロ 731接收主机101通过PCIE控制器721发送的DMA描述符600。主机101与存储设备102之间的连接不限于PCIE方式。DMA指令分析器732将PCIE接ロ 731 接收到的DMA描述符600变换为DMA微指令。对于如图6所示的DMA描述符600,则DMA指令分析器将其变换为对应于DMA数据620的第一 DMA微指令和对应于DMA数据630的第二DMA微指令。在一个例子中,第一与第二 DMA微指令中分别包括指示该微指令类型(读/写/擦除/其他)的字段、指示与其对应的缓冲存储器106中的存储单元的地址的字段、指示存储设备的逻辑地址的字段。參看图IOB与图11C,DMA指令分析器732还针对DMA命令610,在缓冲存储器106中分配存储单元,并在其中存储DMA数据部分的长度。DMA指令分析器还针对DMA数据620,在缓冲存储器106中分配存储单元,并在其中存储为DMA命令610所分配的存储单元的地址,以及存储DMA数据620中的DMA主机地址。DMA指令分析器还针对DMA数据630,在缓冲存储器106中分配存储单元,并在其中存储为DMA命令610所分配的存储单元的地址,以及存储DMA数据630中的DMA主机地址。DMA指令分析器732将第一 DMA微指令与第二 DMA微指令存储在微指令FIFO 733中。微指令FIFO 733能够缓存DMA微指令,并按照先进先出的方式向DMA读写微指令判断电路1210提供DMA微指令。在DMA读写微指令判断电路1210,判断所获得的DMA微指令的类型。对于与DMA写操作对应的DMA微指令,例如,前面所提到的第一 DMA微指令与第二 DMA微指令,DMA写操作控制器734基于这些DMA微指令来执行DMA写操作。DMA写操作控制器734利用第一DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得DMA主机地址,并通过DMA写接ロ 735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址中的数据,传输到与第一 DMA微指令相对应的缓冲存储器106的存储单元中,所传输的数据可以具有预定的长度(例如4K字节)。对于第二 DMA微指令,DMA写操作控制器734利用与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得DMA主机地址,并在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址中的数据,传输到与第二 DMA微指令相对应的缓冲存储器106的存储单元中。
从第一 DMA微指令和第二 DMA微指令的指示存储设备的逻辑地址的字段获得用于各自的存储设备的逻辑地址。在逻辑地址到物理地址转换电路736,将每条DMA微指令的存储设备的逻辑地址转换为用于闪存芯片105的物理地址。对于每一条DMA微指令,Flash控制器1221、1222、1223基于逻辑地址到物理地址转换电路736所提供的物理地址,通过闪存接ロ 1231、1232、1233将写入到缓冲存储器106的数据,写入到闪存芯片105中,其中,Flash控制器1221同闪存接ロ 1231相耦合,Flash控制器1222同闪存接ロ 1232相耦合,Flash控制器1223同 闪存接ロ 1233相耦合。而闪存接ロ 1231、1232、1233分别耦合到各自的闪存芯片。因而对于从DMA微指令中的存储设备的逻辑地址转换得到的用于闪存芯片105的物理地址,该物理地址指示了特定的闪存芯片,并且该闪存芯片与闪存接ロ 1231、1232、1233的特定一个相耦合。因而,基于该物理地址,可以确定使用闪存接ロ 1231、1232、1233中的哪ー个将数据写入闪存芯片,也可以确定使用Flash控制器1221、1222、1223中的哪ー个。闪存接ロ 1231、1232、1233还通过多路选择器1241与缓冲存储器相耦合。基于该物理地址,多路选择器1241将数据从缓冲存储器106传送给闪存接ロ 1231、1232、1233中的特定ー个。闪存接ロ 1231、1232、1233将数据写入到闪存芯片105中之后,完成控制电路1242还基于在第一、第二微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,访问缓冲存储器106,并进而访问缓冲存储器中为DMA命令610所分配的存储单元,从中获得DMA数据部分的长度,并将DMA数据部分的长度递减(例如,减I或减去单位长度)。这样,当为DMA命令610所分配的存储单元中的该DMA数据部分的长度变为0吋,意味着对DMA描述符600的操作完成。继而,可向主机发送中断,以指示对DMA描述符600的操作完成。虽然图12中以举例的方式展示了包括三个Flash控制器1221、1222、1223以及三个闪存接ロ 1231、1232、1233的实施例,所属领域技术人员将意识到可以使用多种不同数量的Flash控制器与闪存接ロ,以同闪存芯片的数量相适应。对于与DMA读操作对应的DMA微指令,DMA读写微指令判断电路1210将其直接传送给逻辑地址到物理地址转换电路736,并得到用于闪存芯片105的物理地址。Flash控制器1221、1222、1223基于该物理地址,通过闪存接ロ 1231、1232、1233将从闪存芯片105中读出数据。并基于DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得与该DMA微指令相对应的DMA主机地址,以及经由DMA读接ロ 1212在主机101与存储设备102之间发起DMA传输,将读出数据传输到主机101的主机RAM 722中由该DMA主机地址所指示的位置处。闪存接ロ 1231、1232、1233经由多路共享器1243与DMA读接ロ 1212相耦合,使得从闪存接ロ 1231、1232、1233获得的数据均可以通过DMA读接ロ 1212传输到主机RAM 722。当闪存接ロ 1231、1232、1233从闪存芯片105读出数据后,完成控制电路1242也基于在DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,访问缓冲存储器106,并进而获得DMA数据部分的长度,并将DMA数据部分的长度递减(例如,减I或减去单位长度)。这样,当该DMA数据部分的长度变为0吋,意味着对该DMA描述符的操作完成。继而,可向主机发送中断,以指示对该DMA描述符的操作完成。在图12所公开的存储设备中,可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每ー个,通过在缓冲存储器106中创建的链表,将与ー个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。上面已经详细描述了存储设备执行数据写入操作或与写操作相关的DMA描述符的执行。显然,存储设备执行读操作也可以从本发明公开中获益。例如,可以在读取命令中同时指定闪存芯片地址和缓冲存储器地址,并利用缓冲存储器作为读出数据的缓沖。也可以在与读操作相关的DMA描述符中描述缓冲存储器地址,在将数据从闪存芯片中读出后,可利用缓冲存储器作为读出数据的缓存。 已经为了示出和描述的目的而展现了对本发明的描述,并且不g在以所公开的形式穷尽或限制本发明。对所属领域技术人员,许多调整和变化是显而易见的。
权利要求
1.一种在与信息处理设备通信的存储设备的存储空间中创建链表的方法,其中所述信息处理设备中包括多个存储单元,每个存储单元至少具有空闲和被占用两种状态,所述信息处理设备中的多个存储单元同所述存储设备的存储空间相关联,所述方法包括 从所述信息处理设备的空闲状态的存储单元中申请第一存储单元和第二存储单元; 向所述存储设备发送第一用于存储空间的地址和第二用于存储空间的地址,所述第一用于存储空间的地址同所述第一存储单元相对应,所述第二用于存储空间的地址同所述第二存储单元相对应; 在所述存储设备的存储空间中基于所述第一用于存储空间的地址获得第三存储单元,基于所述第二用于存储空间的地址获得第四存储单元,在所述第四存储单元中记录所述第三存储单元的地址,使得所述第三存储单元和所述第四存储单元形成第一链表。
2.根据权利要求I所述的方法,还包括 所述信息处理设备从从所述信息处理设备的空闲状态的存储单元中申请第五存储单元; 向所述存储设备发送第三用于存储空间的地址,所述第三用于存储空间的地址同所述第五存储单元相对应, 在所述设备的存储空间中基于所述第三用于存储空间的地址获得第六存储单元,在所述第六存储单元中记录所述第四存储单元的地址或所述第三存储单元的地址,使得所述第三存储单元、所述第四存储单元和所述第六存储单元形成第一链表。
3.根据权利要求I或2所述的方法,其中所述信息处理设备申请第一、第二或第五存储单元后,将第一、第二或第五存储单元设置为被占用状态。
4.一种在与信息处理设备通信的存储设备的存储空间中创建链表的方法,所述存储设备包括缓冲存储器,所述方法包括 从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元; 从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据同所述第一DMA描述符命令相关联,并包括第二用于缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址;使得所述第一存储单元和所述第二存储单元形成第一链表。
5.根据权利要求4所述的方法,进一步包括 从所述信息处理设备接收第二 DMA描述符命据,所述第二 DMA描述符数据同所述第一DMA描述符命令相关联,并包括第三用于缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元或所述第二存储单元的地址;使得所述第一存储单元、所述第二存储单元和所述第二存储单元形成第一链表。
6.一种由与信息处理设备通信的存储设备执行的方法,所述存储设备包括缓冲存储器,所述方法包括从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于缓冲存储器的地址以及长度信息; 在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息; 从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据包括第二用于缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址; 基于所述第一 DMA描述符数据,以DMA传输方式从所述信息处理设备将第一数据写入到所述第二存储单元; 基于第二存储单元中记录的所述第一存储单元的地址,访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
7.根据权利要求6所述的方法,还包括 从所述信息处理设备接收第二 DMA描述符数据,所述第二 DMA描述符数据包括第三用于缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元;在所述第三存储单元中记录所述第一存储单元的地址; 基于所述第二 DMA描述符数据,以DMA传输方式从所述信息处理设备将第二数据写入到所述第三存储单元;并基于第三存储单元中记录的所述第一存储单元的地址,访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
8.根据权利要求6或7所述的方法,其中所述存储设备还包括闪存芯片,将第一数据写入到所述第二存储单元之后,还将所述第二存储单元中的所述第一数据写入到所述闪存芯片。
9.一种由与信息处理设备通信的存储设备执行的方法,所述存储设备包括缓冲存储器,所述方法包括 从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于所述闪存存储器的地址、第一用于所述缓冲存储器的地址以及长度信息; 在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息; 从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据包括第一用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址; 在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址以及第一用于所述信息处理设备的地址;生成第一DMA微指令,所述第一DMA微指令包括所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址; 基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址,获得第一用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第一数据写入到所述第二存储单元中; 基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址,将所述第二存储单元中的第一数据写入到所述闪存芯片中,并基于所述第二用于缓冲存储器的地址,获得所述第一存储单元的地址,并访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
10.根据权利要求9所述的方法,还包括 接收来自所述信息处理设备的第二 DMA描述符数据,所述第二 DMA描述符数据中包括第二用于所述信息处理设备的地址和第三用于所述缓冲存储器的地址,在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元的地址以及第二用于所述信息处理设备的地址;生成第二 DMA微指令,所述第二 DMA微指令包括所述第三用于所述缓冲存储器的地址以及第二用于所述闪存存储器的地址,所述第二用于所述闪存存储器的地址同所述第一用于闪存存储器的地址相差预定偏移值; 基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址,获得第二用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第二 数据写入到所述第三存储单元中; 基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址以及第二用于所述闪存存储器的地址,将所述第三存储单元中的第二数据写入到所述闪存芯片中,并基于所述第三用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
11.根据权利要求6-10之一所述的方法,当确定DMA操作完成时,向所述信息处理设备发送消息。
12.—种存储设备,所述存储设备可与信息处理设备通信,所述存储设备包括缓冲存储器、DMA指令分析器、DMA写控制器、闪存接口控制器以及闪存芯片; 所述DMA指令分析器接收来自所述信息处理设备的第一 DMA描述符命令和第一 DMA描述符数据,所述第一 DMA描述符命令包括第一用于所述闪存存储器的地址、第一用于所述缓冲存储器的地址以及长度信息,所述第一 DMA描述符数据包括第一用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址以及第一用于所述信息处理设备的地址;生成第一 DMA微指令,所述第一 DMA微指令包括所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址; 所述DMA写控制器,基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址,获得第一用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第一数据写入到所述第二存储单元中; 所述闪存接口控制器,基于所述第一 DMA微指令中的所述第二用于缓冲存储器的地址以及第一用于所述闪存存储器的地址,将所述第二存储单元中的第一数据写入到所述闪存芯片中,并基于所述第二用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
13.根据权利要求12所述的存储设备,其中,所述DMA指令分析器还接收来自所述信息处理设备的第二 DMA描述符数据,所述第二DMA描述符数据中包括第二用于所述信息处理设备的地址和第三用于所述缓冲存储器的地址,在所述存储设备的缓冲存储器中基于所述第三用于缓冲存储器的地址获得第三存储单元,在所述第三存储单元中记录所述第一存储单元的地址以及第二用于所述信息处理设备的地址;生成第二 DMA微指令,所述第二 DMA微指令包括所述第三用于缓冲存储器的地址以及第二用于所述闪存存储器的地址,所述第二用于所述闪存存储器的地址同所述第一用于闪存存储器的地址相差预定偏移值; 所述DMA写控制器,基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址, 获得第二用于所述信息处理设备的地址,并在所述信息处理设备和所述存储设备之间发起DMA传输,以将第二数据写入到所述第三存储单元中; 所述闪存接口控制器,基于所述第二 DMA微指令中的所述第三用于缓冲存储器的地址以及第二用于所述闪存存储器的地址,将所述第三存储单元中的第二数据写入到所述闪存芯片中,并基于所述第三用于缓冲存储器的地址,获得所述第一存储单元的地址,并进而访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。
全文摘要
一种在与信息处理设备通信的存储设备的存储空间中创建链表的方法,其中所述信息处理设备中包括多个存储单元,所述信息处理设备中的多个存储单元同所述存储设备的存储空间相关联,所述方法包括从所述信息处理设备的空闲状态的存储单元中申请第一存储单元和第二存储单元;向所述存储设备发送第一用于存储空间的地址和第二用于存储空间的地址,所述第一用于存储空间的地址同所述第一存储单元相对应,所述第二用于存储空间的地址同所述第二存储单元相对应;在所述存储设备的存储空间中基于所述第一用于存储空间的地址获得第三存储单元,基于所述第二用于存储空间的地址获得第四存储单元,在所述第四存储单元中记录所述第三存储单元的地址,使得所述第三存储单元和所述第四存储单元形成第一链表。
文档编号G06F13/38GK102819511SQ20121020782
公开日2012年12月12日 申请日期2012年6月18日 优先权日2012年5月12日
发明者殷雪冰, 路向峰 申请人:北京忆恒创源科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1