CN102799396B - 存储设备、中断控制方法以及供电时间测量方法 - Google Patents
存储设备、中断控制方法以及供电时间测量方法 Download PDFInfo
- Publication number
- CN102799396B CN102799396B CN201210254881.0A CN201210254881A CN102799396B CN 102799396 B CN102799396 B CN 102799396B CN 201210254881 A CN201210254881 A CN 201210254881A CN 102799396 B CN102799396 B CN 102799396B
- Authority
- CN
- China
- Prior art keywords
- dma
- data
- memory
- memory device
- buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
提供了存储设备、中断控制方法以及供电时间测量方法。该存储设备包括闪存存储器以及缓冲存储器。该方法包括:从信息处理设备接收要写入存储设备的数据;将所接收的要写入存储设备的数据写入所述缓冲存储器;将所述缓冲存储器中的数据取出并写入所述闪存存储器;其中,在将所接收的要写入存储设备的数据写入所述缓冲存储器后,若所述缓冲存储器中的数据量小于预定阈值,则向所述信息处理设备发送指示写操作完成的消息;所述方法还包括检测到所述信息处理设备的电源掉电而启动计时器,当所述信息处理设备的电源向所述存储设备提供的电压小于预定电压阈值时停止计时器,根据所述计时器的计时时间修改所述预定阈值。
Description
技术领域
本发明涉及固态存储设备(Solid Storage Device,SSD),更具体地,本发明涉及存储设备向主机发出的中断。
背景技术
同机械式硬盘相类似,固态存储设备(SSD)也是用于计算机系统的大容量、非易失性存储设备。固态存储设备一般以闪存(Flash)作为存储介质。在中国专利文献CN102043689A中公开了如图17所示的固态存储设备。如图17所示,为目前一般的固态存储设备的功能框图。其中主要包括主机系统1701和固态存储设备1702。其中,固态存储设备1702包括接口模块1703,固态存储处理器1704,以及以Flash颗粒1705为单位组成的Flash阵列1706。其中,接口模块1703主要用于实现与主机系统一致的接口协议,例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,快速外围组件互连)、SCSI(Small Computer System Interface,小型计算机系统接口)、IDE(Integrated Drive Electronics,集成驱动器电子)等。通过接口模块1703,固态存储设备呈现给主机系统的是一个拥有一定逻辑空间的标准存储设备。固态存储处理器1704是整个存储设备的控制核心,主要负责接口模块1703以及闪存阵列1706之间的控制信号及数据的传输、Flash管理、主机逻辑地址到Flash物理地址的转换或映射、损耗均衡(将逻辑地址映射到不同的物理地址从而防止单个Flash被过于集中地操作而提前失效)、坏块管理等。可由软件、硬件、固件或者其组合的多种方式实现固态存储处理器1704。1705为单个Flash颗粒,多个Flash颗粒1705组成Flash阵列1706。
为提高固态存储设备的读、写速度,可以在固态存储设备中设置诸如DRAM或SRAM的随机访问存储器或其他类型的适于高速读/写操作的存储器,作为向闪存写入数据或从闪存读写数据时的高速缓冲存储器。在存储设备访问过程中,作为一个例子,计算机向存储设备发出SCSI(小型计算机系统接口)命令,存储设备接收并处理SCSI命令,依据SCSI命令所指示的操作执行相应的存储介质读写过程。在这一过程中,SCSI命令并不直接操作高速缓冲存储器。即,高速缓冲存储器对计算机或者用户是“透明”的。也有一些存储设备提供了高速缓冲存储器的“清洗”机制,计算机或用户可使用预定的命令强制存储设备将高速缓冲存储器中的数据写入到非易失性存储介质(例如,磁盘或者闪存)中。
然而,对高速缓冲存储器的分配和管理将成为固态存储设备上的控制器的工作负担。而且当高速缓冲存储器被完全占用后,如果固态存储设备接收到来自主机系统的新的访问请求,则还需要执行对高速缓冲存储器的替换操作。这样既增加了控制器的复杂度,又会让主机经历在读/写性能上的颠簸。
在主机与设备之间还可以进行DMA(Direct Memory Access,直接存储器访问)传输。在中国专利文献CN101221544A中公开了执行DMA传输的方法和设备。DMA传输的一个典型过程是分散/收集(Scatter/Gather)操作。分散/收集操作中,待传输的多个数据块存储在系统(主机)存储器的不连续的多个地址位置。处理器不需要为要从某一源移动到某一目的地的每个数据块对DMA控制器进行编程的操作。而是,处理器在系统存储器中建立描述符表或描述符链接表。描述符表或描述符链接表中包括一组描述符。每个描述符都描述了数据块移动方向、源地址、目的地地址以及可选的传输的字节数。在一个描述符中不包括传输字节数的情况下,可通过DMA方式传输约定长度的数据。
中国专利文献CN101710252B中公开了避免存储设备意外断电时缓冲存储器中的数据丢失的方案。其中,在存储设备中提供备用电源,当发生意外断电时,由备用电源向存储设备提供临时的电能,用于将缓冲存储器(Cache)中的数据转存到闪存中。在美国专利文献US8031551B2公开了用电容作为存储设备的备用电源的方案,并在运行时检测电容的性能,在检测到电容容量过低时,对电容进行充电。
中国专利文献CN101483480A中公开了检测主板电压不存在时,产生报警信号以指示电源掉电。以及在中国专利文献CN101467212A中公开了基于电力来源的不同,存储设备选择不同的工作模式。
发明内容
然而,半导体技术发展的速度远超过作为备用电源的电容。作为备用电源的电容所提供的能量限制了可在存储设备中使用的缓冲存储器的大小。并且,计算机或者类似的信息处理设备的电源或供电电路在断电后,或者计算机向外围设备指示掉电事件后,其向外围设备提供的电力并非立刻完全停止。由于电源或主板等电路中诸如电容的储能元件的存在,在掉电后,储能元件中的电能将向外释放。然而,在现有技术中,这部分能量将被忽略。通过本发明的技术方案,将使得外围设备能够在检测到计算机掉电后,充分利用计算机或类似的信息处理设备中的剩余电路,延长外围设备的工作时间。并且,对这部分能量的利用还意味着提升了备用电源的容量,进而,可以在存储设备上使用更大的缓冲存储器或使用更大的缓冲存储器的存储空间。
在本发明的第一实施例中,提供了一种存储设备的中断控制方法,所述存储设备包括闪存存储器以及缓冲存储器,所述方法包括:
从信息处理设备接收要写入存储设备的数据;
将所接收的要写入存储设备的数据写入所述缓冲存储器;
将所述缓冲存储器中的数据取出并写入所述闪存存储器;
其中,在将所接收的要写入存储设备的数据写入所述缓冲存储器后,若所述缓冲存储器中的数据量小于预定阈值,则向所述信息处理设备发送指示写操作完成的消息;
所述方法还包括检测到所述信息处理设备的电源掉电而启动计时器,当所述信息处理设备的电源向所述存储设备提供的电压小于预定电压阈值时停止计时器,根据所述计时器的计时时间修改所述预定阈值。
根据本发明第一实施例的方法,还包括所述存储设备从所述信息处理设备接收唯一标识所述信息处理设备的第一标识符,若所述第一标识符与所述存储设备中存储的第二标识符相同,则根据所述计时器的计时时间修改所述预定阈值。
根据本发明第一实施例的方法,若所述第一标识符与所述存储设备中存储的第二标识符不同,则将所述预定阈值设置为默认值;以及在所述存储设备中存储所述第一标识符以替换所述第二标识符。
根据本发明第一实施例的方法,还包括存储所述计时器的计时时间。
根据本发明第一实施例的方法,其中在所述信息处理设备启动时,所述存储设备从所述信息处理设备接收唯一标识所述信息处理设备的第一标识符,若所述第一标识符与所述存储设备中存储的第二标识符相同,则根据所存储的所述计时器的计时时间修改所述预定阈值。
根据本发明第一实施例的方法,其中所述存储设备接收到将所述预定阈值设置为默认值的指示,将所述预定阈值设置为默认值,并清除所存储的所述计时器的计时时间。
根据本发明第一实施例的方法,还包括根据所述计时器的计时时间而确定所述预定阈值,并存储所述预定阈值。
根据本发明第一实施例的方法,其中在将所接收的要写入存储设备的数据写入所述缓冲存储器后,若所述缓冲存储器中的数据量不小于预定阈值,则不向所述信息处理设备发送指示写操作完成的消息。
根据本发明第一实施例的方法,其中所述预定阈值对应于利用所述存储设备的备用电源能够可靠地从所述缓冲存储器中取出并写入所述闪存存储器的数据量。
根据本发明的第二实施例,提供了一种存储设备的中断控制方法,所述存储设备包括闪存存储器以及缓冲存储器,所述方法包括:
从信息处理设备接收写入请求;
基于所述写入请求,将数据写入所述缓冲存储器,并使计数器递增;
将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;
其中,若所述计数器小于预定阈值,则向所述信息处理设备发送指示所述写入请求处理完成的消息;
所述方法还包括检测到所述信息处理设备的电源掉电而记录所述计数器的第一值,当所述信息处理设备的电源向所述存储设备提供的电压小于预定电压阈值时记录所述计数器的第二值,根据所述第一值与所述第二值的差而修改所述预定阈值。
根据本发明的第三实施例,提供了一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述控制电路还包括计数器以及中断控制器,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收写入请求;
所述控制电路基于所述写入请求,将数据写入所述缓冲存储器,并使所述计数器递增;
所述控制电路将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;
在所述计数器小于预定阈值的情况下,所述中断控制器向所述信息处理设备发送指示所述写入请求处理完成的消息;
所述控制电路确定所述信息处理设备的电源处于掉电状态时,启动定时器;所述控制电路确定所述信息处理设备的电源提供的电压小于预定电压阈值时,停止所述定时器,并根据所述计时器的计时时间修改所述预定阈值。
根据本发明的第四实施例,提供了一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述控制电路还包括计数器以及中断控制器,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收要写入存储设备的数据;
所述控制电路将所接收的要写入存储设备的数据写入所述缓冲存储器;
所述控制电路将所述缓冲存储器中的数据取出并写入所述闪存存储器;
在将所接收的要写入存储设备的数据写入所述缓冲存储器后,若所述缓冲存储器中的数据量小于预定阈值,则所述中断控制器向所述信息处理设备发送指示写操作完成的消息;
所述控制电路确定所述信息处理设备的电源处于掉电状态时,启动定时器;所述控制电路确定所述信息处理设备的电源提供的电压小于预定电压阈值时,停止所述定时器,并根据所述计时器的计时时间修改所述预定阈值。
根据本发明的第五实施例,提供了一种测量电源掉电后的供电时间的方法,包括:
响应于检测到所述电源掉电而启动定时器;
检测所述电源提供的电压,当所述电压小于预定电压阈值时,停止计时器;
存储所述计时器的计时时间作为所述电源掉电后的供电时间。
根据本发明的第五实施例的方法,还包括存储多次测量的电源掉电后的供电时间,并基于所述多次测量的电源掉电后的供电时间,得到估计的所述电源掉电后的供电时间。
附图说明
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1是根据本发明实施例的存储设备的结构框图;
图2A、2B是根据本发明实施例的写入命令的示意图;
图3是根据本发明实施例的存储设备执行写入命令的方法的流程图;
图4是根据本发明实施例的主机的示意图;
图5是根据本发明实施例的主机执行写入操作的流程图;
图6是根据本发明实施例的第二写入命令的示意图;
图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图;
图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的结构框图;
图8是根据本发明实施例的主机的软件方框图;
图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图;
图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图;
图10A是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;
图10B是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;
图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图;
图11A-11F展示出了与图10B、图10C相关联的缓冲存储器的多种状态;
图12是根据本发明的又一实施例的存储设备的结构框图;
图13是根据本发明又一实施例的存储设备的结构框图;
图14A是根据本发明的又一实施例的存储设备执行中断抑制的流程图;
图14B是根据本发明的又一实施例的存储设备执行中断抑制的流程图;
图15是根据本发明的又一实施例的存储设备执行中断抑制的流程图;
图16A是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;
图16B是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;
图16C是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;
图16D是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;
图17是根据现有技术的固态存储设备的结构框图;
图18A是根据本发明的一个实施例的外围设备的供电电路的原理图;
图18B是根据本发明的一个实施例的外围设备的供电电路的原理图;
图18C是根据本发明的一个实施例的外围设备的供电电路的原理图;
图19A、19B、19C、19D和19E分别示出了本发明的供电电路中的控制电路的实施例;
图20A是根据本发明的实施例确定缓冲区数据量阈值的方法的流程图;
图20B是根据本发明的另一实施例的确定缓冲区数据量阈值的方法的流程图;以及
图21是根据本发明的实施例的设置缓冲区数据量阈值的方法的流程图。
具体实施方式
图1是根据本发明实施例的存储设备的结构框图。如图1所示的实施例包括主机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对应于缓冲存储器106中的第一个存储单元,而存储单元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)的个数,其可以为1个或多个。字段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描述符长度递减(例如,减1或减去单位长度),当缓冲存储器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递减(例如,减1或减去单位长度)。这样,当该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微指令存储在微指令FIFO733中。
微指令FIFO733能够缓存DMA微指令,并按照先进先出的方式向DMA写操作控制器734提供DMA微指令。虽然这里仅以写操作为例,描述了将与DMA写操作对应的DMA微指令缓存在微指令FIFO733中,所属领域技术人员将意识到可以将与DMA读操作对应的DMA微指令同与DMA写操作对应的DMA微指令混合缓存在微指令FIFO733。还可以将微指令FIFO733配置为两部分或多个部分,其中一部分专用于存储与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描述符递减(例如,减1或减去单位长度)。这样,当该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描述符长度减1。
在步骤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中描述的具体方式。
图10A是根据本发明的实施例的在存储设备的缓冲存储器中创建链表的流程图。在如图7A-7C所公开的存储设备处理DMA描述符600的过程中,将DMA描述符600转换为一个或多个微指令。在进一步的实施例中,为了有效处理一个或多个微指令之间的关联关系(例如,这些微指令均同DMA描述符600相关联),存储设备102响应于主机101所传输的DMA描述符600,还在缓冲存储器106中建立链表,该链表将对应于同一DMA描述符600的多个微指令关联起来。
如图10A所示,在步骤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微指令,并保存在微指令FIFO733中。DMA数据(620、630)生成DMA微指令的操作可以发生于步骤1012之后,并在DMA微指令中携带为DMA数据(620、630)所分配的缓冲存储器地址。
图10B是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图。同图10A所提供的实施例相比,图10B的实施例中,还将与DMA描述符的处理或执行相关的信息存储在所创建的链表中。图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。图11A-11F展示出了与图10B与图10C相关联的缓冲存储器的多种状态。在图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描述符长度减1)。接下来,在步骤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所分配的存储空间创建为循环链表或双向链表。
图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。上面结合图7A、7B、7C已经描述了存储设备102基于DMA数据(620、630)生成DMA微指令,并保存在微指令FIFO733中。在存储设备102对DMA微指令的执行中,在一个例子中,利用在缓冲存储器106中的链表。在DMA微指令中,包括缓冲存储器地址,通过该缓冲存储器地址,可以获得为同该DMA微指令相对应的DMA数据所分配的缓冲存储器106中的存储空间,进而可以获得与该DMA数据所对应的DMA主机地址以及与该DMA数据所对应的DMA描述符中的DMA数据部分长度或DMA数据的个数。
在下面的描述中,将对应于DMA数据620的DMA微指令用第一DMA微指令指示,将对应于DMA数据630的DMA微指令用第二DMA微指令指示。
在步骤1040,从微指令FIFO733中获得将第一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处。在图11D中,示出了执行完第一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数据部分长度递减(例如,减1或者减去单位长度)。参看图11E,对于第一DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由2变为1。并且,存储空间1112中不再保存存储空间1101的地址,用于表明对DMA数据620的执行已经完成。在步骤1048,由于DMA数据部分的长度不为0,意味着对DMA描述符600的操作尚未完成,因为其还包含另一个DMA数据630,此时,不进行进一步的处理。
当第二DMA微指令在步骤1046被执行时,通过第二DMA微指令中的存储空间1123的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减1或者减去单位长度)。参看图11F,对于第二DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由1变为0。并且,存储空间1123中不再保存存储空间1101的地址,用于表明对DMA数据630的执行已经完成。
此时,当第二DMA描述符在步骤1048被执行时,由于DMA数据部分的长度为0,意味着对DMA描述符600的执行已经完成。接下来,在步骤1050,向主机101发送中断,以指示对DMA描述600的执行已经完成。
再次参看图11F,存储空间1112与1123均不再保存存储空间1101的地址。存储空间1101中的DMA数据部分长度的值为0。在此情况下,意味着对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中的存储单元的地址的字段、指示存储设备的逻辑地址的字段。
参看图10B与图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微指令存储在微指令FIFO733中。
微指令FIFO733能够缓存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数据部分的长度递减(例如,减1或减去单位长度)。这样,当为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的主机RAM722中由该DMA主机地址所指示的位置处。闪存接口1231、1232、1233经由多路共享器1243与DMA读接口1212相耦合,使得从闪存接口1231、1232、1233获得的数据均可以通过DMA读接口1212传输到主机RAM 722。当闪存接口1231、1232、1233从闪存芯片105读出数据后,完成控制电路1242也基于在DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,访问缓冲存储器106,并进而获得DMA数据部分的长度,并将DMA数据部分的长度递减(例如,减1或减去单位长度)。这样,当该DMA数据部分的长度变为0时,意味着对该DMA描述符的操作完成。继而,可向主机发送中断,以指示对该DMA描述符的操作完成。
在图12所公开的存储设备中,可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每一个,通过在缓冲存储器106中创建的链表,将与一个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。
上面已经详细描述了存储设备执行数据写入操作或与写操作相关的DMA描述符的执行。显然,存储设备执行读操作也可以从本发明公开中获益。例如,可以在读取命令中同时指定闪存芯片地址和缓冲存储器地址,并利用缓冲存储器作为读出数据的缓冲。也可以在与读操作相关的DMA描述符中描述缓冲存储器地址,在将数据从闪存芯片中读出后,可利用缓冲存储器作为读出数据的缓存。
图13是根据本发明又一实施例的存储设备的结构框图。图13中的存储设备同图1中的存储设备相似。其不同之处在于,其控制电路104中还包括中断控制电路1301。在进一步的实施例中,存储设备还包括备用电源1305。可以有多种方式提供备用电源1305,例如,超级电容、UPS、可充电电池等。前面已经描述了控制电路104基于图2A中的写入命令200将来自主机101的数据先写入缓冲存储器106,再写入闪存芯片105。并且,当基于命令200将数据写入缓冲存储器106之后,可向主机101发送消息或中断请求,以指示对命令200的写入操作已完成。虽然此时数据尚未被写入到闪存芯片105,但存储设备102可确保该数据将被可靠地写入到闪存芯片105。即使此时发生意外断电,备用电源1305也可提供电能将缓冲存储器106中的该数据写入到闪存芯片105。
由于备用电源1305的容量可能不足以支持缓冲存储器106中的全部数据写入到闪存芯片105,因而,中断控制电路1301还监控在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过一预定阈值,而使得备用电源1305的能量无法支持将该数据量写入到闪存芯片105时,中断控制电路1301将暂时地抑制向主机101发送消息或中断的活动。由于没有接收到来自存储设备102的消息或中断,主机101会意识到存储设备102对写入命令200的执行尚未完成,这意味着,如果此时发生掉电,存储设备102不保证对写入命令200的执行将完成,写入命令200中所携带的数据可能丢失。
当没有接到来自存储设备102的指示写入命令200的执行完成的消息或中断时,主机101可以认为存储设备102处于“忙”状态,而相应地暂时不向存储设备102发出进一步的写入命令。主机101也可以不等待指示写入命令200的执行完成的消息或中断,而并发或异步地向存储设备102发出其他写入命令。但主机101应当意识到,对于没有接收到指示执行完成的消息或中断的写入命令,其执行可能是没有完成的。还应当注意到的是,当主机101分配存储设备102的缓冲存储器106的情况下,指示写入命令200的执行完成的消息或中断并非意味着对缓冲存储器106的相应的存储单元的释放,因为缓冲存储器102的相应存储单元还有尚未被写入到闪存芯片105中的数据,这些存储单元依然处于被占用状态。
因而,通过中断控制电路1301检测缓冲存储器106中待写入闪存芯片105的数据量,暂时地不向主机101发送指示写入命令200的执行完成的消息或中断,确保了缓冲存储器106中的待写入闪存芯片105的数据量不会超过备用电源1305的能力。
在一个例子中,中断控制电路1301维护一个计数器。当控制电路104将数据写入缓冲存储器106时,计数器递增;而当控制电路104将缓冲存储器106中的数据取出并写入闪存芯片105时,计数器递减。从而,当该计数器的值超过预定阈值时,中断控制电路1301实施中断抑制。而随着控制电路104不断地取出缓冲存储器106中的数据并写入闪存芯片105,使得计数器递减到预定阈值之下时,中断控制电路1301恢复向主机101发送指示写入命令200操作完成的消息或中断。有多种类似方式可获得缓冲存储器106中待写入闪存芯片105的数据量,如提供缓冲队列,并监视队列深度。在一个例子中,控制电路104记录写入缓冲存储器106的数据量和写入闪存芯片105的数据量,而中断控制电路1301计算二者的差值得到在缓冲存储器106中缓存的待写入闪存芯片105的数据量。
预定阈值的大小可以预先设定。其与备用电源1305的电量、存储设备102的功耗等因素相关。对于特定的备用电源1305和存储设备102,可通过实验测定合适的预定阈值。以及出于可靠性的考虑,优选地在设定阈值时,提供一定的裕度。由于电容、电池的电量会随着时间而发生变化,还可以在运行时测量备用电源1305的电量或指示该电量的参数,如在美国专利文献US8031551B2中所提到的。并建立该参数与阈值的对应关系存储在存储设备102中,用于在运行时检测备用电源1305的参数,并调整阈值。还可以通过主机101向存储设备102设置该阈值。可提供专用的阈值设置命令,由主机101发出,由存储设备102接收。在阈值设置命令中可携带要设定的阈值,也可基于该阈值设置命令引起存储设备102检测备用电源1305的指示电量的参数,并进而改变阈值设定。结合图18-21,也提供了根据本发明实施例的改变阈值设定的方案。
在一个例子中,中断控制电路1301抑制向主机101发送消息或中断的活动通过缓存要向主机101发送的消息或中断而实现。具体地,中断控制电路1301可缓存用于向主机101标识写入命令200的标识符。可选地,可以缓存写入命令200本身。还可以缓存写入命令200所指示的缓冲存储器地址204,因为该缓冲存储器地址204可向主机101指示哪个或哪些存储单元应当被释放。并且,中断控制电路1301对消息或中断的抑制,并不依赖于写入命令200中携带的缓冲存储器地址204。对于写入命令中不包括缓冲存储器地址,而由存储设备102处理缓冲存储器106的分配的情况,也可实施消息或中断抑制。这种情况下,可以缓存写入命令本身或写入命令的标识符。
需要指出的是,即使中断控制电路1301抑制了向主机101发送消息或中断的活动,控制电路104依然将缓冲存储器106中的数据写入到闪存芯片105中。
在发生掉电的情况下,由中断控制电路1301所缓存的消息或中断被丢弃,与之相对应的尚未被写入到闪存芯片105的数据也被丢弃,而将缓冲存储器106中已经向主机101发送了指示执行完成的消息或中断的写入命令相对应的数据写入到闪存芯片105中。
还将注意到的是,当缓冲存储器106为空时,主机101可向存储设备102发出多个写入命令,并很快接收到指示写入命令完成的消息或中断。此时,主机101会体验到存储设备102具有很好的写入性能。当缓冲存储器106的空闲空间被耗尽,或由于中断控制电路1301实施了中断抑制,主机101会体验到存储设备102的写入性能迅速变差。这种性能上的颠簸是不利的,因为写入过程消耗的时间变得不可预测。
为减少颠簸,中断控制电路1301还监视一定时间期间内向主机101发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数过多,诸如超过了一定的阈值,则中断控制电路1301将抑制向主机101发送消息或中断的活动。这样,当存储设备102中的缓冲存储器106的空闲空间较多时,虽然存储设备102可以接受较多的并发的写入命令,但通过中断控制电路1301的中断抑制,而不会向主机发出过多的消息或中断。这里的实施监视的时间周期是可以由用户设置的,并且可以在运行时动态调整,而相应的阈值也是可以由用户设置的,并且可以在运行时动态调整。
还将指出的是,为减少颠簸而实施的消息或中断抑制与为同备用电源的电量相适应而实施的消息或中断抑制,可以单独实施,也可以组合实施。前面已经描述了单独实施为减少颠簸而实施的消息或中断抑制以及为同备用电源的电量相适应而实施的消息或中断抑制的例子。在组合实施的例子中,中断控制电路1301检测在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过第一预定阈值时,中断控制电路1301产生第一中断抑制信号。而中断控制电路1301还监视一定时间期间内向主机101实际发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数超过了一定的第二阈值,中断控制电路1301产生第二中断抑制信号。若第一中断抑制信号或第二中断抑制信号中的任何一者有效,则中断控制电路1301实施消息或中断抑制,例如,中断控制电路1301暂时地不向主机101发送消息或中断,而是将其缓存起来。进一步地,随着中断抑制的实施以及随着缓冲存储器106中的数据被写入闪存芯片105,在缓冲存储器106中尚未写入闪存芯片105中的数据量将小于第一阈值,从而第一中断抑制信号将变为无效;而随着中断抑制的实施以及随着时间的流逝,在一定时间期间内发出的消息或中断次数将小于第二阈值,从而第二中断抑制信号将变为无效。当第一中断抑制信号与第二中断抑制二者均变为无效后,中断控制电路1301将可以将缓存的或新产生的消息或中断发送给主机101。
图14A与14B根据本发明的又一实施例的存储设备执行中断抑制的流程图。为同备用电源的电量相适应而实施消息或中断抑制。在步骤1402,存储设备102接收到来自主机101的要写入存储设备的数据。在一个例子中,该数据包含于写入命令200中。在其他例子中,该数据可通过DMA方式从主机101传输到存储设备102。在步骤1404,控制电路104将该数据写入到缓冲存储器106,并将计数器递增。计数器的值指示在缓冲存储器106中尚未被写入到闪存芯片105中的数据量。对于具有固定数据量的写入命令,对计数器的递增可以是增加单位数量,例如1。对于具有可变数据量的写入命令,对计数器的递增可以是增加与数据量相对应的数值。前面已经公开了,当将数据写入到缓冲存储器106之后,中断控制电路1301可向主机101发送消息或中断,以指示对写入命令的执行完成。而为实施中断抑制,在步骤1406,中断控制电路1301判断计数器是否小于预定阈值。如果计数器的值小于预定阈值,则执行步骤1408,中断控制电路1301向主机发送指示写入命令已经处理完成的消息或中断。在步骤1406,若中断控制电路1301发现计数器大于预定阈值,则不向主机101发送指示写入命令已执行完成的消息或中断。中断控制电路1301可通过对消息或中断的缓存来实施消息或中断抑制。
继续参看图14B,其展示了与图14A所展示的方法流程图并发的另一部分方法的流程图。当缓冲存储器106中具有尚未写入闪存芯片105的数据时,控制电路104从缓冲存储器106中读出数据,步骤1410。并且,在步骤1412,控制电路104还将读出的数据写入到闪存芯片105,并且将计数器递减。计数器的递减可以是单位数量或与数据量相对应的数值。步骤1410与1412的执行是与步骤1402、1404、1406、1408的执行并行的。因而,在步骤1406,若中断控制电路1301发现计数器大于预定阈值,中断控制器1301实施中断抑制时,随着步骤1410、1412的执行,缓冲的数据被不断的写入闪存芯片105,从而计数器的值递减,并使得计数器的值将可以变得小于预定阈值。
图15为根据本发明的又一实施例的存储设备102执行中断抑制的流程图。为减少颠簸而实施消息或中断抑制。在步骤1502,存储设备102接收到来自主机101的要写入存储设备的数据。在一个例子中,该数据包含于写入命令200中。在其他例子中,该数据可通过DMA方式从主机101传输到存储设备102。在步骤1504,控制电路104将该数据写入到缓冲存储器106,并将计数器递增。计数器的值指示在缓冲存储器106中尚未被写入到闪存芯片105中的数据量。前面已经公开了,当将数据写入到缓冲存储器106之后,中断控制电路1301可向主机101发送消息或中断,以指示对写入命令的执行完成,并对发送消息或中断的次数进行计数。而为实施中断抑制,在步骤1506,中断控制电路1301判断预定时间间隔内发出的中断次数是否大于预定阈值。在一个例子中,可使用每隔一定时间产生到时信号的定时器。并监视两次到时信号之间发生的消息或中断次数。如果中断次数不大于预定阈值,则执行步骤1510,中断控制电路1301向主机发送指示写入命令已经处理完成的消息或中断。在步骤1506,若中断控制电路1301发现计数器大于预定阈值,则不向主机101发送指示写入命令已执行完成的消息或中断。中断控制电路1301可通过对消息或中断的缓存来实施消息或中断抑制。在另一个例子中,每当定时器的到时信号有效时,为计数器设定预定数值,该数值表示在下一次定时器到时信号有效前,可向主机101发出的消息或中断的数量,并且每发出一消息或中断,将该计数器递减。若在下一定时器到时信号有效前,计数器递减为0,则中断控制器1301开始实施中断抑制。在一个例子中,定时器的定时间隔和/或预定阈值可以由主机101或者控制电路104更新。还需要指出的是,中断控制器1301实施的消息或中断抑制,并不影响控制电路104将缓冲存储器106中的数据写入到闪存芯片105中。在缓冲存储器106中存在待写入的数据的情况下,控制电路104就可以与其他操作并行地将缓冲存储器106中的数据写入到闪存芯片105中。
在进一步的实施例中,可将图14A、14B所展示的为同备用电源的电量相适应而实施的消息或中断抑制,与图15所展示的为减少颠簸而实施的消息或中断抑制相结合。控制电路104接收要写入存储设备102的数据,并将数据写入缓冲存储器106。中断控制电路1301检测在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过第一预定阈值时,中断控制电路1301产生第一中断抑制信号。而中断控制电路1301还监视一定时间期间内向主机101实际发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数超过了一定的第二阈值,中断控制电路产生第二中断抑制信号。若第一中断抑制信号或第二中断抑制信号中的任何一者有效,则中断控制电路1301实施消息或中断抑制,例如,中断控制电路1301暂时地不向主机101发送消息或中断,而是将其缓存起来。进一步地,随着中断抑制的实施以及随着缓冲存储器106中的数据被写入闪存芯片105,在缓冲存储器106中且尚未写入闪存芯片105中的数据量将小于第一阈值,从而第一中断抑制信号将变为无效;而随着中断抑制的实施以及随着时间的流逝,在一定时间期间内发出的消息或中断次数将小于第二阈值,从而第二中断抑制信号将变为无效。当第一中断抑制信号与第二中断抑制二者均变为无效后,中断控制电路1301将可以将缓存的或新产生的消息或中断发送给主机101。
图16A是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16A中的存储设备同图7C中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,其还包括中断控制器1601。中断控制器1601耦合到DMA写接口735和Flash接口控制器737。如同前面所提到的,对于第一DMA微指令,DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接口735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。接下来,中断控制器1601记录被写入到缓冲存储器106但尚未被写入到闪存芯片105中的数据量。由于每条DMA微指令对应相同数量的数据(例如4K字节),可由中断控制器1601维护计数器,并在基于第一DMA微指令而将数据写入到缓冲存储器106时(或之后),使计数器递增单位值(例如1,对应于4K字节)。对于第二DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。基于第二DMA微指令而将数据写入到缓冲存储器106时(或之后),依然使计数器递增单位值。前面已经公开了,对于每一条DMA微指令,Flash接口控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。接着,中断控制器1601将计数器递减单位值。
在基于第一DMA微指令或第二DMA微指令以DMA方式将数据写入到缓冲存储器106之后,中断控制器1601检查计数器是否大于预定阈值。若计数器大于预定阈值,意味着缓冲存储器106中已经存储了过多的待写入数据。在意外掉电的情况下,存储设备102上的备用电源的电量不足以支持将这些待写入数据保存到闪存芯片105中。因而,中断控制器1601抑制向主机101发送的指示对第一DMA微指令或第二DMA微指令的执行完成的消息或中断。在一个例子中,当DMA描述符600所包括的第一DMA微指令与第二DMA微指令均执行完成,即基于第一DMA微指令和第二DMA微指令所传输的数据均写入缓冲存储器106后,闪存控制器基于计数器是否大于预定阈值而决定是否向主机101发送指示DMA描述符600执行完成的消息或中断。在意外掉电实际发生时,为中断控制器1601所抑制的消息或中断,以及与这些消息或中断所对应的DMA微指令或其DMA描述符被丢弃。而与中断控制器1601已经向主机101发送的消息或中断相对应的DMA微指令或DMA描述符所指示传输的数据,将利用备用电源而写入到闪存芯片105中。
在另一个实施例中,中断控制器1601还利用另一计数器记录在一预定时间间隔内向主机101实际发送的消息或中断的数量。可通过设置一定时器来获得预定时间间隔。若在预定时间间隔内,向主机101实际发送的消息或中断的数量超出了另一阈值,则中断控制器1601抑制向主机101发送的消息或中断。
在依然另一个实施例中,为同备用电源的电量相适应而实施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。当中断控制器1601检测到缓冲存储器106中的尚未写入到闪存芯片105的数据超过预定阈值,则产生第一中断抑制信号。当中断控制器1601检测到在预定时间间隔内向主机101实际发送的消息或中断的数量超出了另一预定阈值,则产生第二中断抑制信号。当第一中断抑制信号与第二中断抑制信号中的任意一者有效时,中断控制器1601实施消息或中断抑制。随着Flash接口控制器737将缓冲存储器106中的数据写入闪存芯片105,第一中断抑制信号可变为无效,随着时间的流逝以及定时器再次发出到时信号,第二中断抑制信号可变为无效。当第一中断抑制信号与第二中断抑制信号均变为无效时,中断控制器1601停止实施中断抑制,而向主机101发送所缓存的消息或中断。
这里的定时器的时间周期是可以由用户设置的,并且可以在运行时动态调整,而相应的阈值(包括与缓冲存储器106中的待写入闪存芯片105的数据量相关的阈值,以及与预定时间间隔内向主机101实际发送的消息或中断的数量相关的阈值)也是可以由用户设置的,并且可以在运行时动态调整。
图16B是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16B中的存储设备同图16A中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,其还包括中断缓冲存储器1613。中断缓冲存储器1613耦合到中断控制器1601。当中断控制器1601判定要执行消息或中断抑制时,其将消息或中断缓存在中断缓冲存储器1613中。在一个例子中,中断控制器将所有要发送给主机101的消息或中断均缓存在中断缓冲存储器1613中。并且,在无需实施中断控制的情况下,从中断缓冲存储器1613中取出消息或中断,并发送给主机101。在一个例子中,在中断缓冲存储器1613中缓存的是用于向主机101标识DMA描述符600的标识符。可选地,可以缓存第一DMA微指令和第二DMA微指令。还可以缓存缓冲存储器地址622与缓冲存储器地址632,因为该缓冲存储器地址622、632可向主机101指示DMA描述符600。在优选的实施例中,在中断缓冲缓冲器中缓存缓冲存储器地址622与缓存缓冲存储器地址632中的一个。通过在消息或中断中向主机101指示缓存缓冲存储器地址622与缓存缓冲存储器地址632中的一个,参照图9A、图9B中公开的实施例,主机101可得到与之对应的IO请求链表,并因而获知哪个IO请求被完成。
在另一个实施例中,可不设置中断缓冲存储器1613,而作为替代,在缓冲存储器106中缓存要发送给主机101的消息或中断。
图16C是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16C中的存储设备同图16A中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,中断控制器1602不是耦合到DMA写接口735而是耦合到DMA写操作控制器734和Flash接口控制器737。如同前面所提到的,对于第一DMA微指令,DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接口735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。接下来,中断控制器1602记录被写入到缓冲存储器106但尚未被写入到闪存芯片105中的数据量。由于每条DMA微指令对应相同数量的数据(例如4K字节),可由中断控制器1602维护计数器,并在基于第一DMA微指令而将数据写入到缓冲存储器106时(或之后),使计数器递增单位值(例如1,对应于4K字节)。对于第二DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。基于第二DMA微指令而将数据写入到缓冲存储器106时(或之后),依然使计数器递增单位值。前面已经公开了,对于每一条DMA微指令,Flash接口控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。接着,中断控制器1602将计数器递减单位值。
当中断控制器1602判定要执行消息或中断抑制时,中断控制器1602指示DMA写操作控制器734暂停从微指令FIFO733中获取DMA微指令的操作。以此方式,将尚未被执行的DMA微指令缓存在FIFO733中。而对应已经通过DMA写操作控制器734和DMA写接口735而被执行的DMA微指令,中断控制器1602向主机101发送指示这些DMA微指令被执行完成的消息或中断。或者,在一个例子中,当一个DMA描述符所对应的全部DMA微指令均已经通过DMA写操作控制器734和DMA写接口735而被执行后,中断控制器1602向主机101发送指示这些DMA微指令或该DMA描述符被执行完成的消息或中断。当随着缓冲存储器106中的数据被写入到闪存芯片105,中断控制器1602判定无需再实施中断抑制时,其指示DMA写操作控制器从微指令FIFO733中获取DMA微指令并执行。
当掉电实际发生时,微指令FIFO733中的微指令被丢弃,而与中断控制器1602已经向主机101发送的消息或中断相对应的DMA微指令或DMA描述符所指示传输的数据,将利用备用电源而写入到闪存芯片105中。
在另一个实施例中,中断控制器1602也维护定时器来监视一定时间间隔内向主机101发送的消息或中断的数量。当一定时间间隔内向主机101发送的消息或中断的数量超过阈值时,中断控制器1602抑制向主机101发送消息或中断的活动,即指示DMA写操作控制器734暂停从微指令FIFO733中获取DMA微指令。
在依然另一个实施例中,在中断控制器1602中,为同备用电源的电量相适应而实施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。
图16D是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16D中的存储设备同图12中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,还包括中断控制器1603。中断控制器1603耦合到DMA写操作控制器734以及Flash接口1231、Flash接口1232(未示出)、Flash接口1233(未示出)。中断控制器1603为同Flash接口1231相耦合的闪存芯片设置第一计数器,为同Flash接口1232相耦合的闪存芯片设置第二计数器,为同Flash接口1233相耦合的闪存芯片设置第三计数器。在Flash接口1231、1232、1233的每一个分别耦合了多个闪存芯片或闪存管芯的情况下,可为同Flash接口1231、1232、1233的每一个所耦合的多个闪存芯片或闪存管芯分别设置与之对应的计数器。在为同备用电源的电量相适应而实施消息或中断抑制时,优选地针对同Flash接口1231、1232、1233相耦合的多个闪存芯片或管芯分别监控其待写入的数据量。
作为举例,在一个实施例中,Flash接口1231、1232、1233的每一个均同一个闪存芯片相耦合,而每个闪存芯片上包括一个闪存管芯,第一计数器、第二计数器与第三计数器分别对应于与Flash接口1231相耦合的闪存芯片或管芯、与Flash接口1232相耦合的闪存芯片或管芯以及与Flash接口1233相耦合的闪存芯片或管芯。对于Flash接口1231、1232、1233的每一个均耦合到多个闪存芯片或管芯的情况,可采用类似的方式实施。当在DMA写控制器734的控制下,执行DMA微指令,并通过DMA写接口735在主机101和存储设备102之间发起DMA操作,将数据以DMA方式写入缓冲存储器106后,中断控制器1603通过DMA写操作控制器734获得该DMA微指令所对应的用于闪存芯片105的逻辑地址,并进而获得与该逻辑地址相对应用于闪存芯片105的物理地址,从而确定该DMA微指令的数据将写入的闪存芯片或管芯,并将与为该闪存芯片或管芯而设置的计数器(例如,第二计数器)递增。中断控制器1603也可采用其他方式获得与DMA微指令相对应的用于闪存芯片105的物理地址。当Flash接口1231、1232、1233之一(例如Flash接口1232)将数据写入到与其耦合的闪存芯片105时,指示中断控制器1603将对应于写入数据的闪存芯片或管芯的计数器(在该例子中,第二计数器)递减。
当第一计数器、第二计数器和第三计数器中的任何一个超过预定阈值时,中断控制器1603实施中断抑制。当第一计数器、第二计数器和第三计数器均未超过预定阈值时,中断控制器1603解除中断抑制。还将意识到,对应于第一计数器、第二计数器与第三计数器的预定阈值可以彼此不同,以同与其相对应的各个闪存芯片或管芯相适应。
在另一个实施例中,中断控制器1603也维护定时器来监视一定时间间隔内向主机101发送的消息或中断的数量。当一定时间间隔内向主机101发送的消息或中断的数量超过阈值时,中断控制器1603抑制向主机101发送消息或中断的活动,即指示DMA写操作控制器734暂停从微指令FIFO733中获取DMA微指令。
在依然另一个实施例中,在中断控制器1603中,为同备用电源的电量相适应而实施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。
前面已经提到,存储设备102可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每一个,通过在缓冲存储器106中创建的链表,将与一个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。在中断控制器1603向主机101发送的消息或中断,可以指示对DMA微指令的执行完成,也可指示对与DMA微指令相关联的DMA描述符的执行完成。
供电电路、供电方法以及主机供电能力测量
主机的电源或供电电路在断电后,或者计算机向外围设备指示掉电事件后,其向外围设备提供的电力并非立刻完全停止。由于电源或主板等电路中诸如电容的储能元件的存在,在掉电后,储能元件中的电能将向外释放。在图18A-18C中提供了布置于存储设备中的供电电路,而在图19A-19E中提供了供电电路中的控制电路的多种布置。
图18A是根据本发明的一个实施例的外围设备的供电电路的原理图。如图18A所示的实施例包括主机1800以及同主机1800相耦合的存储设备1810。主机1800同存储设备1810之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道、无线通信网络等连接主机1800与存储设备1810。主机1800可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。所属领域技术人员将意识到,其他类型的外围设备,诸如网络适配器、图形适配器等也可采用本发明所提供的供电电路。
主机1800包括电源1802,用于向主机中的各个电子部件及连接到主机1800的存储设备1810提供电力。在主机1800的电源、主板等电子部件中,还包括诸如电容1804的储能元件。在主机1800的储能元件可以有一个或多个,这里为了清楚地目的,而展示为电容1804。电容1804耦合在电源1802的输出端和地之间。
存储设备1810的供电电路从主机中接收电力,并供给负载1880。在存储设备1810中,负载1880可以是闪存存储器以及存储器控制电路。存储设备1810的供电电路包括二极管1814、N沟道MOSFET(金属氧化物半导体场效应晶体管)1816以及控制电路1818。二极管1814的阳极耦合到电源1802的输出端,二极管1814的阴极耦合到负载1880。二极管1814形成了向负载1880供电的供电通路1823。N沟道MOSFET 1816的源极耦合到电源1802的输出端,N沟道MOSFET 1816的漏极耦合到负载1880,用于向负载1880提供电力。控制电路1818耦合到N沟道MOSFET1816的栅极,用于控制N沟道MOSFET 1816的闭合或断开。N沟道MOSFET 1816作为一开关而工作,并形成了向负载1880供电的供电通路1821。例如,N沟道MOSFET 1816的源极作为开关的输入端,而N沟道MOSFET 1816的漏极作为开关的输出端,而N沟道MOSFET 1816的栅极作为控制端用于控制开关的闭合与断开。
所属领域技术人员将意识到,可以采用其他形式的开关以形成供电通路1821,其他形式的开关包括但不限于诸如三级管的PN结形态的开关,也可以诸如继电器的机械式开关。控制电路1818基于电源1802的输出电压或者来自主机1800的其他信号,而对N沟道MOSFET1816的闭合或断开进行控制。在电源1802正常工作时,其输出电压大于或等于预定电压。控制电路1818检测电源1802的输出电压,在所检测的输出电压大于或等于预定电压时,控制电路1818向N沟道MOSFET 1816输出控制信号,以使N沟道MOSFET 1816闭合。在此情况下,来自主机1800的电源1802的电力通过N沟道MOSFET 1816被施加给负载1880。在优选的实施例中,选取二极管1814,使得其导通电阻大于N沟道MOSFET 1816的导通电阻,从而在电源1802正常工作时,电力通过供电通路1821被提供给负载1880,而不是通过供电通路1823被提供给负载1880。显然,也可以选择N沟道MOSFET 1816,使其导通电阻大于二极管1814的导通电阻;或者协同考虑二极管1814和N沟道MOSFET 1816的选取,以使得N沟道MOSFET1816的导通电阻小于二极管1814的导通电阻。所属领域技术人员还将意识到,二极管1814和N沟道MOSFET 1816可以同时导通,从而同时通过供电通路1821、1823向负载1880提供电力。
在掉电时,由于电容1804的存在,电源1802输出的电压逐渐下降。当电源1802的输出电压下降到预定电压之下时,其意味着主机1800掉电,电源1802将无法继续有效地为存储设备1810提供电力。控制电路1818基于对电源1802的输出电压小于预定电压的检测,向N沟道MOSFET 1816输出控制信号,以断开N沟道MOSFET 1816。虽然此时电源1802的输出电压小于预定电压,但其能够使得二极管1814导通,从而存储在电容1804中的电力可通过供电通路1823被提供给负载1880。
在另一个实施例中,主机1800在发生掉电时,或者主机1800将停止向存储设备1810提供电力时(例如,由于休眠),主机1800将向存储设备1810发出消息以指示掉电事件的发生。控制电路1818可基于对来自主机1800的掉电事件的接收和识别,而向N沟道MOSFET1816输出控制信号,以断开N沟道MOSFET 1816。
在进一步的实施例中,控制电路1818在识别主机1800掉电后,启动计时器。控制电路1818维持该计时器计时,直到检测到在供电通路1823上提供给负载1880的电压小于可维持负载1880正常工作的电压阈值。记录并保存计时器的计时时间,该计时时间对应于利用主机电容1804的电量可维持负载1880正常工作的时间。在另一个实施例中,为提高可靠性,可在检测到供电通路1823上提供给负载1880的电压小于可维持负载1880正常工作的电压阈值之上的电压值时停止计时,从而为向负载1880的供电提供裕度。
返回参看图13,中断控制电路1301监控在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过一预定阈值,而使得备用电源1305的能量无法支持将该数据量写入到闪存芯片105时,中断控制电路1301将暂时地抑制向主机101发送消息或中断的活动。而利用在图18A中提供的供电电路,由于可利用在主机的电容1804中存储的电量,因而在掉电后,可支持将缓冲存储器106中的更多数量的数据写入到闪存芯片105中。因而,基于计时器测量的计时时间,修改中断控制电路1301所监视的预定阈值。使得在存储设备正常工作时,可以利用更大的缓冲存储器106,从而获得更好的性能。计时时间与缓冲存储器106的预定阈值的增量的对应关系可通过实验获得,并以拟合函数或者查找表等形式存储在存储设备1810中。从而,存储设备1810在获得了计时器的计时时间后,可更新中断控制电路1301所监视的缓冲存储器106的预定阈值。类似地,返回参看图16A、图16B,可更新中断控制器1601所监视的用于缓冲存储器106中的尚未写入到闪存芯片105的数据量的预定阈值;返回参看图16C,可更新中断控制器1602所监视的用于缓冲存储器106中的尚未写入到闪存芯片105的数据量的预定阈值;以及返回参看图16D,可更新中断控制器1603所监视的对应于Flash接口1231、1232、1233的每一个的用于缓冲存储器106中的尚未写入到闪存芯片105的数据量的预定阈值。
依然参看图13,在一个例子中,中断控制电路1301维护一个计数器。当控制电路104将数据写入缓冲存储器106时,计数器递增;而当控制电路104将缓冲存储器106中的数据取出并写入闪存芯片105时,计数器递减。从而,当该计数器的值超过预定阈值时,中断控制电路1301实施中断抑制。在控制电路1818(图18A)在识别主机1800掉电后,记录中断控制电路1301维护的计数器的第一计数值。而在检测到在供电通路1823上提供给负载1880的电压小于可维持负载1880正常工作的电压阈值时,记录该计数器的第二计数值。当掉电后,主机不会再向存储设备1810发出写入请求,因而计数器不会再递增;而只会随着缓冲存储器106里的数据被写入闪存芯片105而单调递减。因而第一计数值与第二计数值的差值对应于利用主机电容1804的电量可维持将缓冲存储器106中的数据写入到闪存芯片105中的数据量。可依据该数据量而修改中断控制电路1301所监视的预定阈值。类似地,也可记录图16A、16B、16C中指示缓冲存储器106中的待写入闪存芯片105的数据量的计数器的计数值。并相应地修改用于缓冲存储器106的预定阈值。
图18B是根据本发明的又一个实施例的外围设备的供电电路的原理图。图18B所提供的供电电路同图18A中展示的供电电路相类似。不同之处在于,图18B中还包括二极管1820和电容1812。电容1812的另一端耦合到地。电容1812作为存储设备1810的备用电源,用于向存储设备1810的负载1880提供应急电力。二极管1820的导通电阻大于N沟道MOSFET 1816的导通电阻,因而,在电源1802正常供电时,控制电路1818控制作为开关的N沟道MOSFET 1816闭合,从而来自电源1802的电力通过N沟道MOSFET 1816被提供给负载1880。而在控制电路1818通过检测供电通路1821上来自电源1802的电压而确定电源1802掉电时,输出控制信号使得N沟道MOSFET 1816断开,而供电通路1821的来自电源1802的输出电压可使得二极管1820导通,从而使得电源1802的电力通过二极管1820被提供给负载1880。而此时,电容1812也向负载1880提供电力,并可以稳定供电通路1823上的电压。在另一个实施例中,主机1800在发生掉电时,或者主机1800将停止向存储设备1810提供电力时(例如,由于休眠),主机1800将向存储设备1810发出消息以指示掉电事件的发生。控制电路1818可基于对来自主机1800的掉电事件的接收和识别,而向N沟道MOSFET 1816输出控制信号,以断开N沟道MOSFET 1816。
所属领域技术人员将意识到,电源1802还可以为电容1812充电。在一个实施例中,对电容1812的充电通过二极管1814进行,而随着电容1812中电量的增加,二极管1814阴极的电压升高,当二极管1814两端的电压差小于其开启电压时,二极管1814截止。也可以通过N沟道MOSFET 1816,以向电容1812充电。
所属领域技术人员也将意识到,可使用多种形态的电池、可充电电池替代电容1812,或者与电容1812一同使用而作为存储设备1810的备用电源。
在具有电容1812的供电电路中,控制电路1818所记录并保存的计时器的计时时间,对应于利用主机电容1804以及电容1812的电量可维持负载1880正常工作的时间。基于该计时器的计时时间,修改例如图13中的中断控制电路1301所监视的预定阈值。使得在存储设备正常工作时,可以利用更大的缓冲存储器106,从而获得更好的性能。也可以修改用于图16A、16B、16C中的缓冲存储器106的预定阈值,从而可利用更大的缓冲存储器106的存储空间。
图18C是根据本发明的另一个实施例的外围设备的供电电路的原理图。图18C所提供的供电电路同图18B中展示的供电电路相类似。不同之处在于,图18C中还包括N沟道MOSFET 1822。控制电路1818通过检测供电通路1821的来自电源1802的输出电压而确定电源1802正常供电时,控制电路1818使作为开关的N沟道MOSFET 1816闭合,并输出控制信号,使作为开关的N沟道MOSFET 1822断开,从而来自电源1802的电力通过N沟道MOSFET 1816被提供给负载1880。而在控制电路1818通过检测供电通路1821的来自电源1802的输出电压而确定电源1802掉电时,输出控制信号使得N沟道MOSFET 1816断开,并输出控制信号使得作为开关的N沟道MOSFET 1822闭合。从而使得电源1802的电力可通过二极管1814和作为开关的N沟道MOSFET 1822被提供给负载1880,以及来自电容1812的电力也可通过N沟道MOSFET 1822被提供给负载1880。以及来自电源1802的电力也可通过二极管1820被提供给负载1880。所属领域技术人员还将意识到,在如图18C所提供的供电电路中,也可以不使用二极管1820。可以采用其他形式的开关以替代N沟道MOSFET 1822,其他形式的开关包括但不限于诸如P沟道MOSFET、三级管、其他PN结形态的开关,也可以是诸如继电器的机械式开关。
图19A、19B、19C、19D和19E分别示出了本发明的供电电路中的控制电路的实施例。
参看图19A,其控制电路1818包括ADC(Analog Digital Converter,模拟-数字转换器)1901和数字比较器1903。ADC 1901将供电通路1821的来自电源1802的输出电压进行模数转换,得到指示电源1802的输出电压的数字值。数字比较器1903将ADC 1901输出的数字值与预定数字值相比较。在ADC 1901输出的数字值大于或等于预定数字值时,数字比较器1903输出控制信号以闭合N沟道MOSFET 1816;而在ADC 1901输出的数字值小于预定数字值时,数字比较器1903输出控制信号以断开N沟道MOSFET 1816。基于类似的原理,数字比较器1903还可以向图18C中的N沟道MOSFET 1822提供控制信号。在进一步的实施例中,在ADC 1901输出的数字值小于预定数字值时,控制电路1818启动计时器。还利用ADC1901检测提供给负载1880的电压或者供电通路1821上的电压,并将其转换为数字值。当ADC1901输出的数字值小于同维持负载1880正常工作的电压相对应的第二预定数字值时,停止计时器的计时,并保存计时器的计时时间。
参看图19B,其提供了根据本发明的另一实施例的控制电路1818。图19B中的控制电路1818包括比较器1913。比较器1913是模拟比较器,并从供电通路1821上接收来自电源1802的输出电压以及参考电压1915,参考电压1915指示电源1802正常工作时的输出电压。当电源1802的输出电压大于或等于参考电压1915时,比较器1913向N沟道MOSFET1816输出控制信号,以闭合N沟道MOSFET1816。而当电源1802的输出电压小于参考电压1915时,比较器1913向N沟道MOSFET1816输出控制信号,以断开N沟道MOSFET1816。基于类似的原理,比较器1913还可以向图18C中的N沟道MOSFET1822提供控制信号。在进一步的实施例中,而当电源1802的输出电压小于参考电压1915时,控制电路1818启动计时器。还利用比较器1913检测提供给负载1880的电压或者供电通路1821上的电压与第二参考电压的大小关系。当比较器1913检测到的提供给负载1880的电压或者供电通路1821上的电压小于同维持负载1880正常工作的电压相对应的第二参考电压时,停止计时器的计时,并保存计时器的计时时间。
参看图19C,其提供了根据本发明的另一实施例的控制电路1818。电源1802的输出电压可能具有较高的电压值,而在存储设备1810上提供具有较高电压值的参考电压可能是不方便的。图19C中的控制电路1818包括比较器1923以及由电阻器1928、1929所组成的分压电路。电阻器1928、1929串联,电阻器1929的一端耦合到供电通路1821以接收来自电源1802的输出电压,电阻器1929的另一端耦合到电阻器1928的一端,而电阻器1928的另一端耦合到参考电位(例如地)。电阻器1928、1929互相耦合的一端提供对电源1802的输出电压的分压输出,将该分压输出耦合到比较器1923,比较器1923的另一输入端接收参考电压1925。当电源1802正常工作时,该分压输出大于或等于参考电压1825,比较器1923向N沟道MOSFET1816输出控制信号,以闭合N沟道MOSFET1816。而当电源1802掉电时,该分压输出小于参考电压1925,比较器1923向N沟道MOSFET1816输出控制信号,以断开N沟道MOSFET1816。基于类似的原理,比较器1923还可以向图18C中的N沟道MOSFET1822提供控制信号。在进一步的实施例中,而当电源1802的输出电压小于参考电压1925时,控制电路1818启动计时器。还利用比较器1923检测经过分压的提供给负载1880的电压或者供电通路1821上的电压与第二参考电压的大小关系。当比较器1923检测到的提供给负载1880的电压或者供电通路1821上的电压经过分压后小于同维持负载1880正常工作的电压相对应的第二参考电压时,停止计时器的计时,并保存计时器的计时时间。
参看图19D,其提供了根据本发明的另一实施例的控制电路1818。图19D中,控制电路1818包括ORing控制器1933。ORing控制器1933的输入端耦合到供电通路1821上的电源1802的输出端以及N沟道MOSFET1816的输出端(漏极)1935。ORing控制器1933的输出端耦合到N沟道MOSFET1816的栅极,以控制N沟道MOSFET1816的闭合与断开。当供电通路1821上的电源1802的输出端的电压与N沟道MOSFET1816的输出端1935的电压之间的差值大于或等于预定值时,ORing控制器1933控制N沟道MOSFET1816的输出端闭合,而当供电通路1821上的电源1802的输出端的电压与N沟道MOSFET1816的输出端1935的电压之间的差值小于预定值时,ORing控制器1933控制N沟道MOSFET1816的输出端断开。ORing控制器1933可以是来自德州仪器公司的型号为TPS2419的ORing控制器。基于类似的原理,ORing控制器1933还可以向图18C中的N沟道MOSFET1822提供控制信号。在进一步的实施例中,可基于ORing控制器1933控制N沟道MOSFET1816的输出端断开而启动计时器,并在提供给负载1880的电压或者供电通路1821上的电压小于维持负载1880正常工作的电压时,控制计时器停止计时。
参看图19E,其提供了根据本发明的另一实施例的控制电路1818。图19E中,控制电路1818包括控制器1943,其接收并识别主机发出的指示掉电的消息。在未接收到指示掉电的消息时,控制器1943向N沟道MOSFET1816提供控制信号,以指示N沟道MOSFET1816闭合,而在接收到指示掉电的消息后,控制器1943向N沟道MOSFET1816提供控制信号,以指示N沟道MOSFET1816断开。控制器1943可以实现于存储设备1810用于与主机1800通信的接口控制器中。基于接口类型的不同,接口控制器可以SATA(Serial Advanced Technology Attachment,串行高级技术附件)控制器、USB(Universal Serial Bus,通用串行总线)控制器、PCI(Peripheral Component Interconnect,外围组件互连)控制器、PCIE(PeripheralComponent Interconnect Express,快速外围组件互连)控制器、SCSI(Small Computer System Interface,小型计算机系统接口)控制器、IDE(Integrated Drive Electronics,集成驱动器电子)控制器等。基于类似的原理,控制器1943还可以向图18C中的N沟道MOSFET1822提供控制信号。在进一步的实施例中,可基于控制器1943接收到指示掉电的消息而启动计时器,并在提供给负载1880的电压或者供电通路1821或供电通路1823上的电压小于维持负载1880正常工作的电压时,控制计时器停止计时。
图20A是根据本发明的实施例确定缓冲区数据量阈值的方法的流程图。参看图18A-18C,当控制器1818接收到来自主机的复位信号(步骤2001),启动计时器(步骤2003)。该复位信号指示主机1800即将停止向存储设备1810提供电力。控制电路1818检测提供给负载1880的电压、供电通路1821或供电通路1823上的电压是否小于可维持负载1880正常工作的可用阈值(步骤2005)。如果电压大等于可用阈值,意味着向负载1880提供的电力还可以维持负载1880正常工作,则保持计时器计时。若电压小于可用阈值,意味着向负载1880提供的电力无法维持负载1880正常工作,则停止计时器(步骤2007)。计时器的计时时间,是利用主机1800的电容1804和或存储设备1810的电容1812的电量可维持负载1880正常工作的时间。基于该时间,通过预先存储的查找表或函数而得到对应于该时间的缓冲存储器数据量阈值(步骤2009)。表示时间与缓冲存储器数据量阈值的对应关系的查找表或函数,可预先存储在存储设备1810中,并通过实验方式测得。也可以统计多次实验的测量结果,并基于可靠性需要而设置该对应关系或将对应关系拟合为适当的函数。
在一个实施例中,在主机掉电之后,且向负载1880提供的电力还可以维持负载1880正常工作时,两次或多次测量施加给负载1880的电压、供电通路1821或供电通路1823上的电压,依据测量结果在时间上的分布,基于供电电压的衰减函数或曲线而计算在主机掉电和向负载1880提供的电力无法维持负载1880正常工作之间的时间,并基于该时间确定缓冲存储器数据量阈值。
在一个实施例中,记录在主机掉电之后直到向负载1880提供的电力无法维持负载1880正常工作之间,从存储设备的缓冲存储器写入闪存芯片的数据量,并基于该数据量确定缓冲区数据量阈值。
在一个实施例中,参看图16D,当存储设备中包括闪存接口1231、1232、1233时,闪存接口1231、1232、1233将并行地将缓冲存储器106中的数据写入闪存芯片105。在主机掉电后,利用电容1804和或存储设备1810的电容1812的电力,闪存接口1231、1232、1233可写入闪存芯片105的数据量主要依赖于来自电容1804和或存储设备1810的电容1812的电力可维持在可用阈值电压之上的时间。因为设置缓冲区数据量阈值,使得闪存接口1231、1232、1233中具有最多待写入数据量的闪存接口可在主机掉电发生后,将缓冲存储器106中的待写入数据写入到闪存芯片105。以及对于多个闪存接口1231、1232、1233,设置单一的缓冲存储器数据量阈值。当多个闪存接口1231、1232、1233中的任何一个闪存接口的待写入数据量超过该缓冲存储器数据量阈值时,则实施结合图16D已经描述的中断抑制。
图20B是根据本发明的另一实施例的确定缓冲区数据量阈值的方法的流程图。参看图18A-18C,控制器1818检测主机电源1802所提供的电压(步骤2011)。判断主机电源1802所提供的电压与关机电压的大小关系(步骤2013)。当主机电源1802所提供的电压小于关机电压时,启动计时器(步骤2015)。主机电源1802提供的电压小于关机电压,意味着主机1800即将停止向存储设备1810提供电力。控制电路1818检测提供给负载1880的电压、供电通路1821或供电通路1823上的电压是否小于可维持负载1880正常工作的可用阈值(步骤2017)。如果电压大等于可用阈值,意味着向负载1880提供的电力还可以维持负载1880正常工作,则保持计时器计时。若电压小于可用阈值,意味着向负载1880提供的电力无法维持负载1880正常工作,则停止计时器(步骤2019)。计时器的计时时间,是利用主机1800的电容1804和或存储设备1810的电容1812的电量可维持负载1880正常工作的时间。基于该时间,通过预先存储的查找表或函数而得到对应于该时间的缓冲存储器数据量阈值(步骤2021)。表示时间与缓冲存储器数据量阈值的对应关系的查找表或函数,可预先存储在存储设备1810中,并通过实验方式测得。也可以统计多次实验的测量结果,并基于可靠性需要而设置该对应关系或将对应关系拟合为适当的函数。
图21是根据本发明的实施例的设置缓冲区数据量阈值的方法的流程图。不同的主机1800会具有不同的配置,因而,在掉电后,主机的电容1802可提供存储设备1810的电力可能是不同的。主机电容1802的供电能力也会因老化等因素而随着时间而改变。在一个实施例中,在主机1800上首次使用存储设备1810时,使用缓冲存储器数据量阈值的默认设置。一般情况下,该默认设置采用保守的选择方式。例如,依据仅利用存储设备的电容1812所能提供的电量而设置缓冲存储器数据量阈值。因而,需要确定存储设备1810是否为首次在主机1800上被使用。为此目的,在主机1800启动时(步骤2101),主机1800向存储设备1810提供主机标识。主机标识可以是主机1800的网卡MAC地址或者是其他硬件设备的序列号,使得该主机标识可以唯一地标识主机1800。存储设备1810接收该主机标识,并与在存储设备1810中存储的主机标识相比较(步骤2103)。如果从主机1800接收的主机标识同存储设备1810中存储的主机标识不同,意味着存储设备1810没有在主机1800上使用或者至少存储设备1810的上一次使用不是在主机1800上。那么,存储设备1810选择使用默认的缓冲存储器数据量阈值,其为依据仅利用存储设备的电容1812所能提供的电量而设置缓冲存储器数据量阈值(步骤2113)。以及可选地,还清除在存储设备1810中存储的(非默认)缓冲存储器数据量阈值(步骤2111)。在步骤2103,如果从主机1800接收的主机标识同存储设备1810中存储的主机标识相同,意味着主机1800向存储设备1810发送过该主机标识,或者存储设备1810的前一次使用是在主机1800上进行。在步骤2105,存储设备1810判断是否使用默认的缓冲存储器数据量阈值。在一些情况下,例如,主机1800的配置发生了改变,其电容1804在主机掉电后的供电能力可能发生变化,在此情况下,主机1800可向存储设备1810发出命令,以指示存储设备1810使用默认缓冲存储器数据量阈值。在另一个实施例中,在存储设备1810上设置例如跳线开关,以指示存储设备1810是否使用默认的缓冲存储器数据量阈值。当存储设备1810将使用默认的缓冲存储器数据量阈值时,执行步骤2113和/或步骤2111。当在步骤2105判断不需要使用默认缓冲存储器数据量阈值时,执行步骤2107,确定缓冲存储器数据量阈值。可从存储设备1810中读出已经通过在图20A或20B中提供的实施例而得到并存储在存储设备1810上的缓冲存储器数据量阈值。在一个实施例中,每当主机1800关机或主机1800的电源1802掉电时,执行在图20A或20B中提供的方法,并得到一个缓冲存储器数据量阈值。在步骤2107,可依据所存储的多个缓冲存储器数据量阈值,计算出优选的缓冲存储器数据量阈值。计算方法可包括对多个缓冲存储器数据量阈值求平均值或加权平均值。也可以依据多个缓冲存储器数据量阈值,计算其均值和方差,并得到满足一定备用电源可靠供电概率的缓冲存储器数据量阈值。在步骤2109,将所确定的缓冲存储器数据量阈值设置为在存储设备1810中使用的缓冲存储器数据量阈值。
已经为了示出和描述的目的而展现了对本发明的描述,并且不旨在以所公开的形式穷尽或限制本发明。对所属领域技术人员,许多调整和变化是显而易见的。
Claims (5)
1.一种存储设备的中断控制方法,所述存储设备包括闪存存储器以及缓冲存储器,所述方法包括:
从信息处理设备接收要写入存储设备的数据;
将所接收的要写入存储设备的数据写入所述缓冲存储器;
将所述缓冲存储器中的数据取出并写入所述闪存存储器;
其中,在将所接收的要写入存储设备的数据写入所述缓冲存储器后,若所述缓冲存储器中的数据量小于预定阈值,则向所述信息处理设备发送指示写操作完成的消息;
所述方法还包括检测到所述信息处理设备的电源掉电而启动计时器,当所述信息处理设备的电源向所述存储设备提供的电压小于预定电压阈值时停止计时器;以及
所述方法还包括所述存储设备从所述信息处理设备接收唯一标识所述信息处理设备的第一标识符,若所述第一标识符与所述存储设备中存储的第二标识符相同,则根据所述计时器的计时时间修改所述预定阈值。
2.根据权利要求1所述的方法,若所述第一标识符与所述存储设备中存储的第二标识符不同,则将所述预定阈值设置为默认值;以及在所述存储设备中存储所述第一标识符以替换所述第二标识符。
3.根据权利要求1或2所述的方法,还包括存储所述计时器的计时时间。
4.根据权利要求3所述的方法,其中在所述信息处理设备启动时,所述存储设备从所述信息处理设备接收唯一标识所述信息处理设备的第一标识符,若所述第一标识符与所述存储设备中存储的第二标识符相同,则根据所存储的所述计时器的计时时间修改所述预定阈值。
5.一种存储设备的中断控制方法,所述存储设备包括闪存存储器以及缓冲存储器,所述方法包括:
从信息处理设备接收写入请求;
基于所述写入请求,将数据写入所述缓冲存储器,并使计数器递增;
将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;
其中,若所述计数器小于预定阈值,则向所述信息处理设备发送指示所述写入请求处理完成的消息;
所述方法还包括检测到所述信息处理设备的电源掉电而记录所述计数器的第一值,当所述信息处理设备的电源向所述存储设备提供的电压小于预定电压阈值时记录所述计数器的第二值;以及
所述方法还包括所述存储设备从所述信息处理设备接收唯一标识所述信息处理设备的第一标识符,若所述第一标识符与所述存储设备中存储的第二标识符相同,则,根据所述第一值与所述第二值的差而修改所述预定阈值。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210254881.0A CN102799396B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
CN201510494515.6A CN105138287B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210254881.0A CN102799396B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510494515.6A Division CN105138287B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102799396A CN102799396A (zh) | 2012-11-28 |
CN102799396B true CN102799396B (zh) | 2015-09-16 |
Family
ID=47198513
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210254881.0A Active CN102799396B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
CN201510494515.6A Active CN105138287B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510494515.6A Active CN105138287B (zh) | 2012-07-22 | 2012-07-22 | 存储设备、中断控制方法以及供电时间测量方法 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN102799396B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108027780A (zh) * | 2015-12-22 | 2018-05-11 | 华为技术有限公司 | 一种存储器内容保护电路 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015101211A1 (zh) * | 2013-12-30 | 2015-07-09 | 国民技术股份有限公司 | 存储系统及其非易失性存储器的控制方法 |
JP2015132894A (ja) * | 2014-01-09 | 2015-07-23 | カシオ計算機株式会社 | マイクロコントローラ装置及びその動作制御方法 |
CN103730951B (zh) * | 2014-01-24 | 2016-04-13 | 加弘科技咨询(上海)有限公司 | 一种电源管理系统及其方法 |
CN105807885B (zh) * | 2014-12-31 | 2021-09-28 | 施耐德电气工业公司 | 一种掉电保护方法及装置 |
CN106328179B (zh) * | 2015-06-22 | 2024-04-05 | 北京忆恒创源科技股份有限公司 | 供电电路与供电方法 |
US10289579B2 (en) * | 2015-12-10 | 2019-05-14 | Qualcomm Incorporated | Digital aggregation of interrupts from peripheral devices |
US10254967B2 (en) * | 2016-01-13 | 2019-04-09 | Sandisk Technologies Llc | Data path control for non-volatile memory |
CN106648016B (zh) * | 2016-12-02 | 2020-04-10 | 浙江宇视科技有限公司 | 供电电路、供电设备及供电方法 |
CN108337035B (zh) * | 2018-02-05 | 2020-12-01 | 北京电子工程总体研究所 | 一种遥测下行热备份且无缝衔接的星务遥测中断处理方法 |
KR20200057311A (ko) * | 2018-11-16 | 2020-05-26 | 삼성전자주식회사 | 통신되는 데이터의 양을 동작의 중단 빈도에 따라 스로틀링하는 스토리지 장치 |
KR20210034378A (ko) * | 2019-09-20 | 2021-03-30 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그것의 동작 방법 |
US10950313B1 (en) * | 2019-08-28 | 2021-03-16 | Micron Technology, Inc. | Responding to changes in available power supply |
CN110795364B (zh) * | 2019-10-31 | 2023-06-02 | 四川效率源信息安全技术股份有限公司 | 一种ide模式下访问硬盘的方法 |
CN111258937B (zh) * | 2020-01-23 | 2021-08-03 | 烽火通信科技股份有限公司 | 一种环式链表dma的传输方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0671691A2 (en) * | 1994-02-09 | 1995-09-13 | Hitachi, Ltd. | Storage controller and bus control method for use therewith |
CN101446924A (zh) * | 2008-12-16 | 2009-06-03 | 成都市华为赛门铁克科技有限公司 | 一种数据存储及获取方法、系统 |
CN101465164A (zh) * | 2009-01-12 | 2009-06-24 | 成都市华为赛门铁克科技有限公司 | 一种擦除数据的方法、装置及系统 |
CN101483480A (zh) * | 2009-02-18 | 2009-07-15 | 成都格莱科技有限公司 | 远端通信设备掉电告警装置及光收发模块 |
CN101499313A (zh) * | 2009-01-06 | 2009-08-05 | 成都市华为赛门铁克科技有限公司 | 一种确保数据安全的方法、设备及存储系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6459513A (en) * | 1987-08-31 | 1989-03-07 | Pfu Ltd | Power failure detecting circuit |
-
2012
- 2012-07-22 CN CN201210254881.0A patent/CN102799396B/zh active Active
- 2012-07-22 CN CN201510494515.6A patent/CN105138287B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0671691A2 (en) * | 1994-02-09 | 1995-09-13 | Hitachi, Ltd. | Storage controller and bus control method for use therewith |
CN101446924A (zh) * | 2008-12-16 | 2009-06-03 | 成都市华为赛门铁克科技有限公司 | 一种数据存储及获取方法、系统 |
CN101499313A (zh) * | 2009-01-06 | 2009-08-05 | 成都市华为赛门铁克科技有限公司 | 一种确保数据安全的方法、设备及存储系统 |
CN101465164A (zh) * | 2009-01-12 | 2009-06-24 | 成都市华为赛门铁克科技有限公司 | 一种擦除数据的方法、装置及系统 |
CN101483480A (zh) * | 2009-02-18 | 2009-07-15 | 成都格莱科技有限公司 | 远端通信设备掉电告警装置及光收发模块 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108027780A (zh) * | 2015-12-22 | 2018-05-11 | 华为技术有限公司 | 一种存储器内容保护电路 |
CN108027780B (zh) * | 2015-12-22 | 2020-12-08 | 华为技术有限公司 | 一种存储器内容保护电路 |
Also Published As
Publication number | Publication date |
---|---|
CN102799396A (zh) | 2012-11-28 |
CN105138287A (zh) | 2015-12-09 |
CN105138287B (zh) | 2018-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102799396B (zh) | 存储设备、中断控制方法以及供电时间测量方法 | |
CN102799392B (zh) | 存储设备及其中断控制方法 | |
CN102789439B (zh) | 控制数据传输过程中的中断的方法与存储设备 | |
CN102681952B (zh) | 将数据写入存储设备的方法与存储设备 | |
CN102693198B (zh) | Dma传输方法及系统 | |
KR102500661B1 (ko) | 다중 레벨 셀 모드 비휘발성 메모리를 위한 비용 최적화된 단일 레벨 셀 모드 비휘발성 메모리 | |
TWI788495B (zh) | 供電設備和包括該供電設備的電子設備 | |
RU2348992C2 (ru) | Запоминающее устройство и ведущее устройство | |
CN108710583A (zh) | Ssd写缓存区的管理方法、装置、计算机设备及介质 | |
TWI648634B (zh) | 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元 | |
WO2023227004A1 (zh) | 内存访问热度统计方法、相关装置及设备 | |
KR20170129701A (ko) | 캐시 삽입을 위한 기준으로서 데이터의 압축률을 사용하는 것에 의한 스토리지 캐시 성능 향상 | |
KR20150055413A (ko) | 데이터 저장 장치 | |
EP4345595A1 (en) | Method and device for data storage | |
KR102425470B1 (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US20240061782A1 (en) | Method and device for data caching | |
CN114281570B (zh) | 嵌入式控制电路、控制方法、装置及芯片 | |
CN108984108A (zh) | 用于调度io命令的方法与固态存储设备 | |
CN112463051A (zh) | 一种电池存储系统的管理方法及数据存储方法 | |
CN108664210B (zh) | 一种io命令控制的方法及控制系统、固态存储设备 | |
CN102819511B (zh) | 存储设备以及在该存储设备中创建链表的方法 | |
CN107766262B (zh) | 调节并发写命令数量的方法与装置 | |
JP7571214B2 (ja) | 情報処理装置、および、制御方法 | |
EP4432102A1 (en) | Storage controller and operating method of the storage controller | |
JP2024028145A (ja) | 情報処理装置、および、制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Patentee after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 312, building D, entrepreneurship Park, No. 2, Shangdi Information Road, Haidian District, Beijing 100085 Patentee before: MEMBLAZE TECHNOLOGY (BEIJING) Co.,Ltd. |