计算机可读取存储介质、调度主机命令的方法及装置与流程

文档序号:27906538发布日期:2021-12-11 05:14阅读:114来源:国知局
1.本发明涉及存储装置,尤指一种计算机可读取存储介质、调度主机命令的方法及装置。
背景技术
::2.闪存通常分为nor闪存与nand闪存。nor闪存为随机存取装置,中央处理器(host)可于地址引脚上提供任何存取nor闪存的地址,并及时地从nor闪存的数据引脚上获得存储于该地址上的数据。相反地,nand闪存并非随机存取,而是串行存取。nand闪存无法像nor闪存一样,可以存取任何随机地址,中央处理器反而需要写入串行的字节(bytes)的值到nand闪存中,用于定义请求命令(command)的类型(如,读取、写入、抹除等),以及用在此命令上的地址。地址可指向一个页面(闪存中写入操作的最小数据块)或一个区块(闪存中抹除操作的最小数据块)。3.一般来说,闪存控制器会以先进先出的顺序来执行主机发出的命令,例如主机读命令、主机写命令、主机抹写命令等,用于从闪存单元的指定地址读取用户数据,写入用户数据到闪存单元的指定地址,或者抹写闪存单元中的指定物理块。此外,为了提升闪存单元的空间使用,闪存控制器可能主动安排垃圾回收程序(garbagecollection,gcprocess)需要执行的控制器读指令、控制器写指令等。当主机读命令的到达时间晚于大量文件的主机写命令,和/或gc程序需要执行的gc读指令、gc写指令时,就需要等待之前的命令都执行完。然而,这些主机读命令有可能是主机端开启应用程序时需要读取特定地址的用户数据,如果不能及时回复将造成应用程序的开启不顺,造成使用者认为固态硬盘(solidstatedisk,ssd)产品的效能不佳。因此,本发明提出一种计算机可读取存储介质、调度主机命令的方法及装置,用于解决如上所述的问题。技术实现要素:4.有鉴于此,如何减轻或消除上述相关领域的缺陷,实为有待解决的问题。5.本发明涉及一种计算机可读取存储介质,用于存储能够被闪存控制器的处理单元执行的程序代码,并且所述程序代码被所述处理单元执行时实现以下步骤:依照到达所述闪存控制器的时间顺序从第一队列的顶端迁移一或多个主机写命令至第二队列,使得第一队列的顶端存储主机读命令;从第一队列的顶端提取主机读命令;执行主机读命令,用于从闪存模块读取用户数据;以及回复用户数据给主机端。6.本发明还涉及一种调度主机命令的方法,由闪存控制器执行,包含:依照到达所述闪存控制器的时间顺序从第一队列的顶端迁移一或多个主机写命令至第二队列,使得第一队列的顶端存储主机读命令;从第一队列的顶端提取主机读命令;执行主机读命令,用于从闪存模块读取用户数据;以及回复用户数据给主机端。7.如上所述闪存控制器中的随机存取存储器配置所述第一队列和所述第二队列,第一队列用于依照到达闪存控制器的时间顺序存储主机端发出的主机命令。8.本发明还涉及一种调度主机命令的装置,包含:随机存取存储器;闪存接口,耦接闪存模块;主机接口,耦接主机端;和处理单元,耦接随机存取存储器、闪存接口和主机接口。处理单元依照到达所述装置的时间顺序从第一队列的顶端迁移一个或多个主机写命令至第二队列,使得第一队列的顶端存储主机读命令;从第一队列的顶端提取主机读命令;执行主机读命令,用于驱动闪存接口从闪存模块读取用户数据;以及驱动主机接口回复用户数据给主机端。9.上述实施例的优点之一,通过所述两个队列的设置以及所述的调度机制,可避免主机读命令想取得的用户数据因为长数据的写入而不能及时回复给主机端,造成应用程序的开启不顺。10.本发明的其他优点将配合以下的说明和附图进行更详细的解说。附图说明11.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。12.图1为依据本发明实施例的电子装置的系统架构图。13.图2为依据本发明实施例的闪存模块的示意图。14.图3为依据一些实施方式的原生命令队列的示意图。15.图4为依据本发明实施例的原生命令队列和原生写命令队列的示意图。16.图5为依据本发明实施例的写入程序的方法流程图。17.图6为依据本发明实施例的垃圾回收程序的方法流程图。18.图7为依据本发明实施例的读取程序的方法流程图。19.其中,附图中符号的简单说明如下:20.10:电子装置;110:主机端;130:闪存控制器;131:主机接口;132:总线;134:处理单元;136:随机存取存储器;138:直接存储存取控制器;139:闪存接口;150:闪存模块;151:接口;153#0~153#15:nand闪存单元;ch#0~ch#3:通道;ce#0~ce#3:启动信号;300:原生命令队列;400:原生写命令队列;s510~s570:方法步骤;s610~s650:方法步骤;s710~s730:方法步骤。具体实施方式21.以下将配合相关附图来说明本发明的实施例。在这些附图中,相同的标号表示相同或类似的组件或方法流程。22.必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用于表示存在特定的技术特征、数值、方法步骤、操作、组件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、操作、组件、组件,或以上的任意组合。23.本发明中使用如“第一”、“第二”、“第三”等词是用来修饰权利要求中的组件,并非用来表示之间具有优先权顺序,先行关系,或者是一个组件先于另一个组件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的组件。24.必须了解的是,当组件描述为“连接”或“耦接”至另一组件时,可以是直接连结、或耦接至其他组件,可能出现中间组件。相反地,当组件描述为“直接连接”或“直接耦接”至另一组件时,其中不存在任何中间组件。用于描述组件之间关系的其他词语也可以类似方式解读,例如“介于”相对于“直接介于”,或者“邻接”相对于“直接邻接”等等。25.参考图1。电子装置10包含主机端(hostside)110、闪存控制器130及闪存模块150,并且闪存控制器130及闪存模块150可合称为装置端(deviceside)。电子装置10可实施于个人计算机、笔记本计算机(laptoppc)、平板计算机、移动电话、数字相机、数字摄影机等电子产品之中。主机端110与闪存控制器130的主机接口(hostinterface)131可以通用串行总线(universalserialbus,usb)、先进技术附件(advancedtechnologyattachment,ata)、串行先进技术附件(serialadvancedtechnologyattachment,sata)、快速外设组件互联(peripheralcomponentinterconnectexpress,pci-e)、通用闪存存储(universalflashstorage,ufs)、快速非易失存储器(non-volatilememoryexpress,nvme)、嵌入式多媒体卡(embeddedmulti-mediacard,emmc)等通信协议彼此通信。闪存控制器130的闪存接口(flashinterface)139与闪存模块150可以双倍数据率(doubledatarate,ddr)通信协议彼此通信,例如,开放nand闪存接口(opennandflashinterface,onfi)、双倍数据率开关(ddrtoggle)或其他通信协议。闪存控制器130包含处理单元134,可使用多种方式实施,如使用通用硬件(例如,单处理器、具有并行处理能力的多处理器、图形处理器或其他具有运算能力的处理器),并且在执行软件以及/或固件指令时,提供之后描述的功能。处理单元134通过主机接口131接收主机命令,例如读取命令(readcommand)、写入命令(writecommand)、抹除命令(erasecommand)等,调度并执行这些命令。闪存控制器130还包含随机存取存储器(randomaccessmemory,ram)136,可实施为动态随机存取存储器(dynamicrandomaccessmemory,dram)、静态随机存取存储器(staticrandomaccessmemory,sram)或上述两者的结合,用于配置空间作为数据缓冲区,存储从主机端110读取并即将写入闪存模块150的用户数据(也可称为主机数据),以及从闪存模块150读取并即将输出给主机端110的用户数据。随机存取存储器136还可存储执行过程中需要的数据,例如,变量、数据表、主机-闪存对照表(host-to-flash,h2ftable)、闪存-主机对照表(flash-to-host,f2htable)等。闪存接口139包含nand闪存控制器(nandflashcontroller,nfc),提供存取闪存模块150时需要的功能,例如命令串行器(commandsequencer)、低密度奇偶校验(lowdensityparitycheck,ldpc)等。26.闪存控制器130中可配置总线架构(busarchitecture)132,用于让组件之间彼此耦接以传递数据、地址、控制信号等,这些组件包含主机接口131、处理单元134、ram136、直接存储存取(directmemoryaccess,dma)控制器138、闪存接口139等。dma控制器138可依据处理单元134的指令,通过总线架构132在组件间迁移数据,例如,将主机接口131或闪存接口139中的特定数据缓存器(databuffer)的数据搬到ram136中的特定地址,将ram136中的特定地址的数据搬到主机接口131或闪存接口139中的特定数据缓存器等。27.闪存模块150提供大量的存储空间,通常是数百个千兆字节(gigabytes,gb),甚至是多个兆兆字节(terabytes,tb),用于存储大量的用户数据,例如高分辨率图片、影片等。闪存模块150中包含控制电路以及存储器数组,存储器数组中的存储单元可包含单层式单元(singlelevelcells,slcs)、多层式单元(multiplelevelcells,mlcs)、三层式单元(triplelevelcells,tlcs)、四层式单元(quad-levelcells,qlcs)或上述的任意组合。处理单元134通过闪存接口139写入用户数据到闪存模块150中的指定地址(目的地址),以及从闪存模块150中的指定地址(来源地址)读取用户数据。闪存接口139使用多个电子信号来协调闪存控制器130与闪存模块150间的数据与命令传递,包含数据线(dataline)、时钟信号(clocksignal)与控制信号(controlsignal)。数据线可用于传递命令、地址、读出及写入的数据;控制信号线可用于传递芯片启动(chipenable,ce)、地址提取启动(addresslatchenable,ale)、命令提取启动(commandlatchenable,cle)、写入启动(writeenable,we)等控制信号。28.参考图2,闪存模块150中的接口151可包含四个输入输出通道(i/ochannels,以下简称通道)ch#0至ch#3,每一个通道连接四个nand闪存单元,例如,信道ch#0连接nand闪存单元153#0、153#4、153#8及153#12,依此类推。每个nand闪存单元可封装为独立的芯片(die)。闪存接口139可通过接口151发出启动信号ce#0至ce#3中的一个来启动nand闪存单元153#0至153#3、153#4至153#7、153#8至153#11、或153#12至153#15,接着以并行的方式从启动的nand闪存单元读取用户数据,或者写入用户数据至启动的nand闪存单元。29.在一些实施方式中,ram136配置空间给原生命令队列(nativecommandqueue,ncq),用于依照命令到达闪存控制器130的时间顺序存储主机端110发送的命令,例如主机读命令、主机写命令、主机抹写命令等。参考图3,ncq300包含多笔项目(entry)形成的集合(collection)。原生命令队列300中的每一笔项目可存储一个主机命令,例如主机读命令(以“r”代表)、主机写命令(以“w”代表)等。ncq300的操作基本原则是由结束位置(如指针t所指的位置)新增项目(可称为入列),并且由开始位置(如指针h所指的位置)移除项目(可称为出列)。也就是说,第一个新增至ncq300的命令,也将会是第一个被移出的,符合先进先出(first-infirst-out,fifo)的原则。位在第8个项目的主机读命令必须等第0到7个主机写命令都执行完才能执行。然而,此主机读命令可能是根据主机端110开启应用程序时需要读取特定地址的用户数据而发出的,而之前的8个主机写命令的执行可能是需要花费一段时间的长数据写入,使得此主机读命令想取得的用户数据不能及时回复给主机端110,造成应用程序的开启不顺,更糟的是,让使用者认为固态硬盘(solidstatedisk,ssd)产品的效能不佳。30.为了解决如上所述实施方式的问题,本发明实施例提出一种主机命令的调度机制,用于让主机读命令不因为长数据写入的主机写命令的执行而太晚被提取及执行。在一般情况下,新调度机制可让主机读命令的优先权高于主机写命令,让闪存控制器130能够优先服务主机读命令。参考图4,除了ncq300以外,ram136另配置空间给原生写命令队列(nativecommandqueue-write,ncq-w)400,用于依照到达闪存控制器130的时间顺序存储从ncq300迁移的主机写命令。举例来说,由于如图3所示的ncq300中包含了主机读命令,并且在第0至第7个项目的主机写命令之后,因此,新的调度机制将ncq300中的第0至第7个项目的主机写命令先迁移到ncq-w400,使得处理单元134能够先从ncq300中提取并执行第0到第1个主机读命令。详细来说,处理单元134依照第0到第1个主机读命令中携带的信息驱动闪存接口139从闪存模块150读取用户数据,并且驱动主机接口131回复用户数据给主机端110。所属
技术领域
:人员可让ncq-w400的深度d2小于ncq300的深度d1。例如,d1为20、32、64时,d2可分别设为10、16、32。通过ncq300和ncq-w400的设置,以及如上所述的调度机制,可避免主机读命令想取得的用户数据因为长数据的写入而不能及时回复给主机端110,造成应用程序的开启不顺。31.为了让主机读命令能够尽快被执行,处理单元134加载和执行相关固件或软件指令时会在多个时间点从ncq300迁移主机写命令到ncq-w400主机读命令,并侦测ncq300中是否存在任何主机读命令。详细说明如下:32.参考图5,为相应于如上所述的调度机制,本发明实施例提出一种写入程序,由处理单元134加载和执行相关固件或软件指令时实施。在写入程序中,处理单元134分批次提取并执行ncq-w400中的主机写命令,并且在每个批次中执行不超过默认数目的主机写命令,用于避免因执行主机写命令的时间过久而阻碍了未完成的垃圾回收程序(garbagecollection,gcprocedure)和/或造成主机读命令的执行逾时。在每个批次中,如果有未完成的gc处理,处理单元134先执行一段时间的未完成gc处理,然后才提取和执行ncq-w400中不超过默认数目的主机写命令。此外,如果ncq300中存在主机读命令,处理单元134先执行主机读命令,然后才提取和执行ncq-w400中不超过默认数目的主机写命令。33.当闪存模块150中的闲置块(spareblocks)的数量少于阈值时,闪存控制器130需要花费时间执行gc程序,避免闪存模块150因可用空间不足而无法再写入数据。详细来说,处理单元134驱动闪存接口139将闪存模块150中存储的多个物理块中破碎的用户数据搜集起来,并将搜集的用户数据写入闪存模块150中新的物理块,用于使这些释放出来的物理块可在抹除后被其他用户数据使用。34.图5的详细步骤说明如下:35.步骤s510:判断是否存在未完成的gc程序。如果是,流程继续步骤s520的处理;否则,流程继续步骤s530的处理。需要注意的是,如果不先执行gc程序来释放出更多的可用空间,可能会让主机写命令在执行时发生空间不足的情况。处理单元134可在执行gc程序的过程中,于ram136中记录一个公用变量(publicvariable),用于指出gc程序还需要的时间(也可称为剩余时间)。处理单元134可通过公用变量判断是否存在未完成的gc程序。如果公用变量的值大于0,则代表存在未完成的gc程序。如果公用变量的值等于0,则代表不需要执行gc程序、即不存在未完成的gc程序。36.步骤s520:进入gc程序。gc程序的技术细节将在图6中描述。在这里需要注意的是,当gc程序离开后,将回到写入程序并继续步骤s530的处理。37.步骤s530:从ncq300的顶端迁移主机写命令到ncq-w400,直到在ncq300的顶端发现了主机读命令,或ncq300空了,或ncq-w400满了为止。处理单元134可反复执行一个循环,直到上述条件中的一个满足为止。在每一回合,处理单元134先检查上述条件是否满足,并且,当所有条件都不满足时,从ncq300的顶端迁移一个主机写命令到ncq-w400的底端。38.步骤s540:判断ncq300中是否存在主机读命令。如果是,流程继续步骤s550的处理;否则,流程进行步骤s560的处理。39.步骤s550:进入读取程序。读取程序的技术细节将在图7中描述。在这里需要注意的是,当读取程序离开后,将回到写入程序并继续步骤s560的处理。40.步骤s560:从ncq-w400的顶端提取并执行ncq-w400中不超过默认数目的主机写命令。参考图2,为了优化闪存模块150的写入操作,举例来说,处理单元134可将提取的主机写命令所指示写入的用户数据切割成固定的长度,例如16k字节,并且驱动闪存接口139通过通道ch#0到ch#3并行地写入启动的nand闪存单元。接着,处理单元134可驱动主机接口131回复这些提取的主机写命令已经执行完毕的信息给主机端110。41.步骤s570:判断是否执行完ncq-w400中所有的主机写命令。如果是,流程离开写入程序;否则,流程进行步骤s510的处理。42.参考图6,为相应于如上所述的调度机制,本发明实施例提出一种gc程序,由处理单元134加载和执行相关固件或软件指令时实施。处理单元134分段执行gc程序,用于避免因执行gc程序的时间过久而让主机写命令的执行逾时。在每个批次中,如果ncq300中存在主机读命令,处理单元134先执行主机读命令,然后才执行一段时间的gc操作。需要注意的是,gc程序并不只能从写入程序触发,也可以是处理单元134在执行优化的背景程序时触发。详细步骤说明如下:43.步骤s610:从ncq300的顶端迁移主机写命令到ncq-w400,直到在ncq300的顶端发现了主机读命令,或ncq300空了,或ncq-w400满了为止。详细技术细节可参考步骤s530的说明,为求简明不再赘述。44.步骤s620:判断ncq300中是否存在主机读命令。如果是,流程继续步骤s630的处理;否则,流程进行步骤s640的处理。45.步骤s630:进入读取程序。读取程序的技术细节将在图7中描述。在这里需要注意的是,当读取程序离开后,将回到写入程序并继续步骤s640的处理。46.步骤s640:执行一段时间的gc操作。47.步骤s650:计算未完成gc程序所需要的时间。处理单元134可更新ram136中的公用变量,用于指出未完成gc程序所需要的时间给其他程序参考。48.从图5和图6所示的方法可知,当ncq300中存在主机读命令时,写入程序和gc程序都需要暂停来让主机读命令先执行。然而,闪存控制器130也需要保证主机写命令不能逾时,否则,主机端110可能认为先前发送给闪存控制器130的主机写命令发生逾时而采取一些错误回复行动,例如重送主机写命令。49.为避免如上所述的问题,参考图7,本发明实施例提出一种读取程序,由处理单元134加载和执行相关固件或软件指令时实施。详细步骤说明如下:50.步骤s710:判断ncq-w400中是否存在即将逾时的主机写命令。如果是,流程继续步骤s720的处理;否则,流程进行步骤s730的处理。在每个主机写命令进入ncq300时,都会给予一个时间戳(timestamp),用于记录此主机写命令进入闪存控制器130的时间点。处理单元134可判断ncq-w400顶端的主机写命令的时间戳距离现在所经过的时间是否大于默认阈值,如果是,则代表ncq-w400顶端的主机写命令即将逾时。51.步骤s720:从ncq-w400的顶端提取并执行即将逾时的主机写命令。处理单元134可执行一个循环,持续搜集位于ncq-w400顶端的主机写命令,直到ncq-w400不存在即将逾时的主机写命令,或者ncq-w400空了为止。接着,为了优化闪存模块150的写入操作,举例来说,处理单元134可将搜集到的主机写命令所指示写入的用户数据切割成固定的长度,例如16k字节,并且驱动闪存接口139通过通道ch#0到ch#3并行地写入启动的nand闪存单元。接着,处理单元134可驱动主机接口131回复这些搜集到的主机写命令已经执行完毕的信息给主机端110。52.步骤s730:从ncq300的顶端提取并执行主机读命令。处理单元134可执行一个循环,持续提取并执行位于ncq300顶端的主机读命令,直到ncq300的顶端不是主机读命令,或者ncq300空了为止。在每一个回合中,处理单元134可取得主机读命令指示的逻辑地址(例如,逻辑区块地址(logicalblockaddress,lba)),并通过搜索逻辑-物理映射表(logical-to-physical,l2ptable)来得到此逻辑地址的用户数据实际存储于闪存模块150的物理地址。接着,处理单元134可驱动闪存接口139从闪存模块150读取此物理地址的用户数据并驱动主机接口131将读取的用户数据回复给主机端110。53.本发明所述的方法中的全部或部分步骤可以由计算机程序实现,例如存储装置中的固件转换层(firmwaretranslationlayer,ftl)、计算机中特定硬件的驱动程序等。此外,也可实现于如上所示的其他类型程序。所属
技术领域
:中的技术人员可将本发明实施例的方法撰写成程序代码,为求简明不再加以描述。依据本发明实施例方法实施的计算机程序可存储于适当的计算机可读取存储介质,例如dvd、cd-rom、u盘、硬盘,也可置于可通过网络(例如,互联网,或其他适当介质)存取的网络服务器。54.虽然图1、图2中包含了以上描述的组件,但不排除在不违反发明的精神下,使用更多其他的附加组件,以达成更佳的技术效果。此外,虽然图5到图7的流程图采用指定的顺序来执行,但是在不违反发明精神的情况下,所属
技术领域
:的技术人员可以在达到相同效果的前提下,修改这些步骤之间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。此外,所属
技术领域
:的技术人员也可以将若干步骤整合为一个步骤,或者是除了这些步骤外,循序或并行地执行更多步骤,本发明也不应因此而局限。55.以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本技术的权利要求书所界定的范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1